Nginx (\"engine x\") 是高效能 HTTP 與反向代理伺服器,亦支援 IMAP/POP3/SMTP 代理。由 Igor Sysoev 為俄羅斯 Rambler.ru 開發,採類 BSD 授權釋出。本文詳細解析其核心配置段落與關鍵指令。
# 執行用戶
user nobody nobody;
# 工作進程數(建議等於 CPU 核心數)
worker_processes 2;
# 全域錯誤日誌與 PID 檔案
error_log logs/error.log notice;
pid logs/nginx.pid;
# 事件模型與連接數上限
events {
use epoll; # Linux 2.6+ 高效事件模型
worker_connections 1024; # 單進程最大連接數
}
# HTTP 服務主體
http {
# MIME 類型
include conf/mime.types;
default_type application/octet-stream;
# 日誌格式
log_format main '$remote_addr - $remote_user [$time_local] '
'\"$request\" $status $bytes_sent '
'\"$http_referer\" \"$http_user_agent\" '
'\"$gzip_ratio\"';
log_format download '$remote_addr - $remote_user [$time_local] '
'\"$request\" $status $bytes_sent '
'\"$http_referer\" \"$http_user_agent\" '
'\"$http_range\" \"$sent_http_content_range\"';
# 請求緩衝區
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
# ... 更多指令續接
}
| 指令 | 作用 | 建議值 |
|---|---|---|
worker_processes | 工作進程數 | CPU 核心數 |
use epoll | 事件通知機制 | Linux 必用 epoll,FreeBSD 用 kqueue |
worker_connections | 單進程最大連接數 | 1024~65535,視記憶體而定 |
client_header_buffer_size | 請求標頭預設緩衝區 | 1k 足夠大多數請求 |
large_client_header_buffers | 大標頭緩衝區(數量 大小) | 4 4k 或 4 8k |
client_max_body_size | 客戶端請求主體大小上限 | 預設 1m,上傳場景需調大 |
sendfile on | 啟用零拷貝傳輸 | 靜態檔案服務必開 |
tcp_nopush on | 配合 sendfile 優化封包傳輸 | |
tcp_nodelay on | 關閉 Nagle 演算法,降低延遲 | 即時互動場景建議開啟 |
keepalive_timeout | 長連線超時時間 | 65s 典型值 |
gzip on | 啟用 Gzip 壓縮 | 節省頻寬,CPU 換頻寬 |
掌握核心指令即可根據業務場景調優 Nginx,發揮其高併發、低記憶體優勢。