工作進程與連接數
設置worker_processes
為auto
(自動匹配CPU核心數)或手動指定(如4核CPU設為4),充分利?CPU資源;通過worker_connections
調整每個工作進程的最大連接數(如10240),需結合worker_rlimit_nofile
(設置為65535以上)避免“Too many open files”錯誤。示例:
worker_processes auto;
events {
worker_connections 10240;
use epoll; # Linux下推薦使用epoll事件模型
multi_accept on; # 一次接受多個新連接
}
高效文件傳輸
啟用sendfile
實現零拷貝傳輸,減少CPU消耗;配合tcp_nopush
(僅在sendfile
開啟時有效)優化數據包發送,降低網絡延遲。示例:
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on; # 禁用Nagle算法,減少延遲
}
壓縮傳輸
啟用gzip
壓縮響應數據(如文本、JSON、JS等),減少傳輸體積(通??蓧嚎s至原大小的30%-70%),提升頁面加載速度。示例:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_comp_level 6; # 壓縮級別(1-9,6為平衡值)
gzip_min_length 1024; # 僅壓縮大于1KB的文件
緩沖區調整
合理設置請求體與頭的緩沖區大小,避免大請求導致的內存溢出或磁盤I/O。示例:
client_body_buffer_size 16k; # 請求體緩沖區
client_header_buffer_size 1k; # 請求頭緩沖區
client_max_body_size 8m; # 最大請求體大?。ㄈ缟蟼魑募拗疲?/span>
large_client_header_buffers 4 4k; # 大請求頭緩沖區
日志優化
關閉不必要的訪問日志(如靜態資源),將錯誤日志級別調整為crit
(僅記錄嚴重錯誤),減少磁盤I/O。示例:
access_log off; # 關閉訪問日志(或指定路徑)
error_log /var/log/nginx/error.log crit; # 錯誤日志級別
靜態資源緩存
為靜態文件(圖片、CSS、JS等)設置瀏覽器緩存(expires
)和Cache-Control
頭,減少重復請求。示例:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 瀏覽器緩存30天
add_header Cache-Control "public, no-transform";
}
代理緩存
使用proxy_cache
緩存后端響應(如PHP、API),降低后端服務器負載。示例:
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;
proxy_cache_valid 200 302 10m; # 200/302狀態碼緩存10分鐘
proxy_cache_valid 404 1m; # 404狀態碼緩存1分鐘
}
}
負載均衡
通過upstream
模塊將請求分發到多個后端服務器,提升并發處理能力。常用算法:
round_robin
(默認,輪詢):適合后端服務器性能相近的場景;least_conn
(最少連接):適合長連接場景(如上傳文件);ip_hash
(IP哈希):適合需要會話保持的應用(如登錄狀態)。示例:upstream backend {
least_conn; # 最少連接算法
server 192.168.1.101:80;
server 192.168.1.102:80;
}
server {
location / {
proxy_pass http://backend;
}
}
SSL/TLS優化
啟用HTTP/2(多路復用,提升傳輸效率);優化TLS配置(使用TLS 1.3、高性能加密套件);開啟會話緩存(減少SSL握手時間)。示例:
server {
listen 443 ssl http2; # 啟用HTTP/2
ssl_protocols TLSv1.3 TLSv1.2; # 僅使用TLS 1.3/1.2
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384'; # 高性能加密套件
ssl_session_cache shared:SSL:10m; # 會話緩存
ssl_session_timeout 10m; # 會話超時時間
}
防惡意請求
添加規則攔截常見壓力測試工具(如ApacheBench、JMeter)和惡意請求(如空格注入),保護服務器安全。示例:
if ($http_user_agent ~* (ApacheBench|WebBench|Jmeter)) {
return 503; # 返回服務不可用
}
if ($request_uri ~ " ") {
return 444; # 直接關閉連接(Nginx特有狀態碼)
}
文件描述符限制
修改/etc/security/limits.conf
,增加Nginx進程的文件描述符限制(避免高并發下“Too many open files”錯誤)。示例:
* soft nofile 65535
* hard nofile 65535
網絡參數優化
調整內核參數(如/etc/sysctl.conf
),優化TCP連接處理:
net.core.somaxconn
:增加連接隊列長度(如65535);net.ipv4.tcp_max_syn_backlog
:增加SYN隊列長度(如65535);net.ipv4.tcp_tw_reuse
:啟用TIME_WAIT連接復用(減少連接建立時間);net.ipv4.tcp_fastopen
:啟用TCP Fast Open(減少握手時間)。示例:sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fastopen=3
硬件優化
proxy_cache
、gzip
緩存);worker_processes
和worker_cpu_affinity
(將進程綁定到特定核心,減少上下文切換)。nginx -t
檢查配置語法;使用top
、htop
監控CPU使用率;通過ss -s
查看連接數;通過access_log
分析QPS(每秒請求數)、響應時間($request_time
)、錯誤率(4xx/5xx占比)。ab
(Apache Benchmark)、wrk
進行壓力測試,模擬高并發場景。以上優化措施需根據服務器硬件配置(CPU、內存、存儲)、業務場景(靜態/動態內容比例、并發量)進行調整,建議修改配置后通過nginx -t
檢查語法,再重啟Nginx(systemctl restart nginx
)使更改生效。