Nginx 图床服务部署 🐧

Nginx 架构

全面掌握 Nginx Web 服务器的管理命令与实战部署技巧


📖 目录导航


✨ Nginx 简介

Nginx (发音为”engine x”) 是一款高性能的开源 Web 服务器和反向代理服务器,以其高并发处理能力、低内存占用和卓越的稳定性著称。它不仅可以用作 HTTP/HTTPS 服务器,还能作为负载均衡器、邮件代理服务器和通用 TCP/UDP 代理服务器使用。

主要特性

  • 🚀 高性能:采用事件驱动架构,能够处理数万个并发连接
  • 📦 低内存消耗:相比传统服务器,内存使用效率更高
  • 🔧 模块化设计:支持动态模块加载,灵活扩展功能
  • ⚖️ 负载均衡:提供多种负载均衡算法,支持健康检查
  • 🔒 安全性:支持 SSL/TLS 加密,各种安全头部设置
  • 🌐 反向代理:强大的反向代理功能,支持缓存和压缩

📋 一、版本与安装管理

1. 查看 Nginx 版本 🔍

1
nginx -v

2. 查看详细版本和编译信息 📦

1
nginx -V

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 版本 ⬆️

1
sudo apt upgrade 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 配置 🔧

1
source ~/.bashrc 

9. 查看所有运行的 Nginx 进程 👀

1
ps aux | grep nginx

⚙️ 三、配置测试与重载

1. 测试配置文件语法是否正确 🧪

1
nginx -t

2. 查看 Nginx 最终生效的配置 📝

1
nginx -T

3. 重新加载配置文件(不中断服务)🔄

1
nginx -s reload

4. 测试特定配置文件是否正确 🎯

1
nginx -t -c /etc/nginx/conf.d/xunlei.conf

5. 优雅停止 Nginx(处理完当前请求)🛑

1
nginx -s quit

6. 立即停止 Nginx ⚡

1
nginx -s stop

7. 重新打开日志文件 📂

1
nginx -s reopen

📊 四、日志与监控

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 进程信息 🔎

1
ps aux | grep nginx

2. 检查配置文件包含关系 🧩

1
nginx -T | grep include

3. 查看编译时模块信息 📦

1
nginx -V

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. 检查配置语法

1
sudo nginx -t

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

⚠️ 安全注意事项

  1. 定期更新 SSL 证书
  2. 监控异常访问 patterns
  3. 设置文件上传限制
  4. 定期检查文件内容
  5. 启用访问日志分析
  6. 考虑添加身份验证

💡 七、实用技巧与提示

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. 端口被占用

    1
    2
    3
    4
    # 查找占用80端口的进程
    sudo lsof -i :80
    # 或者
    sudo netstat -tulnp | grep ":80"
  2. 配置文件错误 🐛

    1
    2
    3
    4
    # 详细检查配置错误
    sudo nginx -t
    # 检查特定配置段
    sudo nginx -T | grep -A 10 -B 10 "error"
  3. 权限问题 🔐

    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
  4. 模块缺失 📦

    1
    2
    3
    4
    # 查看已编译模块
    nginx -V 2>&1 | grep -- '--with-'
    # 查看动态加载的模块
    sudo nginx -T | grep "load_module"
  5. 性能问题 🐢

    1
    2
    3
    4
    # 检查工作进程数量
    ps aux | grep nginx | grep -v grep | wc -l
    # 监控服务器状态
    sudo nginx -T | grep -i "status"
  6. 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 测试语法,然后再重载配置。对于生产环境,建议先在测试环境验证配置变更。

紧急恢复步骤 🆘

  1. 备份当前配置:sudo cp -r /etc/nginx /etc/nginx.backup
  2. 检查配置:sudo nginx -t
  3. 如果配置错误,恢复备份:sudo cp -r /etc/nginx.backup/* /etc/nginx/
  4. 重启服务:sudo systemctl restart nginx
  5. 查看日志:sudo tail -f /var/log/nginx/error.log

通过本指南,您将能够全面掌握 Nginx 的管理命令并成功部署一个高性能、安全的图床服务。记得根据实际需求调整配置参数,并定期进行维护和监控。🎯