Debian系統中Nginx性能測試與調優指南
性能測試是評估Nginx在高負載下表現的關鍵步驟,需選擇合適的工具并明確測試場景。
sudo apt install apache2-utils;示例命令:ab -n 1000 -c 100 http://your-server-ip/(-n指定總請求數,-c指定并發數)。sudo apt install wrk;示例命令:wrk -t12 -c400 -d30s http://your-server-ip/(-t指定線程數,-c指定并發數,-d指定測試時長)。locustfile.py定義測試邏輯,通過locust -f locustfile.py啟動,通過瀏覽器設置用戶數和生成速率。調優需結合服務器硬件(CPU、內存、磁盤、網絡)和應用場景(靜態/動態內容比例、并發量),逐步優化配置。
worker_processes:設置為CPU核心數(auto可自動適配),充分利用CPU資源;worker_connections:每個worker進程的最大連接數,默認1024,可根據內存調整(如1GB內存可設置為1024-2048)。配置路徑:/etc/nginx/nginx.conf(全局塊)。keepalive_timeout 65s;(保持連接超時時間)、keepalive_requests 100;(每個連接允許的最大請求數)。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m; # 200/302狀態碼緩存10分鐘
proxy_cache_valid 404 1m; # 404狀態碼緩存1分鐘
}
啟用Gzip壓縮,減少傳輸數據量(尤其對文本類內容效果顯著)。配置:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 5; # 壓縮級別(1-9,越高壓縮率越高,但CPU消耗越大)
gzip_min_length 256; # 只壓縮大于256字節的文件
當單臺服務器無法承載高并發時,使用Nginx作為負載均衡器,將請求分發到多臺后端服務器。配置:
upstream backend {
server backend1.example.com;
server backend2.example.com;
least_conn; # 使用最少連接算法(適合長連接場景)
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection ""; # 關閉客戶端與后端的keepalive,避免連接泄漏
}
}
若啟用HTTPS,需優化加密配置以提高性能和安全性。配置:
ssl_protocols TLSv1.2 TLSv1.3; # 僅使用TLS 1.2及以上安全協議
ssl_ciphers HIGH:!aNULL:!MD5; # 使用高強度加密套件
ssl_prefer_server_ciphers on; # 優先使用服務器端加密套件
ssl_session_cache shared:SSL:10m; # 會話緩存,減少SSL握手次數
ssl_session_timeout 10m; # 會話超時時間
減少不必要的日志記錄,降低磁盤I/O消耗。配置:
access_log off; # 關閉訪問日志(若不需要分析用戶行為)
error_log /var/log/nginx/error.log crit; # 僅記錄嚴重錯誤(級別:debug/info/notice/warn/error/crit)
ulimit -n 65535(臨時生效),永久生效需修改/etc/security/limits.conf(添加* soft nofile 65535; * hard nofile 65535)。sysctl -w net.core.somaxconn=65535 # 監聽隊列最大長度
sysctl -w net.ipv4.tcp_tw_reuse=1 # 復用TIME-WAIT連接
sysctl -w net.ipv4.tcp_fin_timeout=30 # TIME-WAIT連接超時時間(秒)
```(需將配置寫入`/etc/sysctl.conf`永久生效)。
nginx -t檢查配置語法,nginx -s reload重新加載配置(避免重啟服務導致中斷),觀察性能變化后再繼續調整。top、htop、vmstat、iostat等工具監控CPU、內存、磁盤I/O、網絡帶寬使用情況,及時發現瓶頸(如CPU過高需優化代碼或增加服務器,內存不足需增加內存或調整緩存策略)。