AutoBangumi生产环境部署:Nginx反向代理与SSL配置
【免费下载链接】Auto_Bangumi AutoBangumi - 全自动追番工具 项目地址: 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反向代理架构可实现以下核心价值:
核心优势对比表
| 直接暴露服务 | 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
执行过程中会出现交互式配置:
- 输入电子邮箱(用于证书到期通知)
- 同意服务条款(A)
- 是否共享电子邮箱(N)
- 是否自动重定向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.1和Upgrade头配置是否正确 - 查看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-For和X-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从开发环境提升至生产级部署标准。关键收获包括:
- 安全层面:实现HTTPS加密传输、隐藏后端服务、API访问控制三层防护
- 可靠性层面:证书自动续期、服务状态监控、数据定期备份保障系统稳定
- 性能层面:静态资源缓存、API响应缓存、Nginx性能调优提升访问体验
最佳实践建议:
- 定期执行
apt update && apt upgrade -y保持系统组件最新 - 每月检查一次SSL配置评分,确保符合安全标准
- 重大版本更新前先在测试环境验证,再应用到生产环境
- 监控系统资源使用情况,及时发现性能瓶颈
随着AutoBangumi的不断迭代,建议关注官方文档的更新,及时将新的安全特性和最佳实践应用到你的部署方案中。
【免费下载链接】Auto_Bangumi AutoBangumi - 全自动追番工具 项目地址: https://gitcode.com/gh_mirrors/au/Auto_Bangumi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



