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 改完后仍然报错,请依次排查以下两道关卡:

  1. 1Panel WAF 防火墙拦截

    • 原因:1Panel 自带的 WAF(或长亭雷池 WAF)有独立的防护规则。
    • 解决:进入 1Panel 的「WAF/防火墙」应用,检查“网站防护设置”中是否有“最大请求体”或“文件上传限制”,将其同步调大或关闭。
  2. 后端服务自身的限制

    • 原因:Nginx 只是个“传话筒”。如果反代的是 AList、Nextcloud、网盘程序或自己编写的后端 API,它们自身也有各自的上传限制。
    • 解决:根据后端程序类型,同步修改其配置文件(如 PHP 的 upload_max_filesize、AList 的上传设置等)。
  3. 前端分片上传建议

    • 对于 50G 级别的网页端上传,强烈建议配合前端和后端使用「分片上传(Chunked Upload)」。否则任何网络微小波动导致单次请求中断,都会面临几大个 G 的进度从头开始的窘境。