企业级反向代理需精准区分缓存(proxy_cache)与缓冲(proxy_buffering),前者持久化复用响应,后者内存暂存传输中数据;禁用磁盘临时文件,优化内存缓冲区配置,并协同连接复用与流控以保障大响应流式高效转发。

企业级反向代理的缓存与缓冲区优化,不是堆参数,而是让每个字节都在该在的地方高效流转——响应头不截断、响应体不落盘、连接不重建、流速不卡顿。
区分缓存(cache)与缓冲(buffer),用对地方
缓存是持久化存储已生成的响应,供后续相同请求复用;缓冲是临时中转正在传输的数据,纯内存暂存、不落盘。两者目标不同,配置不能混用:
- 缓存走 proxy_cache 系列指令,需定义 cache_path、proxy_cache_key、proxy_cache_valid,适用于 HTML 页面、API 静态结果等可复用内容
- 缓冲走 proxy_buffering + proxy_buffers 等,只影响单次请求的转发效率,不改变响应内容
- 不要在需要实时流(如 SSE、日志 tail)的 location 中启用 proxy_cache 或 proxy_buffering,否则破坏语义
内存缓冲区精准分配,避免磁盘临时文件
目标是让 95% 的响应体完全落在内存中,不触发 proxy_temp_path 写入:
- proxy_buffering on:默认开启,必须保持,关闭后无法启用 busy 缓冲逻辑
- proxy_buffer_size 4k–16k:仅存响应头,4k 覆盖绝大多数场景,无需随 body 增大
- proxy_buffers 8 128k:共 1MB 缓冲池,适配 500KB–1MB 响应;若业务多返回 PDF/高清图,可调为 16 256k
- proxy_busy_buffers_size 256k:设为单 buffer 大小的 2 倍,保障发送中仍有空间接收新数据
- proxy_max_temp_file_size 0:禁用磁盘临时文件——前提是内存缓冲已足够且后端无超大突发响应
连接复用与流控协同,防止超时中断
大响应传输时间长,前后端连接节奏不匹配会直接触发 502 或连接重置:
- proxy_http_version 1.1 + proxy_set_header Connection "":显式启用上游 HTTP/1.1 并交由 Nginx 管理连接状态
- upstream 中配置 keepalive 32:每个 worker 缓存最多 32 个空闲连接,数值按 (峰值并发 ÷ worker_processes) × 1.2 估算
- proxy_read_timeout 120:按最长后端接口耗时上浮 20%,确保完整读取不中断
- proxy_send_timeout 60:客户端带宽受限或移动网络下,允许发送过程中短暂空闲
精简代理链路,去掉冗余处理
对纯转发型大响应(如静态资源直出、二进制流),减少中间干预可显著降低延迟和 CPU 开销:
- proxy_redirect off:后端不返回 3xx 时关闭,跳过 Location 头解析与重写
- 删减不必要的 proxy_set_header:例如 X-Forwarded-For 若已在前置 LB 统一注入,此处可省略
- 避免在 location 块中重复定义全局已设参数,防止隐式覆盖或冲突
- 非必要不启用 gzip、sub_filter、add_header 等模块,它们会强制读取完整响应体再处理,破坏流式转发


















