我們聊聊 Nginx 負載的參數優化,你學會了嗎?
Nginx 是一個高性能的 HTTP 和反向代理服務器,它的優化可以提升網站的性能和穩定性。
以下是一些基于搜索結果的 Nginx 負載參數優化經驗分享。
No.1 Worker Processes
"""nginx
worker_processes auto; # 自動設置與 CPU 核心數相同的進程數
"""
這個指令用來設置 Nginx 運行的工作進程數。通常情況下,每個 CPU 核心分配一個工作進程可以取得較好的性能。
No.2 Worker CPU Affinity
"""nginx
worker_cpu_affinity 0001 0010 0100 1000; # 為每個工作進程分配特定的 CPU 核心
"""
通過為每個工作進程分配特定的 CPU 核心,可以提高 CPU 緩存的效率,減少進程間的上下文切換。
No.3 Worker Connections
"""nginx
worker_connections 10240; # 每個工作進程的最大連接數
"""
這個指令定義了每個工作進程可以打開的最大連接數,默認值通常是 512,但現代服務器硬件通常可以處理更高的連接數。
No.4 Events Configuration
"""nginx
use epoll; # 在 Linux 上使用高效的 I/O 多路復用模型
events {
worker_connections 10240; # 每個工作進程可以同時處理的連接數
}
"""
`use epoll;` 指定了事件處理模型,在 Linux 系統上,epoll 是一個高性能的 I/O 多路復用模型。
No.5 Sendfile
"""nginx
sendfile on; # 開啟高效文件傳輸模式
"""
`sendfile` 指令用于啟用高效文件傳輸模式,可以減少 CPU 開銷,因為它允許操作系統直接傳輸文件數據到網絡,而不需要復制到用戶空間。
No.6 TCP Nopush
"""nginx
tcp_nopush on; # 結合 Sendfile 使用,減少網絡報文段的數量
"""
`tcp_nopush` 指令用于確保數據在發送到網絡之前被緩存,與 `sendfile` 結合使用可以提高網絡傳輸效率。
No.7 Keepalive Timeout
"""nginx
keepalive_timeout 65; # 長連接超時時間
"""
`keepalive_timeout` 設置了長連接的超時時間,可以根據服務器的業務需求進行調整。
No.8 Gzip Compression
"""nginx
gzip on; # 開啟 Gzip 壓縮
gzip_min_length 1k; # 頁面字節數小于 1k 不壓縮
gzip_buffers 4 32k; # 設置壓縮緩沖區大小
gzip_http_version 1.1; # 設置壓縮版本
gzip_comp_level 6; # 設置壓縮級別
gzip_types text/css text/xml application/javascript; # 設置需要壓縮的 MIME 類型
"""
通過啟用 Gzip 壓縮,可以減少傳輸的數據量,加快頁面加載速度。但要注意,對小文件進行壓縮可能不會減少其大小。
No.9 Proxy Settings
"""nginx
proxy_connect_timeout 90; # 代理連接超時時間
proxy_send_timeout 90; # 代理發送超時時間
proxy_read_timeout 90; # 代理讀取超時時間
proxy_buffers 4 32k; # 設置代理緩沖區大小
"""
這些指令用于調整代理服務器的超時設置和緩沖區大小,可以根據后端服務器的性能進行調整。
No.10 Linux System Tuning
"""shell
net.core.somaxconn = 262144 # 調整系統同時發起的tcp連接數
net.ipv4.tcp_tw_recycle = 1 # 啟用 TCP 連接重用
net.ipv4.tcp_fin_timeout = 15 # 減少臨時端口的等待時間
"""
調整 Linux 系統內核參數可以提升服務器的網絡性能。
No.11 Access Log Buffering
"""nginx
access_log /var/log/nginx/access.log main buffer=16k flush=5m; # 使用緩沖區記錄訪問日志
"""
通過設置日志緩沖區,可以減少磁盤 I/O 操作,提高性能。
No.12 Limitations
"""nginx
limit_conn perip 2; # 限制單個 IP 地址的連接數
limit_rate 300k; # 限制單個連接的速率
"""
使用 `limit_conn` 和 `limit_rate` 可以限制客戶端的連接數和帶寬使用,防止單個客戶端占用過多資源。