当前系统与服务情况总结
项目 状况 操作系统 Ubuntu 24.04 LTS 80端口占用 是 gunicorn 占用(你部署的 Web 应用) Apache 未安装 Nginx 未安装 反向代理 还没配置过 frps 启动方式 已 systemctl 管理
⸻
❗问题本质
你服务器的 Gunicorn 已经监听了 80 端口 → 所以:
frps 无法绑定 vhost_http_port = 80,导致 HTTP 域名转发(custom_domains)无法生效
⸻
✅ 推荐解决方案(最佳)
✅ 保留你现有的网站服务(Gunicorn),不动它
🔁 通过 Nginx 做反向代理到 frps 的 8088 端口
这就是你之前提到的「方案二」,现在我们可以正式执行。
⸻
🧰 一键配置指南(Nginx 反代)
📦 第一步:安装 Nginx
sudo apt update sudo apt install nginx -y
⸻
⚙️ 第二步:配置 /etc/nginx/sites-available/tv.00ling.com
sudo nano /etc/nginx/sites-available/tv.00ling.com
填入以下内容:
server { listen 80; server_name tv.00ling.com;
location / {
proxy_pass http://127.0.0.1:8088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
⸻
🔗 第三步:启用该配置并重载
sudo ln -s /etc/nginx/sites-available/tv.00ling.com /etc/nginx/sites-enabled/ sudo nginx -t # 检查配置 sudo systemctl reload nginx
⸻
🚀 第四步:确保 frps 正确监听 8088
你的 /opt/frp/frp_0.62.1_linux_amd64/frps.ini 应该是:
[common] bind_port = 7000 vhost_http_port = 8088 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin
重启:
sudo systemctl restart frps
⸻
✅ 第五步:确保你本地 frpc 正常运行
[common] server_addr = 101.132.248.137 server_port = 7000
[tv] type = http local_ip = 127.0.0.1 local_port = 8096 custom_domains = tv.00ling.com
本地运行:
./frpc -c frpc.ini
⸻
🌐 第六步:DNS 设置回顾(阿里云解析)
主机记录 类型 值 tv A 101.132.248.137
⸻
✅ 最终验证
访问 http://tv.00ling.com: • 能看到 Jellyfin 页面 ✔️ • 没有 502、403 等报错 ✔️ • frpc 日志中显示 [tv] start proxy success ✔️
⸻
❓还可以附加: • 自动启动 frps / frpc 的 systemd 服务文件 • SSL(HTTPS)证书配置(使用 Let’s Encrypt + Nginx)
如果你还希望开启 https://tv.00ling.com,我可以帮你配置 Certbot 实现免费自动证书。
你的意思是: • 网站本地运行上传图片正常 • 部署到服务器、通过 Nginx 访问网站时上传图片失败 • 并且是较大图片或频繁上传才失败,提示连接被断开、上传超时或“413 Request Entity Too Large”类似错误
这类情况大概率是 Nginx 限制了上传请求的大小或速率,你可以按以下步骤检查并解决:
⸻
✅ 一、增加上传文件大小限制(413 或无法上传图片常见原因)
修改 Nginx 配置文件,增加 client_max_body_size:
- 打开配置文件(通常为 /etc/nginx/nginx.conf 或某个 site 配置)
sudo nano /etc/nginx/nginx.conf
或:
sudo nano /etc/nginx/sites-enabled/你的站点配置文件
- 在 http {} 或 server {} 块中加入 / 修改:
client_max_body_size 20M; # 允许最大上传 20M,可根据需求设置
如果你已经设置过 client_max_body_size,请确认单位为 M(大写)且位置正确。
- 保存并重启 Nginx:
sudo systemctl restart nginx
⸻
✅ 二、上传超时或“连接被重置”:增加请求超时时间(可选)
在 nginx.conf 的 http 或 server 区块中加入:
proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300;
说明: 如果你的 Flask 后端上传处理较慢(如压缩图像、上传到 OSS),建议增加超时。
⸻
✅ 三、确认 Flask 后端是否有限制
如果你用了 Flask 上传图片,记得也设置 Flask 的最大请求体大小:
在 Flask 应用配置中加:
app.config['MAX_CONTENT_LENGTH'] = 20 * 1024 * 1024 # 20 MB
⸻
✅ 四、测试建议 1. 上传一张 100KB 的小图片,能否成功? 2. 上传 3MB 的大图片,会不会报错?报错信息是什么? 3. curl 或浏览器开发者工具中,上传请求的响应码是什么?(如 413、504、499)
⸻
✅ 五、如果你使用了 gunicorn,也需要确认:
gunicorn 不限制文件大小,但如果是 --timeout 太短,也可能导致连接中断:
gunicorn -w 3 -b 0.0.0.0:5000 app:app --timeout 120
⸻ 要彻底取消上传限制(或极大放宽限制),你需要在 Nginx 的配置中添加以下指令,放在你贴出的 http 块内部:
⸻
✅ 建议修改内容(放在 http 块中)
http { # 你已有的配置...
# === 添加以下配置以放宽或取消限制 ===
client_max_body_size 100M; # 允许最大上传文件大小(默认只有 1M)
client_body_timeout 300s; # 等待上传的超时时间
send_timeout 300s; # 响应超时
keepalive_timeout 300s;
client_header_timeout 300s;
# 其他配置继续保持...
}
⸻
✅ 可选(进一步提高性能 & 稳定性)
如果你部署在高并发场景下,可以再调整这两个参数(可选):
proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s;
⸻
🚀 修改步骤总结 1. 编辑配置文件:
sudo nano /etc/nginx/nginx.conf
在 http { ... } 中加入上述参数。
2. 检查语法是否正确:
sudo nginx -t
3. 重启 Nginx 服务:
sudo systemctl restart nginx
⸻
🔍 验证上传是否成功
上传图片后你可以: • 观察浏览器控制台 → 网络(Network) → 上传请求是否状态码为 200 • 检查 /var/log/nginx/error.log 是否仍有 client intended to send too large body 类似报错 • 确认 Flask 后台有无限制(如 app.config['MAX_CONTENT_LENGTH'])
⸻