优化 nginx 处理 https 大文件上传需协同 client_max_body_size(如32m,写于server块)、client_body_buffer_size(如256k)、client_body_temp_path(权限与空间充足)、超时参数(client_body_timeout 600、proxy_read_timeout 3600等)、ssl 协议优化(tlsv1.2/1.3、会话复用)及后端限制对齐。

优化 Nginx 处理 HTTPS 大文件上传,核心是打通“客户端→Nginx→后端”全链路的容量、缓冲与超时协同。不能只调大某一个参数,而要让每一段都匹配真实上传行为——尤其是 HTTPS 加密带来的额外开销。
精准设置请求体上限与缓冲策略
client_max_body_size 是第一道闸门,设小了直接返回 413;设大了又浪费资源。大宗商品图或高清视频上传建议按 P95 流量设定,例如 32m(非 32M,单位大小写敏感),写在 server 块中避免全局影响:
- client_max_body_size 32m;
- client_body_buffer_size 256k; —— 文件 ≤256KB 在内存处理,更大则落盘;设太高易占内存,太低频繁 IO
- client_body_temp_path /var/tmp/nginx/client_body 1 2; —— 确保路径可写、空间充足(建议 ≥50GB)、权限属 nginx worker 用户
延长关键超时并适配 HTTPS 节奏
HTTPS 握手 + 加密 + 分块传输天然更慢,默认 60 秒超时极易中断。需区分作用点分别调长:
- client_body_timeout 600; —— 客户端发完 body 前的等待时间(如弱网上传 100MB 图)
- proxy_read_timeout 3600; —— Nginx 等后端返回响应的时间(上传完成后的 JSON 或重定向)
- proxy_send_timeout 3600; —— Nginx 向后端转发大 body 时的发送超时
- ssl_buffer_size 16k; —— 提升 TLS 记录大小,减少加密/解密次数,千兆带宽下效果明显
强化 SSL 协议层与连接复用
SSL 不只是加密,更是性能瓶颈点。TLS 1.3 + 会话复用能显著降低握手延迟和 CPU 消耗:
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256';
- ssl_session_cache shared:SSL:20m; ssl_session_timeout 15m;
- ssl_stapling on; ssl_stapling_verify on; —— 避免客户端阻塞 OCSP 查询
协同后端与系统级保障
Nginx 调优只是半程,后端限制、内核参数、磁盘 I/O 同样关键:
- 同步检查后端(如 Spring Boot、Node.js、PHP)的上传限制:spring.servlet.multipart.max-request-size、upload_max_filesize 等必须 ≥ Nginx 设置
- 确认内核参数:net.core.somaxconn 和 net.ipv4.tcp_max_syn_backlog ≥ 65535,防连接队列溢出
- 启用 sendfile on; 和 tcp_nopush on;(尤其对下载回传场景),减少内核态拷贝
- 若用 HTTP/2,务必开启:http2 on; —— 多路复用可缓解分片上传的并发压力











