AutoBangumi生产环境部署:Nginx反向代理与SSL配置

AutoBangumi生产环境部署:Nginx反向代理与SSL配置

【免费下载链接】Auto_Bangumi AutoBangumi - 全自动追番工具 【免费下载链接】Auto_Bangumi 项目地址: https://gitcode.com/gh_mirrors/au/Auto_Bangumi

痛点直击:你的AutoBangumi还暴露在明文风险中吗?

当你在公网环境部署AutoBangumi(全自动追番工具)时,是否面临以下问题:

  • 直接暴露后端服务端口,存在被恶意扫描的风险
  • HTTP传输导致配置信息和认证令牌面临劫持威胁
  • 动态IP环境下难以通过固定域名访问服务
  • 多设备访问时的兼容性和安全性难以兼顾

本文将提供一套完整的生产环境部署方案,通过Nginx反向代理与SSL加密,实现安全、稳定、易维护的AutoBangumi服务架构。读完本文你将掌握

  • Nginx反向代理的完整配置(含WebSocket支持)
  • Let's Encrypt SSL证书的自动部署与续期
  • 生产环境安全加固的10项核心措施
  • 多场景下的访问控制策略实现
  • 性能优化与监控方案

架构设计:为什么需要反向代理?

AutoBangumi作为Python后端(FastAPI)+ Vue前端的Web应用,直接暴露在公网环境存在诸多隐患。采用Nginx反向代理架构可实现以下核心价值:

mermaid

核心优势对比表

直接暴露服务Nginx反向代理架构
暴露实际服务端口和技术栈隐藏后端细节,统一入口
不支持HTTPS加密传输全程SSL加密,防窃听篡改
难以实现访问控制内置防火墙与访问策略
静态资源由Python服务处理高效处理静态资源,减轻后端负载
无缓存机制,性能瓶颈多级缓存提升响应速度
单点故障风险高可扩展为集群架构

部署前准备:环境与工具检查清单

