⚡ Performance Tuning
worker_processes and worker_connections
Nginx performance depends heavily on these two parameters. worker_processes is the number of worker processes, and worker_connections is the maximum number of connections each process can handle.
nginx
# Auto-match CPU core count (recommended)
worker_processes auto;
# Max connections per worker
events {
worker_connections 4096;
# Linux 2.6+ uses epoll (best performance)
use epoll;
# A worker can handle multiple connections simultaneously (must enable)
multi_accept on;
}
http {
# Max open files per worker (should be greater than worker_connections)
worker_rlimit_nofile 65535;
# ... other config
}💡 Tip: 💡 Max concurrency = worker_processes × worker_connections. For example, a 4-core CPU + 4096 connections = theoretically 16,384 concurrent connections. Reaching about 80% in practice is very good.
keepalive Connection Reuse
nginx
http {
# Client-side keepalive
keepalive_timeout 65;
keepalive_requests 1000; # Max requests per connection
# Upstream server keepalive (reverse proxy scenario)
upstream backend {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
# Keep 32 idle connections to upstream
keepalive 32;
keepalive_requests 100;
keepalive_timeout 60s;
}
server {
location /api/ {
proxy_pass http://backend;
# These headers are required to enable keepalive
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}💡 Tip: 💡 Effect: with keepalive enabled, Nginx doesn't need to re-establish a TCP connection to the backend every time. For high-frequency API calls, latency can drop by 30–50%.
Buffer Tuning
nginx
http {
# Client request buffering (large file upload scenarios)
client_body_buffer_size 16k;
client_header_buffer_size 1k;
client_max_body_size 100m; # Max upload size
large_client_header_buffers 4 8k;
# Proxy buffering (reverse proxy scenarios)
proxy_buffer_size 4k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;
# Backend response buffering
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 32k;
proxy_max_temp_file_size 1024m;
# File sending optimization (sendfile + tcp_nopush)
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}💡 Tip: 💡
sendfile+tcp_nopush: lets the kernel transfer data directly between disk and NIC without going through user space. Large file transfer performance improves 2–3x.