适用场景:使用 FRP 进行内网穿透,1Panel 面板,经过 VPS 端的 OpenResty 反向代理访问 NAS,遇到“下载正常,上传小文件正常,大文件(>1MB)上传秒失败”的问题。
1. 问题现象
正常情况:外网下载文件正常,使用 https://IP: 端口 直连上传正常。
异常情况:使用 https:// 域名 访问时,上传超过 1MB 的文件,点击上传几秒后直接提示“失败”或连接中断。
根本原因:VPS 端的 OpenResty 默认开启了请求缓冲 (Buffering),且限制了上传包体大小。在 FRP 带宽受限的环境下,缓冲写入慢导致超时断开。
2. 解决方案(修改 VPS 端 OpenResty 配置)
这是解决问题的核心步骤。请登录 VPS 或服务器 1Panel 管理面板。
2.1 修改位置
找到您的站点配置文件(位于 网站 / 您的域名 / 配置文件 )。
在 server {...} 区块中,SSL 配置下方,反代规则上方,插入以下配置。
2.2 核心配置代码
# =========================================================
# ▼▼▼ 解决大文件上传失败的核心配置 ▼▼▼
# =========================================================
# 1. 解除上传文件大小限制 (0 表示无限制)
# 默认仅 1M,必须修改,否则大文件直接报 413 错误
client_max_body_size 0;
# 2. 关闭请求缓冲 (关键修复!)
# 让数据流直接流向后端,不写入 VPS 临时文件,防止因写入慢导致超时
proxy_request_buffering off;
# 3. 关闭响应缓冲
# 加快传输响应,减少延迟
proxy_buffering off;
# 4. 延长超时时间
# 防止大文件传输时间过长导致 Nginx 主动切断连接
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
# =========================================================
# ▲▲▲ 插入结束 ▲▲▲
# =========================================================
2.3 完整配置参考
server {
listen 443 ssl;
server_name nas.yourdomain.com;
# SSL 配置
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# --- 插入优化配置 ---
client_max_body_size 0;
proxy_request_buffering off;
proxy_buffering off;
proxy_send_timeout 300s;
# ------------------
# 引用反代规则 (例如面板生成的规则)
include /www/sites/yourdomain.com/proxy/*.conf;
}
2.4 生效配置
修改完成后,请务必保存并重载 OpenResty:
命令行:nginx -s reload
面板:点击“重启 OpenResty”或“重载配置”。
3. 附录:FRP 客户端配置建议
虽然问题主要解决在 OpenResty 端,但为了稳定性,建议 frpc.toml 使用以下配置:
[transport]
# 建议开启 TLS 防止运营商干扰
tls.enable = true
# 适当增加心跳容错
heartbeatInterval = 30
heartbeatTimeout = 120
4. 防坑指南 (重要)
面板覆盖风险:如果您使用的是 1Panel、宝塔等面板,在 UI 界面修改“反向代理”或“SSL”设置并点击保存时,面板可能会重写配置文件,导致上述代码丢失。
维护建议:如果未来再次出现上传秒失败的问题,请第一时间检查配置文件中 proxy_request_buffering off; 是否被还原。