服务器环境要求

  • 操作系统:Ubuntu 20.04+/Debian 11+/CentOS 8+
  • 最低配置:1核CPU,1GB内存,10GB磁盘空间
  • 网络要求:公网IP,开放80/443端口
  • 域名:已解析至服务器IP的域名(如bangumi.example.com

必备工具安装

# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装Nginx
sudo apt install nginx -y

# 安装Certbot(用于SSL证书)
sudo apt install certbot python3-certbot-nginx -y

# 验证安装
nginx -v && certbot --version

AutoBangumi状态检查

确保AutoBangumi服务已在本地正常运行:

# 检查服务状态(以systemd为例)
sudo systemctl status autobangumi

# 验证本地访问
curl http://localhost:8000/api/v1/health
# 预期响应:{"status":"healthy","version":"x.x.x"}

第一步:Nginx基础配置

创建专用配置文件

# 创建配置文件
sudo nano /etc/nginx/sites-available/autobangumi

# 启用站点配置
sudo ln -s /etc/nginx/sites-available/autobangumi /etc/nginx/sites-enabled/

基础反向代理配置

server {
    listen 80;
    server_name bangumi.example.com;  # 替换为你的域名
    
    # 访问日志配置
    access_log /var/log/nginx/autobangumi-access.log;
    error_log /var/log/nginx/autobangumi-error.log;

    # 静态资源配置(如果前端文件由Nginx托管)
    location / {
        root /data/web/disk1/git_repo/gh_mirrors/au/Auto_Bangumi/webui/dist;
        try_files $uri $uri/ /index.html;
        expires 1d;  # 静态资源缓存1天
    }

    # API请求代理到后端服务
    location /api/ {
        proxy_pass http://localhost:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }

    # WebSocket支持(AutoBangumi实时通知功能)
    location /ws/ {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 健康检查端点
    location /health {
        proxy_pass http://localhost:8000/api/v1/health;
        access_log off;
        # 仅允许本地监控系统访问
        allow 127.0.0.1;
        deny all;
    }
}

配置验证与应用

# 验证配置语法
sudo nginx -t

# 重新加载配置
sudo systemctl reload nginx

# 查看Nginx状态
sudo systemctl status nginx

第二步:SSL证书部署与自动续期

一键获取Let's Encrypt证书

sudo certbot --nginx -d bangumi.example.com

执行过程中会出现交互式配置:

  1. 输入电子邮箱(用于证书到期通知)
  2. 同意服务条款(A)
  3. 是否共享电子邮箱(N)
  4. 是否自动重定向HTTP到HTTPS(选择2:Redirect)

证书自动续期配置

Let's Encrypt证书有效期为90天,配置自动续期:

# 测试续期命令
sudo certbot renew --dry-run

# 设置定时任务(通常Certbot已自动配置)
sudo systemctl status certbot.timer

# 手动添加定时任务(如未自动配置)
echo "0 3 * * * /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontab

SSL配置强化

编辑Nginx配置文件,添加安全强化参数:

server {
    listen 443 ssl;
    server_name bangumi.example.com;

    # SSL证书路径(Certbot自动生成)
    ssl_certificate /etc/letsencrypt/live/bangumi.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/bangumi.example.com/privkey.pem;
    
    # SSL协议与加密套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    
    # 会话缓存与超时
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    # HSTS配置(强制HTTPS访问)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
    # 安全头配置
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";
    add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self' https://api.bgm.tv;";
    
    # 其余配置与HTTP部分相同...
}

# HTTP请求重定向到HTTPS
server {
    listen 80;
    server_name bangumi.example.com;
    return 301 https://$host$request_uri;
}

第三步:生产环境安全加固

1. Nginx安全配置

# 隐藏Nginx版本号
sudo sed -i 's/# server_tokens off;/server_tokens off;/' /etc/nginx/nginx.conf

# 限制请求速率(防止DoS攻击)
sudo tee -a /etc/nginx/nginx.conf <<EOF
http {
    # ... 现有配置 ...
    
    # 连接限制
    limit_conn_zone \$binary_remote_addr zone=per_ip:10m;
    limit_conn per_ip 10;  # 单IP最多10个并发连接
    
    # 请求速率限制
    limit_req_zone \$binary_remote_addr zone=req_limit:10m rate=10r/s;
}
EOF

在站点配置中应用速率限制:

location /api/ {
    # ... 现有配置 ...
    limit_req zone=req_limit burst=20 nodelay;  # 突发允许20个请求
}

2. AutoBangumi配置加固

修改AutoBangumi配置文件backend/config/config.json

{
  "server": {
    "host": "127.0.0.1",  # 仅监听本地回环地址
    "port": 8000,
    "api_key": "生成强随机字符串作为API密钥",
    "cors_allowed_origins": ["https://bangumi.example.com"]  # 限制跨域来源
  },
  "security": {
    "login_required": true,  # 强制登录认证
    "jwt_expire_minutes": 120,  # JWT令牌有效期
    "password_hash": "$2b$12$生成的bcrypt哈希密码"  # 使用bcrypt哈希存储密码
  }
}

3. 防火墙配置(UFW)

# 启用UFW防火墙
sudo ufw enable

# 仅开放必要端口
sudo ufw allow 22/tcp  # SSH
sudo ufw allow 80/tcp  # HTTP(用于证书验证)
sudo ufw allow 443/tcp  # HTTPS

# 查看防火墙状态
sudo ufw status numbered

4. 日志监控与告警

配置日志轮转防止磁盘占满:

# 创建日志轮转配置
sudo tee /etc/logrotate.d/autobangumi <<EOF
/var/log/nginx/autobangumi-*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
EOF

第四步:性能优化与高可用配置

Nginx性能调优

编辑/etc/nginx/nginx.conf优化工作进程:

worker_processes auto;  # 自动根据CPU核心数调整
worker_rlimit_nofile 65535;  # 提高文件描述符限制

events {
    worker_connections 10240;  # 每个工作进程的最大连接数
    multi_accept on;  # 尽可能接受更多连接
    use epoll;  # 使用高效的epoll事件模型
}

http {
    # ... 现有配置 ...
    
    # 启用gzip压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_comp_level 5;
    gzip_min_length 256;
    
    # 启用TCP_nopush和TCP_nodelay
    tcp_nopush on;
    tcp_nodelay on;
    
    # 长连接超时设置
    keepalive_timeout 65;
    keepalive_requests 100;
}

反向代理缓存配置

为API响应添加缓存(适用于不常变化的数据):

http {
    # ... 现有配置 ...
    
    # 定义缓存区域
    proxy_cache_path /var/cache/nginx/autobangumi levels=1:2 keys_zone=ab_cache:10m max_size=100m inactive=7d use_temp_path=off;
}

# 在站点配置中应用缓存
location /api/v1/bangumi/list {
    proxy_pass http://localhost:8000;
    proxy_cache ab_cache;
    proxy_cache_key "$scheme$request_method$host$request_uri";
    proxy_cache_valid 200 5m;  # 200响应缓存5分钟
    proxy_cache_valid any 1m;   # 其他响应缓存1分钟
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    add_header X-Proxy-Cache $upstream_cache_status;  # 增加缓存状态响应头
    # ... 其他代理配置 ...
}

多实例负载均衡(可选)

当单实例性能不足时,可部署多个AutoBangumi实例并配置负载均衡:

http {
    # ... 现有配置 ...
    
    # 定义后端服务器组
    upstream autobangumi_servers {
        server 127.0.0.1:8000 weight=1;
        server 127.0.0.1:8001 weight=1;
        # 可添加更多实例
        ip_hash;  # 确保会话一致性
    }
}

# 修改代理目标为服务器组
location /api/ {
    proxy_pass http://autobangumi_servers;
    # ... 其他代理配置 ...
}

第五步:监控与维护方案

服务状态监控

创建简单的状态检查脚本/usr/local/bin/check_autobangumi.sh

#!/bin/bash
API_URL="http://localhost:8000/api/v1/health"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" $API_URL)

if [ "$STATUS" -ne 200 ]; then
    # 发送告警通知(可集成邮件、企业微信等)
    echo "AutoBangumi服务异常,HTTP状态码: $STATUS" | mail -s "AutoBangumi告警" admin@example.com
    # 尝试自动重启服务
    sudo systemctl restart autobangumi
fi

添加到定时任务:

# 每5分钟检查一次服务状态
echo "*/5 * * * * root /usr/local/bin/check_autobangumi.sh" | sudo tee -a /etc/crontab

版本更新流程

安全更新AutoBangumi的步骤:

# 进入项目目录
cd /data/web/disk1/git_repo/gh_mirrors/au/Auto_Bangumi

# 拉取最新代码
git pull origin main

# 更新依赖
cd backend && pip install -r requirements.txt && cd ..

# 构建前端
cd webui && npm install && npm run build && cd ..

# 重启服务
sudo systemctl restart autobangumi

# 检查服务状态
sudo systemctl status autobangumi

数据备份策略

# 创建备份脚本 /usr/local/bin/backup_autobangumi.sh
#!/bin/bash
BACKUP_DIR="/var/backups/autobangumi"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR

# 备份数据库
sqlite3 /path/to/autobangumi.db ".backup $BACKUP_DIR/autobangumi_$TIMESTAMP.db"

# 备份配置文件
tar -czf $BACKUP_DIR/config_$TIMESTAMP.tar.gz /data/web/disk1/git_repo/gh_mirrors/au/Auto_Bangumi/backend/config

# 删除7天前的备份
find $BACKUP_DIR -type f -mtime +7 -delete

常见问题排查与解决方案

1. 反向代理后WebSocket连接失败

症状:前端实时通知功能失效,浏览器控制台显示WebSocket连接错误
解决方案

  • 检查Nginx配置中是否包含WebSocket专用location块
  • 验证proxy_http_version 1.1Upgrade头配置是否正确
  • 查看Nginx错误日志:tail -f /var/log/nginx/autobangumi-error.log

2. SSL证书续期失败

症状certbot renew命令执行失败
解决方案

# 检查80端口是否被占用
sudo lsof -i :80

# 手动强制更新证书
sudo certbot renew --force-renewal

# 检查防火墙是否允许80端口访问(Let's Encrypt验证需要)
sudo ufw allow 80/tcp

3. API请求出现403 Forbidden

症状:通过域名访问API时返回403错误,但本地访问正常
解决方案

  • 检查AutoBangumi的CORS配置是否包含当前域名
  • 验证Nginx是否正确传递X-Forwarded-ForX-Forwarded-Proto
  • 检查是否启用了API密钥认证,需在请求头中添加Authorization: Bearer <api_key>

4. 静态资源加载异常

症状:页面布局错乱,浏览器控制台显示CSS/JS文件404
解决方案

  • 确认前端已正确构建:cd webui && npm run build
  • 检查Nginx的root路径是否指向正确的dist目录
  • 验证文件权限:sudo chown -R www-data:www-data /path/to/webui/dist

部署 checklist

部署完成后,请通过以下清单验证部署质量:

安全检查

  •  访问https://bangumi.example.com显示绿色安全锁
  •  HTTP请求自动重定向到HTTPS
  •  访问https://www.ssllabs.com/ssltest/analyze.html?d=bangumi.example.com评分达到A+
  •  API密钥认证功能正常工作
  •  尝试访问非授权接口返回401/403

功能验证

  •  可正常登录WebUI
  •  番剧列表可正确加载
  •  添加新RSS订阅功能正常
  •  下载任务可正确提交到下载器
  •  实时通知功能工作(如新增剧集时)

性能测试

  •  页面加载时间<3秒
  •  API响应时间<500ms
  •  连续刷新10次无5xx错误

总结与最佳实践

通过本文介绍的Nginx反向代理与SSL配置方案,你已将AutoBangumi从开发环境提升至生产级部署标准。关键收获包括:

  1. 安全层面:实现HTTPS加密传输、隐藏后端服务、API访问控制三层防护
  2. 可靠性层面:证书自动续期、服务状态监控、数据定期备份保障系统稳定
  3. 性能层面:静态资源缓存、API响应缓存、Nginx性能调优提升访问体验

最佳实践建议

  • 定期执行apt update && apt upgrade -y保持系统组件最新
  • 每月检查一次SSL配置评分,确保符合安全标准
  • 重大版本更新前先在测试环境验证,再应用到生产环境
  • 监控系统资源使用情况,及时发现性能瓶颈

随着AutoBangumi的不断迭代,建议关注官方文档的更新,及时将新的安全特性和最佳实践应用到你的部署方案中。

【免费下载链接】Auto_Bangumi AutoBangumi - 全自动追番工具 【免费下载链接】Auto_Bangumi 项目地址: https://gitcode.com/gh_mirrors/au/Auto_Bangumi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值