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