nginx.conf 是 Nginx 行為的中樞神經。本文針對高併發生產環境常見的核心段落(main、events、http、upstream)逐行解析關鍵參數的含義、建議值與調優方向。
# 執行 worker 進程的用戶與群組,建議用專屬低權限帳號
user www www;
# Worker 進程數,建議 = CPU 核心數(或核心數-1 預留給系統)
worker_processes 8;
# 錯誤日誌路徑與級別 [debug|info|notice|warn|error|crit]
error_log /var/log/nginx/error.log info;
# PID 檔案路徑
pid /var/run/nginx.pid;
# 單一 worker 可開啟的最大檔案描述符數
# 理論值 = ulimit -n / worker_processes,但請求分佈不均,建議直接設為 ulimit -n 同值
worker_rlimit_nofile 65535;
events {
# 事件模型:Linux 2.6+ 用 epoll,FreeBSD 用 kqueue
use epoll;
# 單一 worker 最大同時連線數
# 總最大連線數 = worker_processes * worker_connections
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
# 服務器名稱 hash 桶大小,防止過長 server_name 導致啟動失敗
server_names_hash_bucket_size 128;
# 客戶端請求標頭緩衝區大小
client_header_buffer_size 32k;
large_client_header_buffers 4 64k;
# 客戶端請求主體大小限制(上傳檔案大小上限)
client_max_body_size 8m;
# 高效檔案傳輸:開啟 sendfile 零拷貝
# 下載類大檔案服務可設 off 平衡磁碟/網路 I/O
sendfile on;
# 目錄列表功能(下載站常用),預設 off
autoindex on;
# TCP 優化:減少小封包、降低延遲
tcp_nopush on;
tcp_nodelay on;
# Keep-Alive 超時時間(秒)
keepalive_timeout 120;
# ===== FastCGI 參數(PHP-FPM 等)=====
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fast_cgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
# ===== Gzip 壓縮=====
gzip on;
gzip_min_length 1k; # 小於此值不壓縮
gzip_buffers 4 16k; # 壓縮緩衝區
gzip_http_version 1.0; # 相容舊代理
gzip_comp_level 2; # 壓縮等級 1-9,建議 2-4 平衡 CPU/體積
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on; # 回應加 Vary: Accept-Encoding
# ===== Upstream 負載均衡範例=====
upstream blog.ha97.com {
server 192.168.80.121:80 weight=3;
server 192.168.80.122:80 weight=2;
server 192.168.80.123:80 weight=3;
# 可加 backup、down、max_fails、fail_timeout 等參數
}
}
| 參數 | 建議值/策略 | 影響面 |
|---|---|---|
worker_processes | CPU 核心數 | CPU 利用率、上下文切換 |
worker_connections | 65535(配合 ulimit -n) | 最大併發連線數 |
sendfile | on(靜態檔案);off(大檔下載/磁碟壓力大) | 零拷貝效能 |
keepalive_timeout | 60-120s | 連線復用、瀏覽器體驗 |
gzip_comp_level | 2-4 | CPU vs 傳輸體積 |
fastcgi_buffers | 4 64k / 8 128k | FastCGI 回應緩衝 |
client_max_body_size | 業務所需上傳上限 | 防止大檔上傳撐爆記憶體 |
worker_connections 卻未調 ulimit -n:導致 too many open files 錯誤。gzip 卻未加 gzip_vary on:CDN/代理可能誤向不支援 gzip 的客戶端送壓縮內容。server_names_hash_bucket_size:新增長域名時 Nginx 啟動報錯。Nginx 配置的核心在於「少即是多」:啟用零拷貝、合理限制緩衝區、精準控制壓縮與快取、配置健康檢查的負載均衡。根據實際流量、硬體、業務特性微調上述參數,並持續監控 error.log、access.log 及 nginx -T 檢視生效配置,即可榨乾硬體效能,穩定支撐高併發服務。