高性能 Nginx 配置深度解析:从 24 核硬件潜力到流式业务支撑
在现代 Web 架构中,Nginx 往往处于流量的最前端。对于多核、大内存的服务器,默认配置往往无法发挥硬件性能。以下是基于当前线上配置的深度优化手段总结。
一、 进程与资源调度优化:释放 48 线程算力
在 24 核服务器上,如何分配进程直接决定了 CPU 缓存命中率和上下文切换开销。
- 多核并行处理:通过
worker_processes auto;,Nginx 自动根据系统的逻辑 CPU 核心数(此处为 48 线程)创建等量的 worker 进程 。这消除了单个进程处理能力的瓶颈,实现了真正的并行计算。 - 句柄容量预留:
worker_rlimit_nofile 524288;突破了系统默认较低的文件描述符限制 。在反向代理场景下,每个客户端连接会同时消耗一个与客户端、一个与后端的句柄,高并发时必须确保此数值远大于worker_connections。 - 事件驱动效率:使用
use epoll;并开启multi_accept on;。epoll确保了在大规模长连接下 O(1) 的查询效率,而multi_accept允许进程在单次唤醒中尽可能多地接受新连接,降低了握手阶段的延迟。
二、 I/O 与网络传输:榨干物理带宽
网络 I/O 的优化重点在于减少内核态与用户态之间的数据拷贝。
- 零拷贝技术:
sendfile on;允许 Nginx 直接在内核空间完成文件传输,无需经过应用层缓冲区 。配合tcp_nopush on;,可以将多个数据包合并发送,极大地提高了静态资源的传输效率。 - 连接池管理:
worker_connections 4096;配合 48 个 worker,提供了接近 20 万的理论并发支持 。结合 64GB 的大内存,系统有足够的空间维护 TCP 状态表和 SSL 会话缓存。
三、 针对业务场景的精准优化:以 LLM 流式输出为例
当前的配置中,针对 /llm/ 路径的处理展现了对新兴业务模式(如打字机效果)的深度适配。
- 禁用缓冲实现即时响应:
proxy_buffering off;是关键。对于 LLM 生成的 Token,Nginx 不再进行分块暂存,而是产生即发送,确保用户能感受到实时的“打字”体验 。 - 协议持久化:强制使用
proxy_http_version 1.1;并保持chunked_transfer_encoding on;。这保证了长连接的稳定性,避免了流式传输中途因协议限制而断开。
四、 安全与静态分发:平衡性能与兼容性
- 现代 SSL 协议栈:仅保留
TLSv1.2和TLSv1.3,利用 TLS 1.3 的 0-RTT 握手特性,缩短了 HTTPS 建立连接的时间。 - 路径精细化路由:利用
alias结合try_files处理单页应用(SPA) 。这种方式比rewrite指令更高效,直接由 Nginx 内部逻辑定位文件,减少了正向解析的开销。
进阶补充:目前主流的额外优化手段
除了现有配置外,针对 24 核这类规模的服务器,还有几个能够进一步压榨性能的方向:
1. CPU 亲和性绑定 (CPU Affinity)
虽然开启了 48 个 worker,但在系统高负载时,进程可能会在不同物理核心间频繁切换,导致 L1/L2 缓存失效。
- 方案:在
nginx.conf全局块添加worker_cpu_affinity auto;。 - 效果:将 worker 进程固定在特定的核心上,极大减少 CPU 上下文切换的开销。
2. 开启 Accept Filter (就绪过滤)
在 Linux 环境下,可以开启 deferred 模式。
- 配置示例:
listen 80 default_server deferred; - 效果:只有当客户端真正发送了数据请求时,内核才会唤醒 Nginx 进程。对于那些只握手不发数据的“僵尸连接”,Nginx 无需预先分配资源,进一步提升了抗压能力。
3. Upstream Keepalive (后端长连接)
目前的配置中,反向代理到后端 API(如 10.0.0.102:8000)似乎未配置长连接。
- 方案:在
upstream块中设置keepalive 32;,并在location中设置proxy_set_header Connection "";。 - 效果:减少 Nginx 与后端服务器之间频繁建立/关闭 TCP 连接的开销,降低后端系统的负载。
4. 静态资源缓存策略 (Browser Caching)
对于已打包的 dist 目录(如 portal、enterprise 等),其文件名通常带有 Hash 值。
- 方案:针对 js/css/img 增加
expires 30d;或add_header Cache-Control "public, immutable";。 - 效果:极大减轻 Nginx 在静态资源分发上的 IO 压力,将流量卸载至客户端浏览器。
通过上述“硬优化”(硬件对齐)与“软调优”(协议优化)的结合,该 24 核服务器完全具备支撑千万级日活请求的底座能力。