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. 检查配置文件包含关系 🧩
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
sudo tee /etc/nginx/conf.d/blog.conf > /dev/null <<'EOF' server { listen 666 ssl; server_name blog.mobufan.eu.org;
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
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
| valid_referers none blocked server_names *.mobufan.eu.org; if ($invalid_referer) { return 403; }
|
2. 启用 Gzip 压缩
1 2 3 4
| 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
| 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
curl -v -k https://blog.mobufan.eu.org:666/
|
📊 监控和维护
1. 设置日志轮转
1 2
| 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
| 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
| 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
| watch -n 1 "netstat -an | grep :80 | wc -l"
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
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 {} \;
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
| 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
| 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 的管理命令并成功部署一个高性能、安全的图床服务。记得根据实际需求调整配置参数,并定期进行维护和监控。🎯