性能与容量
Nginx 参数不存在可复制到所有环境的“最优模板”。性能由 Traffic Model、TLS、Response Size、Upstream Latency、CPU、Memory、File Descriptor 和 Network 共同决定。
Worker 与 Connection
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
}worker_connections 是每个 Worker 可打开的 Connection 上限,不只是 Client Connection。Reverse Proxy 通常还需要 Upstream Connection,因此不能直接用:
worker_processes × worker_connections = 最大并发请求数实际容量还受 RLIMIT_NOFILE、System-wide File Limit、Listen Queue、Keepalive、HTTP/2 Stream、Upstream Pool 和其他 FD 使用影响。
Buffer 与临时文件
Client Body、Proxy Response 和 Header 都可能使用独立 Buffer。Buffer 太小可能写 Temporary File,太大又会放大每 Connection Memory Consumption。
应观察 Request/Response Distribution,再调整:
client_body_buffer_sizeclient_max_body_sizeproxy_buffer_sizeproxy_bufferslarge_client_header_buffers
不要为了“高性能”统一配置成很大的数值。超大 Cookie/Header 应先治理来源。
Timeout
| Directive | 控制对象 |
|---|---|
client_header_timeout | 等待 Client Request Header |
client_body_timeout | 两次 Client Body Read 之间 |
send_timeout | 两次向 Client Write 之间 |
proxy_connect_timeout | 建立 Upstream Connection |
proxy_send_timeout | 两次向 Upstream Write 之间 |
proxy_read_timeout | 两次从 Upstream Read 之间 |
这些多数是相邻 I/O Operation 之间的 Timeout,不一定是整个 Request 的绝对 Deadline。Long Polling、SSE、WebSocket 和 Large Upload 需要独立策略。
性能测试方法
- 明确 Request Mix、Response Size、Keepalive、TLS、并发和目标 SLO。
- 分别建立 Nginx-only、Upstream-only 和 End-to-end Baseline。
- 同时观察 Throughput、Latency Distribution、Error Rate 与 Resource Saturation。
- 每次只调整少量参数,保留配置和结果。
- 验证过载下是否出现 Timeout、Queue、Retry Amplification 和 Tail Latency。
只看平均 QPS 无法判断生产可用性,至少同时观察 p50、p95、p99、Upstream Response Time 和 Connection State。
日志变量
log_format timing '$request_id $remote_addr "$request" $status '
'rt=$request_time uct=$upstream_connect_time '
'uht=$upstream_header_time urt=$upstream_response_time '
'ua=$upstream_addr us=$upstream_status';$request_time 覆盖 Nginx 观察到的完整 Request Time,$upstream_response_time 反映 Upstream Response 时间。两者差异可辅助判断 Client Transfer、Queue、Nginx Processing 与 Upstream,但不能仅凭一个字段直接下结论。