Nginx 图床服务部署 🐧
全面掌握 Nginx Web 服务器的管理命令与实战部署技巧
📖 目录导航
✨ Nginx 简介
Nginx (发音为"engine x") 是一款高性能的开源 Web 服务器和反向代理服务器,以其高并发处理能力、低内存占用和卓越的稳定性著称。它不仅可以用作 HTTP/HTTPS 服务器,还能作为负载均衡器、邮件代理服务器和通用 TCP/UDP 代理服务器使用。
主要特性:
- 🚀 高性能:采用事件驱动架构,能够处理数万个并发连接
- 📦 低内存消耗:相比传统服务器,内存使用效率更高
- 🔧 模块化设计:支持动态模块加载,灵活扩展功能
- ⚖️ 负载均衡:提供多种负载均衡算法,支持健康检查
- 🔒 安全性:支持 SSL/TLS 加密,各种安全头部设置
- 🌐 反向代理:强大的反向代理功能,支持缓存和压缩
📋 一、版本与安装管理
1. 查看 Nginx 版本 🔍
2. 查看详细版本和编译信息 📦
3. 安装 Nginx (Ubuntu/Debian) ⬇️
1
2
|
sudo apt update
sudo apt install nginx -y
|
4. 安装 Nginx (CentOS/RHEL) ⬇️
1
2
|
sudo yum install epel-release -y
sudo yum install nginx -y
|
5. 升级 Nginx 版本 ⬆️
6. 卸载 Nginx(保留配置文件)🗑️
1
|
sudo apt remove nginx nginx-common -y
|
7. 完全卸载 Nginx(删除配置文件)🔥
1
|
sudo apt remove --purge nginx nginx-common -y
|
8. 彻底清除 Nginx(删除所有相关文件)💥
1
|
sudo apt autoremove --purge nginx -y
|
🚀 二、服务控制命令
1. 启动 Nginx 服务 ▶️
1
|
sudo systemctl start nginx
|
2. 停止 Nginx 服务 ⏹️
1
|
sudo systemctl stop nginx
|
3. 重启 Nginx 服务 🔄
1
|
sudo systemctl restart nginx
|
4. 查看 Nginx 运行状态 📊
1
|
sudo systemctl status nginx
|
5. 设置开机自动启动 📈
1
|
sudo systemctl enable nginx
|
6. 禁用开机自动启动 📉
1
|
sudo systemctl disable nginx
|
7. 检查是否已启用开机启动 ✅
1
|
sudo systemctl is-enabled nginx
|
8. 重新加载 Bash 配置 🔧
9. 查看所有运行的 Nginx 进程 👀
⚙️ 三、配置测试与重载
1. 测试配置文件语法是否正确 🧪
2. 查看 Nginx 最终生效的配置 📝
3. 重新加载配置文件(不中断服务)🔄
4. 测试特定配置文件是否正确 🎯
1
|
nginx -t -c /etc/nginx/conf.d/xunlei.conf
|
5. 优雅停止 Nginx(处理完当前请求)🛑
6. 立即停止 Nginx ⚡
7. 重新打开日志文件 📂
📊 四、日志与监控
1. 查看错误日志 📖
1
|
cat /var/log/nginx/error.log
|
2. 实时跟踪错误日志 🎥
1
|
sudo tail -f /var/log/nginx/error.log
|
3. 查看访问日志 📖
1
|
cat /var/log/nginx/access.log
|
4. 实时跟踪访问日志 🎥
1
|
sudo tail -f /var/log/nginx/access.log
|
5. 使用 journalctl 查看日志 🖥️
1
|
sudo journalctl -u nginx
|
6. 查看实时日志(带时间戳)⏰
1
|
sudo tail -f /var/log/nginx/access.log | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}'
|
7. 查看 80 端口占用情况 🔍
1
|
netstat -tulnp | grep ":80"
|
8. 查看 443 端口占用情况 🔍
1
|
netstat -tulnp | grep ":443"
|
9. 监控 Nginx 连接数 📈
1
|
netstat -an | grep :80 | wc -l
|
🛠️ 五、高级调试命令
1. 查看 Nginx 进程信息 🔎
2. 检查配置文件包含关系 🧩
1
|
nginx -T | grep include
|
3. 查看编译时模块信息 📦
4. 检查特定虚拟主机配置 🎯
1
|
nginx -T | grep -A 20 -B 5 "server_name example.com"
|
5. 查看当前连接数统计 📊
1
|
netstat -an | grep :80 | awk '{print $6}' | sort | uniq -c | sort -n
|
6. 检查 Nginx 配置中的监听端口 🎧
1
|
nginx -T | grep "listen"
|
7. 查看服务器名称配置 🌐
1
|
nginx -T | grep "server_name"
|
8. 调试特定 IP 的连接 🔍
1
|
tcpdump -i any -n host 192.168.1.100 and port 80
|
🎯 六、实战案例:Nginx图床服务部署
🌟 概述
本指南将帮助您使用 Nginx 部署一个功能完善的图床服务,支持多种文件格式的访问和下载,并提供 SSL 加密保障安全性。
图床地址示例:
🚀 快速部署脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# 创建必要的目录
sudo mkdir -pm 755 /etc/nginx/conf.d /mnt/file/blog
# 创建并配置 Nginx 图床服务
sudo tee /etc/nginx/conf.d/blog.conf > /dev/null <<'EOF'
server {
# SSL 监听配置
listen 666 ssl;
server_name blog.mobufan.eu.org;
# SSL 证书配置
ssl_certificate /etc/nginx/keyfile/cert.pem;
ssl_certificate_key /etc/nginx/keyfile/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
# 静态文件处理
location ~ .*\.(gif|jpg|lrc|txt|doc|pdf|rar|gz|zip|jpeg|png|mp4|mkv|html|yaml)$ {
root /mnt/file/blog;
# 特定文件类型强制下载
if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|lrc|docx|exe|xlsx|ppt|pptx|yaml)$){
add_header Content-Disposition attachment;
}
autoindex on;
sendfile on;
autoindex_localtime on;
autoindex_format html;
autoindex_exact_size off;
charset utf-8,gbk;
expires 24h;
# 性能优化配置
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
}
# 处理无后缀名文件
location ~* ^/[^.]+$ {
root /mnt/file/blog;
add_header Content-Disposition "attachment; filename=$uri";
autoindex on;
sendfile on;
autoindex_localtime on;
autoindex_format html;
autoindex_exact_size off;
charset utf-8,gbk;
expires 24h;
}
}
EOF
# 重启 Nginx 服务
sudo systemctl restart nginx
|
📁 目录结构设置
创建图床目录结构
1
2
3
4
5
6
7
8
9
|
# 创建主图床目录
sudo mkdir -p /mnt/file/blog/{img,videos,documents,downloads}
# 设置正确的权限
sudo chown -R www-data:www-data /mnt/file/blog
sudo chmod -R 755 /mnt/file/blog
# 创建测试文件
sudo touch /mnt/file/blog/img/tmdb-01.jpg
|
🔐 SSL 证书配置
生成自签名证书(如果还没有证书)
1
2
3
4
5
6
7
8
|
# 创建证书目录
sudo mkdir -p /etc/nginx/keyfile
# 生成自签名证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/keyfile/key.pem \
-out /etc/nginx/keyfile/cert.pem \
-subj "/C=CN/ST=Beijing/L=Beijing/O=IT/CN=blog.mobufan.eu.org"
|
⚙️ 配置文件详解
主要配置功能
配置项 |
功能说明 |
推荐值 |
ssl_protocols |
支持的 SSL 协议版本 |
TLSv1 TLSv1.1 TLSv1.2 |
autoindex on |
启用目录浏览 |
开启 |
charset |
字符编码设置 |
utf-8,gbk |
expires |
浏览器缓存时间 |
24h |
client_max_body_size |
最大上传文件大小 |
10m |
支持的文件类型
- 图片: gif, jpg, jpeg, png
- 文档: txt, doc, pdf, docx, ppt, pptx
- 压缩包: rar, gz, zip
- 视频: mp4, mkv
- 其他: lrc, yaml, html
🛠️ 高级配置选项
1. 添加防盗链保护
1
2
3
4
5
|
# 在 location 块中添加防盗链配置
valid_referers none blocked server_names *.mobufan.eu.org;
if ($invalid_referer) {
return 403;
}
|
2. 启用 Gzip 压缩
1
2
3
4
|
# 在 http 或 server 块中添加
gzip on;
gzip_types image/jpeg image/png image/gif text/plain application/pdf;
gzip_comp_level 6;
|
3. 添加安全头
1
2
3
4
|
# 增强安全性
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
|
🔧 性能优化建议
1. 调整缓冲区大小
1
2
3
4
|
# 在 http 块中调整
client_body_buffer_size 128k;
client_max_body_size 20m;
large_client_header_buffers 4 256k;
|
2. 启用缓存优化
1
2
3
4
5
|
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
|
3. 连接优化
1
2
3
|
# 保持连接设置
keepalive_timeout 65;
keepalive_requests 100;
|
🐛 故障排除
1. 检查配置语法
2. 查看错误日志
1
|
sudo tail -f /var/log/nginx/error.log
|
3. 检查文件权限
1
2
3
4
5
6
|
# 检查目录权限
ls -la /mnt/file/blog/
# 修复权限问题
sudo chown -R www-data:www-data /mnt/file/blog
sudo chmod -R 755 /mnt/file/blog
|
4. 测试 SSL 证书
1
2
3
4
5
|
# 检查证书有效性
openssl x509 -in /etc/nginx/keyfile/cert.pem -text -noout
# 测试 SSL 连接
curl -v -k https://blog.mobufan.eu.org:666/
|
📊 监控和维护
1. 设置日志轮转
1
2
|
# 检查 logrotate 配置
sudo nano /etc/logrotate.d/nginx
|
2. 监控磁盘使用
1
2
3
4
5
|
# 设置磁盘使用监控
df -h /mnt/file/blog
# 设置自动清理旧文件
find /mnt/file/blog -type f -mtime +30 -delete
|
3. 备份配置
1
2
|
# 备份 Nginx 配置
sudo tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /etc/nginx/
|
🚀 部署验证
1. 测试图床功能
1
2
3
4
5
6
7
8
|
# 上传测试文件
sudo cp /path/to/test-image.jpg /mnt/file/blog/img/
# 测试访问
curl -I https://blog.mobufan.eu.org:666/img/test-image.jpg
# 测试目录列表
curl -k https://blog.mobufan.eu.org:666/img/
|
2. 性能测试
1
2
3
4
5
|
# 安装测试工具
sudo apt install apache2-utils
# 进行压力测试
ab -n 1000 -c 10 https://blog.mobufan.eu.org:666/img/tmdb-01.jpg
|
⚠️ 安全注意事项
- 定期更新 SSL 证书
- 监控异常访问 patterns
- 设置文件上传限制
- 定期检查文件内容
- 启用访问日志分析
- 考虑添加身份验证
💡 七、实用技巧与提示
1. 配置检查流程 ✅
1
2
3
4
5
|
# 推荐的操作顺序
nginx -t # 先检查配置是否正确
sudo nginx -T > nginx.conf # 导出当前配置备份
sudo systemctl restart nginx # 再重启服务
sudo systemctl status nginx # 最后确认状态
|
2. 日志轮转 🔄
1
2
3
4
5
6
7
|
# 使用 logrotate 自动管理日志
sudo logrotate -f /etc/logrotate.d/nginx
# 手动切割日志
sudo mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)
sudo mv /var/log/nginx/error.log /var/log/nginx/error.log.$(date +%Y%m%d)
sudo nginx -s reopen
|
3. 性能监控 📈
1
2
3
4
5
6
7
8
|
# 监控 Nginx 连接数
watch -n 1 "netstat -an | grep :80 | wc -l"
# 查看前10个访问最多的IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
# 查看最频繁访问的URL
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
|
4. 安全检查 🔒
1
2
3
4
5
6
7
8
|
# 检查配置文件权限
find /etc/nginx -type f -exec ls -la {} \;
# 检查SSL配置
sudo nginx -T | grep ssl_
# 查看证书过期时间
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
|
5. 备份配置 📂
1
2
3
4
5
|
# 备份当前配置
sudo tar -czf nginx-backup-$(date +%Y%m%d).tar.gz /etc/nginx
# 导出当前生效的配置
sudo nginx -T > nginx-config-$(date +%Y%m%d).conf
|
🚨 八、故障排除指南
常见问题及解决方案:
-
端口被占用 ❌
1
2
3
4
|
# 查找占用80端口的进程
sudo lsof -i :80
# 或者
sudo netstat -tulnp | grep ":80"
|
-
配置文件错误 🐛
1
2
3
4
|
# 详细检查配置错误
sudo nginx -t
# 检查特定配置段
sudo nginx -T | grep -A 10 -B 10 "error"
|
-
权限问题 🔐
1
2
3
4
5
|
# 检查Nginx用户权限
sudo -u nginx stat /var/www/html
# 修复文件权限
sudo chown -R nginx:nginx /var/www/html
sudo chmod -R 755 /var/www/html
|
-
模块缺失 📦
1
2
3
4
|
# 查看已编译模块
nginx -V 2>&1 | grep -- '--with-'
# 查看动态加载的模块
sudo nginx -T | grep "load_module"
|
-
性能问题 🐢
1
2
3
4
|
# 检查工作进程数量
ps aux | grep nginx | grep -v grep | wc -l
# 监控服务器状态
sudo nginx -T | grep -i "status"
|
-
SSL证书问题 🔒
1
2
3
4
|
# 检查证书链
openssl s_client -connect example.com:443 -servername example.com
# 验证证书
openssl verify -CAfile /path/to/ca.crt /path/to/site.crt
|
💡 提示:修改配置后,务必使用 nginx -t
测试语法,然后再重载配置。对于生产环境,建议先在测试环境验证配置变更。
紧急恢复步骤 🆘
- 备份当前配置:
sudo cp -r /etc/nginx /etc/nginx.backup
- 检查配置:
sudo nginx -t
- 如果配置错误,恢复备份:
sudo cp -r /etc/nginx.backup/* /etc/nginx/
- 重启服务:
sudo systemctl restart nginx
- 查看日志:
sudo tail -f /var/log/nginx/error.log
通过本指南,您将能够全面掌握 Nginx 的管理命令并成功部署一个高性能、安全的图床服务。记得根据实际需求调整配置参数,并定期进行维护和监控。🎯