調整Nginx的worker進程數與每個進程的最大連接數,充分挖掘服務器多核性能。
auto
可自動檢測),確保每個核心對應一個進程,避免進程競爭。keepalive_timeout
設為65秒(平衡連接復用與資源占用),keepalive_requests
設為100(每個連接允許的最大請求數)。靜態文件(圖片、CSS、JS等)的訪問無需經過PHP或數據庫,優化其處理流程可顯著降低后端負載。
expires
指令設置緩存時間(如30天),并添加Cache-Control
頭,讓瀏覽器緩存靜態資源,減少重復請求。示例:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off; # 關閉訪問日志,減少磁盤I/O
}
sendfile
(直接在內核空間傳輸文件,減少CPU介入)、tcp_nopush
(配合sendfile
,防止數據包拆分)、tcp_nodelay
(立即發送數據,減少延遲)。示例:sendfile on;
tcp_nopush on;
tcp_nodelay on;
啟用Gzip壓縮可減少HTML、CSS、JS等文本數據的傳輸量(通常壓縮率為60%-80%),加快頁面加載速度。
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024; # 只壓縮大于1KB的文件(小文件壓縮反而增加CPU開銷)
gzip_comp_level 5; # 壓縮級別(1-9,5為平衡點,兼顧速度與壓縮率)
gzip_disable "msie6"; # 禁用IE6的Gzip(兼容性問題)
HTTP/2的多路復用(一個連接并行處理多個請求)、頭部壓縮(減少請求頭大?。┑忍匦?,可顯著提升頁面加載速度(尤其是有多個小資源的頁面)。
http2
指令:server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 其他SSL配置
}
通過緩存動態內容或靜態資源,減少后端應用(PHP、MySQL)的處理壓力。
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend; # 后端PHP-FPM或其他應用服務器
proxy_cache_valid 200 302 10m; # 200/302狀態碼緩存10分鐘
proxy_cache_valid 404 1m; # 404狀態碼緩存1分鐘
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; # 緩存失效時可返回舊數據
}
}
SSL/TLS加密會增加CPU開銷,通過優化加密配置可減少性能損耗。
HIGH:!aNULL:!MD5
)。示例:ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m; # 共享緩存,大小10MB
ssl_session_timeout 1h; # 會話有效期1小時
ssl_session_tickets on; # 開啟會話票證(更輕量的會話復用方式)
當單臺服務器無法應對高并發時,通過Nginx的反向代理功能將請求分發到多臺后端服務器,提升整體處理能力。
round-robin
(默認,輪詢)或least_conn
(最少連接)算法分發請求。示例:upstream backend {
server backend1.example.com;
server backend2.example.com;
least_conn; # 優先將請求分發給當前連接數最少的服務器
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1; # 使用HTTP/1.1(負載均衡需要)
proxy_set_header Connection ""; # 清除客戶端連接頭,避免后端服務器保持長連接
}
}
減少不必要的日志記錄,降低磁盤I/O開銷(尤其是高并發場景下)。
error_log
級別設為warn
(僅記錄警告及以上級別的錯誤),避免debug
級別的詳細日志占用過多資源。buffer
和flush
參數設置訪問日志的緩沖大小與刷新時間,減少頻繁寫入磁盤的次數。示例:error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log combined buffer=32k flush=300s; # 緩沖32KB,每5分鐘刷新一次
以上優化措施需根據服務器硬件配置(CPU、內存、磁盤)、業務場景(靜態/動態內容比例、并發量)及實際性能測試結果進行調整,建議每次修改配置后使用nginx -t
檢查語法正確性,再通過nginx -s reload
重新加載配置(無需重啟服務)。