1Panel 反向代理支持 50G 超大文件上传配置指南(拒绝 413/504 错误)
在使用 1Panel 的 OpenResty(Nginx)部署反向代理时,默认的上传限制通常较小(如 50MB)。如果直接上传 G 级别或 50G 级别的超大文件,会直接触发 413 Too Large 报错、504 Timeout 超时,甚至可能因为缓存机制导致服务器磁盘被直接塞爆。
本文提供一份完美的 OpenResty(Nginx)全局优化配置,将反代打造成“透明管道”,支持 50G+ 文件流式稳定上传。
🛠️ 核心配置修改
登录 1Panel 面板,进入 「应用商店」 -> 「已安装」 -> OpenResty -> 「设置」 -> 「配置修改」,将 nginx.conf 中的 http { ... } 块对应参数修改并补充为如下内容:
http {
# ... 保持原有的 mime.types、log_format、access_log 等配置不变 ...
sendfile on;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
# 1. 解除上传大小限制(0 代表完全不限制,也可写 50g)
client_max_body_size 0;
keepalive_timeout 60;
keepalive_requests 100000;
# ... 保持原有的 gzip 和 limit_conn 配置不变 ...
include /usr/local/openresty/nginx/conf/conf.d/*.conf;
include /usr/local/openresty/1pwaf/data/conf/waf.conf;
# 2. 反向代理基础路径
proxy_temp_path /www/common/proxy/proxy_temp_dir;
proxy_cache_path /www/common/proxy/proxy_cache_dir levels=1:2 keys_zone=proxy_cache_panel:20m inactive=1d max_size=5g;
client_body_buffer_size 512k;
# 3. 调大超时时间:防止大文件传输时间过长导致连接被 Nginx 主动掐断(3600秒 = 1小时)
proxy_connect_timeout 3600;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
# 4. 关键:关闭反代缓存(核心安全优化)
# 彻底关闭请求和响应缓存,让大文件以“流式传输”直接发给后端
# 防止 Nginx 把 50G 文件先写入本地临时目录,避免塞爆服务器系统盘
proxy_buffering off;
proxy_request_buffering off;
# 5. 其他反代基础参数
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
#proxy_cache proxy_cache_panel;
}⚠️ 注意:修改完成后,务必在 1Panel 的 OpenResty 页面点击 「重载配置」 或 「重启」 才会正式生效。
🔍 为什么要这样改?(不改的后果)
| 修改项 | 不修改的后果 |
|---|---|
client_max_body_size 0; | 秒弹 413 错误。Nginx 的安全硬门槛,超过原本的 50M 就会被视作恶意请求直接拦截。 |
proxy_..._timeout 3600; | 进行到第 61 秒时弹 504 错误。大文件上传需要时间,默认的 60 秒超时太短,连接会被强制掐断。 |
proxy_request_buffering off; | 最危险:可能导致服务器集体崩溃。默认开启时,Nginx 会把 50G 文件先完整下载到本地临时目录。如果系统盘剩余空间不足 50G,磁盘会瞬间被写满(100%),导致服务器上的数据库、其他网站因无法写日志而集体宕机。 |
proxy_buffering off; | 导致传输卡死或 OOM 内存溢出。关闭响应缓存可以避免 Nginx 缓存后端的交互状态流,大幅提升超大文件传输的平稳性。 |
🚨 三步排查法:如果依然无法上传?
如果 Nginx 改完后仍然报错,请依次排查以下两道关卡:
-
1Panel WAF 防火墙拦截
- 原因:1Panel 自带的 WAF(或长亭雷池 WAF)有独立的防护规则。
- 解决:进入 1Panel 的「WAF/防火墙」应用,检查“网站防护设置”中是否有“最大请求体”或“文件上传限制”,将其同步调大或关闭。
-
后端服务自身的限制
- 原因:Nginx 只是个“传话筒”。如果反代的是 AList、Nextcloud、网盘程序或自己编写的后端 API,它们自身也有各自的上传限制。
- 解决:根据后端程序类型,同步修改其配置文件(如 PHP 的
upload_max_filesize、AList 的上传设置等)。
-
前端分片上传建议
- 对于 50G 级别的网页端上传,强烈建议配合前端和后端使用「分片上传(Chunked Upload)」。否则任何网络微小波动导致单次请求中断,都会面临几大个 G 的进度从头开始的窘境。