哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Nginx性能優(yōu)化應該先改哪些參數(shù)

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-04-21 11:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景與問題

Nginx 是高性能 HTTP 服務器和反向代理服務器,默認配置適合低流量場景。當 QPS(每秒請求數(shù))達到數(shù)千甚至數(shù)萬時,默認配置會成為性能瓶頸。表現(xiàn)為:服務器 CPU 使用率不高但請求開始排隊、響應時間隨并發(fā)增加急劇上升、連接數(shù)達到上限后開始拒絕服務。

本文以 Nginx 1.27.x 版本為基準,系統(tǒng)講解高并發(fā)場景下必須調整的核心參數(shù),以及每個參數(shù)調整背后的原理。內容包括:工作進程配置、連接管理、緩沖區(qū)優(yōu)化、緩存策略、 upstream 負載均衡調優(yōu)、HTTP 協(xié)議優(yōu)化、以及內核參數(shù)調整。文章覆蓋的參數(shù)都經(jīng)過生產(chǎn)環(huán)境驗證,調整思路按優(yōu)先級排序,讀者可以根據(jù)實際場景按圖索驥。

1. 參數(shù)調整總覽與優(yōu)先級

Nginx 參數(shù)調整有明確的優(yōu)先級順序。錯誤地調整低優(yōu)先級參數(shù)可能無效,而正確地調整高優(yōu)先級參數(shù)能立即見效。優(yōu)先級從高到低:

第一層是操作系統(tǒng)內核參數(shù),影響 Nginx 能處理的最大連接數(shù)和文件描述符上限。第二層是 Nginx 進程模型配置,即 worker 進程數(shù)和連接處理方式。第三層是每個連接的內存緩沖區(qū)配置。第四層是 upstream 負載均衡和 keepalive 配置。第五層是 HTTP 協(xié)議層面的優(yōu)化,如 gzip、chunked 編碼等。

按這個順序逐層調整,每調整一層后觀察效果,避免盲目修改。

2. 內核參數(shù)調整

2.1 文件描述符上限

Nginx 每個連接需要占用一個文件描述符(FD),同時還需要額外的文件描述符用于打開日志文件、連接 upstream、打開緩存文件等。默認系統(tǒng)限制通常為 1024,遠不夠高并發(fā)使用。

檢查當前限制:

# 查看系統(tǒng)級別的最大文件描述符
cat /proc/sys/fs/file-max

# 查看當前已使用的文件描述符數(shù)量
cat /proc/sys/fs/file-nr

# 查看 nginx 進程允許的最大 FD(soft limit)
cat /proc/$(cat /var/run/nginx.pid)/limits | grep"Max open files"

調整系統(tǒng)級限制:

# 在 /etc/sysctl.conf 中添加
fs.file-max = 1000000

# 使配置生效
sysctl -p

調整用戶級限制(在/etc/security/limits.conf中):

nginx soft nofile 100000
nginx hard nofile 100000

在 Nginx 配置中設置:

worker_rlimit_nofile 100000;

這個參數(shù)設置了 Nginx worker 進程能打開的最大文件描述符數(shù)量。應設置為與用戶級限制一致。計算公式:理論最大連接數(shù) = worker_rlimit_nofile / 2(因為每個連接需要 1 個 FD,還要留一些給日志、upstream、緩存等)。

2.2 網(wǎng)絡內核參數(shù)

高并發(fā)場景下,網(wǎng)絡積壓隊列和連接復用相關的內核參數(shù)必須調整:

# 在 /etc/sysctl.conf 中添加
# 調整 SOMAXCONN(Socket 監(jiān)聽隊列最大長度)
net.core.somaxconn = 65535

# 調整 tcp 連接隊列大小
net.ipv4.tcp_max_syn_backlog = 65535

# 允許 TIME_WAIT 狀態(tài)的 socket 重用
net.ipv4.tcp_tw_reuse = 1

# 調整 TIME_WAIT 超時時間(毫秒)
net.ipv4.tcp_fin_timeout = 15000

# 調整 TCP keepalive 探測間隔
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

# 調整本地端口范圍
net.ipv4.ip_local_port_range = 1024 65535

# 調整 tcp 最大包緩沖大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

使配置生效:sysctl -p

參數(shù)原理解析:

net.core.somaxconn是 listen() 系統(tǒng)調用的 backlog 隊列長度。當 Nginx 調用 listen() 時,內核會將未 accept 的連接放入這個隊列。如果隊列滿了,新連接會被拒絕。Nginx 默認的 backlog 為 511,如果上游處理速度跟不上連接到達速度,這個隊列會很快填滿。

net.ipv4.tcp_max_syn_backlog是 SYN 隊列的長度。當客戶端發(fā)送 SYN 包后,服務器回復 SYN-ACK 但還未收到最后的 ACK 時,連接處于半開狀態(tài),放在 SYN 隊列中。如果 SYN 隊列滿了,新的 SYN 包會被丟棄,導致連接建立失敗。

net.ipv4.tcp_tw_reuse允許將 TIME_WAIT 狀態(tài)的 socket 重用于新的 outbound 連接。這在 Nginx 作為客戶端連接 upstream 時特別有用,減少本地端口耗盡的問題。

net.ipv4.tcp_fin_timeout縮短 TIME_WAIT 持續(xù)時間。默認 60 秒,在高并發(fā)場景下會占用大量端口資源。

3. Nginx 進程模型配置

3.1 worker 進程數(shù)

Nginx 采用多進程模型:一個 master 進程負責管理,多個 worker 進程處理請求。默認配置只有一個 worker 進程,遠不能利用多核 CPU。

檢查 CPU 核心數(shù):

nproc
# 或者
grep processor /proc/cpuinfo | wc -l

設置 worker 進程數(shù):

worker_processes auto;

auto表示 Nginx 自動設置為 CPU 核心數(shù),這是最推薦的配置。如果設置為具體數(shù)字,必須確保與 CPU 核心數(shù)匹配。worker 進程數(shù)不是越多越好:進程數(shù)過多會增加進程切換開銷,每個進程還要占用獨立內存。

3.2 worker 連接數(shù)上限

每個 worker 進程能處理的連接數(shù)受 worker_connections 限制。這個參數(shù)定義了單個 worker 能同時持有的最大連接數(shù):

events {
  worker_connections 65535;
  use epoll;
  multi_accept on;
}

use epollLinux 下使用 epoll 事件模型,這是最高效的 I/O 多路復用機制。FreeBSD 下使用 kqueue,Windows 下使用 select。

multi_accept on:允許一個 worker 進程同時接受多個新連接。默認 off 意味著一次只 accept 一個連接。如果流量集中到達,未 accept 的連接會排隊等待。

worker_connections 65535是理論上限,實際設置需要結合worker_rlimit_nofile的值。計算方式:worker_connections * worker_processes不能超過worker_rlimit_nofile。

3.3 綁定 worker 到特定 CPU

將 worker 進程綁定到特定 CPU 核心,可以避免進程切換帶來的緩存失效:

worker_cpu_affinity auto;

auto會自動將每個 worker 綁定到不同的 CPU 核心。如果需要手動指定:

worker_cpu_affinity 0001 0010 0100 1000; # 4 worker 對應 4 核心
worker_cpu_affinity 0101 1010;       # 2 worker 對應 4 核心(每進程綁定2個)

手動指定在 NUMA 架構服務器上特別有用,可以控制每個 worker 只訪問本地內存,減少跨 NUMA 節(jié)點的內存訪問延遲。

3.4 調整 worker 優(yōu)先級

如果服務器上還運行著其他重要服務,可以適當降低 Nginx worker 的優(yōu)先級,避免 Nginx 搶光 CPU:

worker_priority -10;

負數(shù)表示更高優(yōu)先級(Linux 中 Nice 值)。默認 0,降低到 -10 可以讓 Nginx 在爭搶時獲得更多 CPU 時間。但如果服務器專門跑 Nginx,不需要調整。

4. 緩沖區(qū)配置

4.1 客戶端連接緩沖區(qū)

客戶端請求的headers和body需要緩沖區(qū)來存儲。緩沖區(qū)太小會導致 nginx 頻繁讀寫磁盤,太大會占用過多內存:

http {
  # client header buffer size
  client_header_buffer_size 4k;
  large_client_header_buffers 4 32k;

  # client body buffer size(上傳文件大小控制)
  client_body_buffer_size 128k;

  # 最大允許的 request body 大?。ㄔ?server/location 中設置)
  client_max_body_size 100m;
}

client_header_buffer_size:存儲請求頭的緩沖區(qū)大小。普通請求的 headers 通常小于 1KB,4KB 足夠。如果存在大量 cookies 或較大的 headers,可以增大。

large_client_header_buffers:如果請求頭太大超出 client_header_buffer_size,會使用這個緩沖區(qū)。第一個數(shù)字是緩沖區(qū)數(shù)量,第二個是每個緩沖區(qū)大小。如果出現(xiàn)大量 400 Bad Request 錯誤且錯誤日志顯示 "request header is too large",需要增加這個值。

client_body_buffer_size:存儲請求 body 的緩沖區(qū)大小。如果 body 超過這個大小,會寫入臨時文件。默認是磁盤上的 tmpfs(如果配置了client_body_temp_path)。這個值設置得太小會導致頻繁寫磁盤,設置得太大會占用過多內存。

4.2 upstream 緩沖區(qū)

upstream 響應數(shù)據(jù)也需要緩沖區(qū)。啟用緩沖區(qū)可以讓 Nginx 異步處理 upstream 響應,減少阻塞:

upstream backend {
  server 127.0.0.1:8080;
  keepalive 32;
}

proxy_buffer_size 128k;
proxy_buffers 4 128k;
proxy_buffering on;
proxy_busy_buffers_size 256k;

proxy_buffer_size:存儲 upstream 響應的 headers 部分。這個值應該大于 upstream 可能返回的最大 headers 大小。

proxy_buffers:存儲 upstream 響應的 body 部分。第一個數(shù)字是緩沖區(qū)數(shù)量,第二個是每個緩沖區(qū)大小。如果 upstream 返回大文件,這個值需要足夠大。

proxy_buffering on:啟用響應緩沖。如果關閉,Nginx 同步轉發(fā) upstream 響應,會阻塞 worker 進程直到數(shù)據(jù)傳輸完成。對于靜態(tài)文件和大多數(shù) API 響應,開啟緩沖是最佳選擇。

proxy_busy_buffers_size:當這個大小的緩沖區(qū)被填滿后,開始向客戶端發(fā)送數(shù)據(jù),同時繼續(xù)從 upstream 讀取數(shù)據(jù)填充緩沖區(qū)。這個值應該是 proxy_buffers 單個緩沖區(qū)的 2-3 倍。

4.3 FastCGI 緩沖區(qū)(PHP-FPM 場景)

如果 Nginx 后端是 PHP-FPM,使用 fastcgi 緩沖區(qū)配置:

fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_connect_timeout 60s;
fastcgi_send_timeout 60s;
fastcgi_read_timeout 60s;

fastcgi_connect_timeout:與 FastCGI 服務器建立連接的超時時間。不建議超過 75 秒。

fastcgi_send_timeout:向 FastCGI 服務器發(fā)送請求的超時時間。不是整個響應傳輸時間,而是兩次寫操作之間的超時。

fastcgi_read_timeout:從 FastCGI 服務器讀取響應的超時時間。如果 PHP 腳本執(zhí)行時間很長,需要增大這個值。

5. 超時配置

5.1 客戶端超時

http {
  # 客戶端保持連接的超時(兩次請求之間)
  keepalive_timeout 65;

  # 客戶端發(fā)送請求頭的超時
  client_header_timeout 15s;

  # 客戶端發(fā)送請求體的超時
  client_body_timeout 15s;

  # 響應發(fā)送超時(兩次寫操作之間)
  send_timeout 30s;
}

keepalive_timeout:HTTP keep-alive 保持連接的時間。設置太短會導致頻繁建立連接增加開銷;設置太長會占用連接資源。65 秒是常見的折中值。

client_header_timeout:客戶端必須在指定時間內發(fā)送完整的請求頭。如果超時,返回 408 Request Timeout。

client_body_timeout:客戶端必須在指定時間內發(fā)送完整的請求體。如果超時,返回 408 Request Timeout。

send_timeout:向客戶端發(fā)送響應時的超時。不是整個響應發(fā)送完成的時間,而是兩次 write 操作之間的超時。如果客戶端接收數(shù)據(jù)慢,Nginx 會在這個時間后關閉連接。

5.2 upstream 超時

upstream backend {
  server 127.0.0.1:8080;
  keepalive 32;
  keepalive_requests 1000;
  keepalive_timeout 60s;
}

keepalive:連接池中保持的空閑連接數(shù)量。這個數(shù)量不是越大越好:每個連接占用文件描述符和內存,過多會造成資源浪費。通常設置為 expected concurrent requests / worker_processes。

keepalive_requests:一個 keepalive 連接最多處理的請求數(shù)。處理完指定數(shù)量后,連接會被關閉并重新建立,防止內存泄漏。

keepalive_timeout:keepalive 連接保持空閑的超時時間。

6. 壓縮與傳輸優(yōu)化

6.1 Gzip 壓縮

啟用 gzip 壓縮可以大幅減少傳輸數(shù)據(jù)量,提升響應速度:

http {
  gzip on;
  gzip_vary on;
  gzip_min_length 1024;
  gzip_proxied any;
  gzip_comp_level 4;
  gzip_types text/plain text/css text/xml application/json application/javascript application/xml application/xml+rss;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_disable "MSIE [1-6].";
}

gzip on:啟用 gzip 壓縮。

gzip_vary on:在響應頭中添加Vary: Accept-Encoding,告訴緩存服務器根據(jù) Accept-Encoding 緩存不同版本。

gzip_min_length 1024:小于 1024 字節(jié)的響應不壓縮。壓縮小文件的壓縮率低且消耗 CPU,不值得。

gzip_proxied any:代理請求也啟用壓縮,不管請求頭是什么。

gzip_comp_level 4:壓縮級別 1-9。級別越高壓縮率越高,但 CPU 開銷也越大。4 是平衡點,大多數(shù)場景下最優(yōu)。

gzip_types:指定要壓縮的 MIME 類型。不在列表中的內容不會被壓縮。

**gzip_disable "MSIE [1-6]."**:禁止 IE6 對 gzip 內容的處理(IE6 對 gzip 支持有 bug)。

6.2 靜態(tài)資源緩存

對于不常變化的靜態(tài)資源,設置長期緩存減少重復請求:

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot)$ {
  expires 30d;
  add_header Cache-Control "public, no-transform";
  access_log off;
}

expires 30d:設置緩存時間為 30 天。靜態(tài)資源應該設置較長的緩存時間。

**add_header Cache-Control "public, no-transform"`**:添加緩存控制頭。public 表示任何緩存都可以存儲;no-transform 表示不允許轉換內容(如禁止 CDN 重新壓縮圖片)。

access_log off:關閉靜態(tài)資源的日志記錄,減少無效日志。

6.3 Sendfile 零拷貝

Linux 的 sendfile 系統(tǒng)調用可以減少內核態(tài)與用戶態(tài)之間的數(shù)據(jù)拷貝:

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
}

sendfile on:啟用 sendfile 系統(tǒng)調用。這是 Linux 高效傳輸文件的標準方式,避免了內核緩沖區(qū)到用戶緩沖區(qū)再到網(wǎng)絡緩沖區(qū)的多次拷貝。

tcp_nopush on:在 Linux 上啟用。與 sendfile 配合使用,當發(fā)送 HTTP 響應頭時,先不發(fā)送數(shù)據(jù)包,而是積累數(shù)據(jù)然后一次性發(fā)送。這減少了網(wǎng)絡小包的數(shù)量。

tcp_nodelay on:禁用 Nagle 算法。對于實時性要求高的應用(如 SSH、游戲),應該啟用;對于 HTTP 服務,兩個都應該啟用。

7. 連接處理優(yōu)化

7.1 HTTP/2 配置

HTTP/2 相比 HTTP/1.1 有顯著的性能優(yōu)勢:多路復用減少了連接數(shù),頭部壓縮減少了傳輸量,服務器推送可以主動發(fā)送資源:

http {
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers 'TLS_AES_256_GCM_SHA384TLS_AES_128_GCM_SHA256';
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared10m;
  ssl_session_timeout 1d;
}

server {
  listen 443 ssl http2;
  server_name example.com;
}

listen 443 ssl http2:啟用 HTTP/2。Nginx 1.27 版本已經(jīng)完整支持 HTTP/2。

ssl_session_cache:SSL session 緩存,減少 SSL 握手開銷。10MB 可以緩存約 40000 個 session。

ssl_session_timeout:SSL session 緩存有效期。

ssl_prefer_server_ciphers on:使用服務器端配置的加密套件優(yōu)先級,而不是客戶端的偏好。這確保了使用最安全的配置。

7.2 upstream keepalive 配置

Nginx 與 upstream 之間的連接復用是提升性能的關鍵:

upstream backend {
  server 127.0.0.1:8080;
  keepalive 64;
  keepalive_requests 10000;
  keepalive_timeout 60s;
}

location / {
  proxy_pass http://backend;
  proxy_http_version 1.1;
  proxy_set_header Connection "";
}

proxy_http_version 1.1:HTTP/1.1 才支持 keep-alive。

**proxy_set_header Connection ""**:清除 Connection 頭,避免傳遞 close 指令導致連接被關閉。設置空字符串表示使用持久連接。

keepalive 64:每個 upstream server 保持 64 個空閑連接。如果有 4 個 upstream 進程,則總共有 256 個持久連接。

keepalive_requests 10000:每個連接處理 10000 個請求后關閉,防止內存泄漏。

7.3 連接隊列與限流

在高并發(fā)場景下,需要限制最大并發(fā)數(shù)防止壓垮 upstream:

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1000r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

server {
  location / {
    # 限流:每秒 1000 個請求
    limit_req zone=req_limit burst=2000 nodelay;

    # 連接數(shù)限制:每個 IP 最多 100 個并發(fā)連接
    limit_conn conn_limit 100;

    proxy_pass http://backend;
  }
}

limit_req_zone:定義限流規(guī)則。$binary_remote_addr 是客戶端 IP 的二進制形式,比字符串形式更省內存。

rate=1000r/s:每秒鐘 1000 個請求。burst=2000 表示允許突發(fā)到 2000 個請求。nodelay 表示突發(fā)請求不延遲處理。

limit_conn:限制單個客戶端的并發(fā)連接數(shù)。超過后返回 503 Service Unavailable。

8. 緩存配置

8.1 代理緩存

Nginx 可以緩存 upstream 響應,減少對后端服務器的請求:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=api_cache:100m max_size=10g inactive=60m use_temp_path=off;

server {
  location /api/ {
    proxy_pass http://backend;
    proxy_cache api_cache;
    proxy_cache_valid 200 60s;
    proxy_cache_valid 404 10s;
    proxy_cache_use_stale error timeout updating;
    add_header X-Cache-Status $upstream_cache_status;
  }
}

proxy_cache_path:定義緩存存儲路徑和參數(shù)。

levels=1:2:緩存鍵的目錄層級

keys_zone=api_cache:100m:共享內存區(qū)名稱和大小,100m 可以緩存約 100 萬個 key

max_size=10g:緩存最大磁盤占用

inactive=60m:60 分鐘內未被訪問的緩存自動清除

use_temp_path=off:緩存直接寫入最終路徑,不經(jīng)過臨時目錄,減少文件移動

proxy_cache_valid:不同狀態(tài)碼的緩存有效期。200 響應緩存 60 秒,404 緩存 10 秒。

proxy_cache_use_stale:當 upstream 發(fā)生錯誤或超時時,使用舊的緩存響應。這提升了用戶體驗,但需要業(yè)務上接受返回舊數(shù)據(jù)的風險。

$upstream_cache_status:顯示緩存命中狀態(tài),值為 HIT/MISS/EXPIRED/UPDATING/BYPASS/STALE。這個 header 幫助前端判斷數(shù)據(jù)是否來自緩存。

8.2 緩存清理

當 upstream 數(shù)據(jù)更新時,需要主動清理緩存:

# 需要加載 ngx_cache_purge 模塊
location ~ /purge(/.*) {
  proxy_cache_purge api_cache $1;
}

使用方式:curl -X PURGE http://example.com/purge/api/users/123

這會在數(shù)據(jù)更新后主動清除緩存,確保用戶立即獲取最新數(shù)據(jù)。

9. 負載均衡策略選擇

9.1 輪詢與加權輪詢

默認的負載均衡策略是輪詢,每個 upstream 依次處理請求:

upstream backend {
  server 127.0.0.1:8080 weight=5;
  server 127.0.0.1:8081 weight=3;
  server 127.0.0.1:8082 weight=2;
}

加權輪詢用于 upstream 性能不一致的場景。weight 越大的 server 分到的請求越多。性能好的機器 weight 設置更高。

9.2 最少連接數(shù)

最少連接數(shù)策略將請求發(fā)送到當前連接數(shù)最少的 upstream:

upstream backend {
  least_conn;
  server 127.0.0.1:8080;
  server 127.0.0.1:8081;
}

適合請求處理時間差異較大的場景。長時間占用連接的請求不會讓某臺 upstream 過載。

9.3 IP 哈希

IP 哈希策略保證來自同一 IP 的請求始終打到同一臺 upstream:

upstream backend {
  ip_hash;
  server 127.0.0.1:8080;
  server 127.0.0.1:8081;
  server 127.0.0.1:8082;
}

適合需要會話保持的場景。但當某臺 upstream 下線時,可能導致會話丟失(除非使用 ip_hash 配合 down)。

9.4 最少響應時間

Nginx Plus(商業(yè)版)支持最少響應時間策略,將請求發(fā)送到平均響應時間最短的 upstream。開源版可以通過第三方模塊如 nginx-upsync-module 或 Consul 配合實現(xiàn)動態(tài)負載均衡。

10. 高可用與容災

10.1 upstream 健康檢查

Nginx 開源版沒有內置健康檢查,需要通過配置實現(xiàn)被動健康檢查:

upstream backend {
  server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
  server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
  server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
}

max_fails=3:連續(xù) 3 次失敗后,認為該 server 不可用。

fail_timeout=30s:不可用狀態(tài)持續(xù) 30 秒后,重新嘗試該 server。

這種被動檢查依賴真實請求來判斷 server 健康狀態(tài)。如果某臺 upstream 掛了,在排查完成前會有少量失敗請求。

10.2 backup 與 down

upstream backend {
  server 127.0.0.1:8080 weight=5;
  server 127.0.0.1:8081 weight=3;
  server 127.0.0.1:8082 backup; # 備份 server
}

backup:標記為備份 server。只有在所有非 backup server 都不可用時,才啟用。

down:標記為永久下線,用于臨時維護。

10.3 主備架構

在雙 Nginx 主備場景中,使用 Keepalived 做 VIP 漂移:

# Nginx Master 配置
virtual_server 192.168.1.100 443 {
  delay_loop 6
  lb_algo rr
  lb_kind VRRP
  persistence_timeout 0
  protocol TCP

  real_server 192.168.1.101 443 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 3
    }
  }

  real_server 192.168.1.102 443 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 3
    }
  }
}

Keepalived 定期探測 real_server 的健康狀態(tài),當 Master 不可用時,VIP 自動漂移到 Backup。這個架構保證 Nginx 層的 HA。

11. 生產(chǎn)環(huán)境驗證清單

完成參數(shù)調整后,必須逐項驗證:

Nginx 配置語法正確:nginx -t

文件描述符上限已生效:ulimit -n應顯示 100000 或更大

worker 進程數(shù)正確:ps aux | grep nginx應顯示多個 worker

端口監(jiān)聽正常:ss -tlnp | grep nginx應顯示監(jiān)聽端口

upstream 連接池生效:觀察netstat -an | grep ESTABLISHED | grep upstream_port連接數(shù)

限流生效:使用 ab 或 wrk 壓測驗證

緩存生效:檢查 X-Cache-Status 響應頭顯示 HIT

性能提升驗證:對比調整前后的 QPS 和延遲 P99

12. 常見誤區(qū)

12.1 誤區(qū)一:worker_processes 設置越大越好

實際:worker_processes 應該等于 CPU 核心數(shù)。超過 CPU 核心數(shù)后,進程切換開銷反而降低性能。可以用top或htop觀察 CPU 使用率,如果多個 worker 的 CPU 使用率都接近 100% 且總體已無提升空間,說明配置合理。

12.2 誤區(qū)二:worker_connections 設置為系統(tǒng)最大 FD

實際:worker_connections * worker_processes 必須小于 worker_rlimit_nofile。因為除了連接,還有日志文件、upstream 連接、緩存文件描述符等占用。通常 worker_connections 設置為 worker_rlimit_nofile 的 60-70% 較為安全。

12.3 誤區(qū)三:gzip 壓縮級別越高越好

實際:gzip 壓縮級別 1-9,級別越高壓縮率提升有限但 CPU 開銷指數(shù)增長。測試數(shù)據(jù)表明,級別 1 的壓縮速度是級別 9 的 5-10 倍,而壓縮率差異通常不超過 10%。建議使用級別 4 或 5。

12.4 誤區(qū)四:proxy_buffering 永遠應該開啟

實際:對于需要實時推送數(shù)據(jù)的場景(如長輪詢、Server-Sent Events),關閉 proxy_buffering 讓數(shù)據(jù)實時轉發(fā)更合適。判斷標準:如果 upstream 返回的數(shù)據(jù)需要立即到達客戶端,就關閉緩沖;如果可以接受一定延遲,就開啟。

13. 總結

高并發(fā)場景下 Nginx 優(yōu)化的核心是:最大化連接處理能力、最小化每個請求的開銷、合理利用緩存和壓縮減少數(shù)據(jù)傳輸。

參數(shù)調整的優(yōu)先級是:內核參數(shù)大于進程模型大于緩沖區(qū)配置大于協(xié)議優(yōu)化。按這個順序逐層調整,每層調整后觀察效果。

優(yōu)化不是一勞永逸。流量模式變化、upstream 性能變化、業(yè)務邏輯調整都可能讓原有的最優(yōu)配置不再最優(yōu)。建議建立定期 review 機制,結合監(jiān)控數(shù)據(jù)分析配置是否仍然合理。

最終,所有優(yōu)化都應該回歸到業(yè)務指標:QPS、延遲 P99/P95、錯誤率。只有這些指標改善了,優(yōu)化才是有效的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11327

    瀏覽量

    225888
  • 服務器
    +關注

    關注

    14

    文章

    10358

    瀏覽量

    91754
  • nginx
    +關注

    關注

    0

    文章

    194

    瀏覽量

    13210

原文標題:高并發(fā)場景下,Nginx 性能優(yōu)化應該先改哪些參數(shù)?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux上Nginx獲得最佳性能的8種方法

    NGINX 是一種流行的、免費的開源 Web 服務器。默認的 NGINX 配置足以讓 Web 服務器正常工作。 但是,如果您想充分利用 NGINX,則需要使用其配置文件并設置可優(yōu)化服務
    發(fā)表于 01-16 09:51 ?867次閱讀

    Linux運維Nginx軟件優(yōu)化之安全優(yōu)化

    一、Nginx優(yōu)化分類安全優(yōu)化(提升網(wǎng)站安全性配置)性能優(yōu)化(提升用戶訪問網(wǎng)站效率)二、Nginx
    發(fā)表于 12-17 15:12

    Linux運維Nginx軟件優(yōu)化Nginx性能優(yōu)化

    1. 優(yōu)化nginx worker進行個數(shù)nginx服務主要有兩個重要進程:01) master進程:可以控制nginx服務的啟動 停止 或重啟02) worker進程:處理用戶請求信
    發(fā)表于 12-18 15:11

    Linux運維Nginx軟件優(yōu)化之日志優(yōu)化

    1. 配置Nginx服務相關日志操作1) 進行日志的切割[code][root@oldboy ~]# mkdir /server/scripts/ -p[root@oldboy ~]# cd
    發(fā)表于 12-18 15:17

    主要學習下nginx的安裝配置

    處理。因為有了中間件,使得大型網(wǎng)站在規(guī)劃有了更好的層次性,維護上更加方便。也可以實現(xiàn)負載均衡、安全防護等。Nginx是一個開源高性能、可靠的HTTP中間件、代理服務,在目前企業(yè)中得到了很大的利用。今天
    發(fā)表于 10-19 14:12

    介紹 Nginx的基本概念,性能,SSL 安裝

    我們會告訴你 Nginx 如何工作及其背后的理念,還有如何優(yōu)化以加快應用的性能,如何安裝啟動和保持運行。
    的頭像 發(fā)表于 02-08 09:12 ?3960次閱讀
    介紹 <b class='flag-5'>Nginx</b>的基本概念,<b class='flag-5'>性能</b>,SSL 安裝

    分析Nginx為什么快的原因

    Nginx 以其高性能,穩(wěn)定性,豐富的功能,簡單的配置和低資源消耗而聞名。本文從底層原理分析 Nginx 為什么這么快!
    的頭像 發(fā)表于 05-04 14:26 ?3194次閱讀
    分析<b class='flag-5'>Nginx</b>為什么快的原因

    Nginx的詳細知識點講解

    Nginx是一個高性能的HTTP和反向代理服務器,特點是占用內存少,并發(fā)能力強,事實上nginx的并發(fā)能力確實在同類型的網(wǎng)頁服務器中表現(xiàn)較好 nginx專為
    的頭像 發(fā)表于 12-26 10:25 ?3397次閱讀
    <b class='flag-5'>Nginx</b>的詳細知識點講解

    性能Nginx HTTPS調優(yōu)-如何為HTTPS提速30%

    Nginx 常作為最常見的服務器,常被用作負載均衡 (Load Balancer)、反向代理 (Reverse Proxy),以及網(wǎng)關 (Gateway) 等等。一個配置得當?shù)?Nginx 服務器單機應該可以期望承受住 50K
    的頭像 發(fā)表于 01-16 11:20 ?1548次閱讀

    如何通過Nginx實現(xiàn)遠程調試本機代碼

    其實 springboot 本身就支持 HTTPS(howto-configure-ssl),但是這需要項目代碼不太優(yōu)雅,于是就想直接用nginx反向代理到本地服務,這樣在nginx層面做
    發(fā)表于 03-03 15:26 ?1954次閱讀

    Nginx 如何實現(xiàn)高性能低消耗

    Nginx具有豐富的模塊庫、靈活的配置、較低資源消耗等優(yōu)點。下面,我們一起深入看一下Nginx的工作機制 1. Nginx 如何實現(xiàn)高性能低消耗的呢? 我們從以下幾個方面說明以下:
    的頭像 發(fā)表于 11-11 11:31 ?1313次閱讀
    <b class='flag-5'>Nginx</b> 如何實現(xiàn)高<b class='flag-5'>性能</b>低消耗

    Nginx服務優(yōu)化教程

    隱藏Nginx版本號,避免安全漏洞泄漏:修改配置文件法;修改源碼法
    的頭像 發(fā)表于 03-12 15:57 ?1086次閱讀
    <b class='flag-5'>Nginx</b>服務<b class='flag-5'>優(yōu)化</b>教程

    Nginx性能優(yōu)化終極指南

    而worker 進程數(shù)默認為 1 。單進程最大連接數(shù)為1024。如下圖(打開Nginx目錄下的/conf/nginx.conf 文檔),現(xiàn)在我們來對這兩個數(shù)值進行調優(yōu)
    的頭像 發(fā)表于 06-16 13:44 ?1551次閱讀
    <b class='flag-5'>Nginx</b><b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>終極指南

    Nginx高并發(fā)優(yōu)化方案

    作為一名在生產(chǎn)環(huán)境中摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當導致的性能瓶頸。今天分享一套完整的Nginx高并發(fā)優(yōu)化方案,幫助你的系統(tǒng)從10萬QPS突破到百萬級別。
    的頭像 發(fā)表于 08-13 15:51 ?1217次閱讀

    Nginx中Master與Worker進程的工作機制

    Nginx是現(xiàn)代互聯(lián)網(wǎng)架構中最常用的Web服務器和反向代理軟件。很多運維工程師使用Nginx多年,卻對其核心架構一知半解,配置優(yōu)化時只會機械地調整幾個參數(shù)。本文從
    的頭像 發(fā)表于 04-08 14:21 ?113次閱讀
    沁阳市| 洮南市| 右玉县| 调兵山市| 岳西县| 巴林左旗| 子洲县| 汉川市| 东乌珠穆沁旗| 秭归县| 滨海县| 承德市| 梁平县| 望奎县| 汉中市| 芦溪县| 班戈县| 五大连池市| 策勒县| 周宁县| 瑞丽市| 乌拉特前旗| 西乡县| 根河市| 黔江区| 尉犁县| 宝应县| 公安县| 永靖县| 方山县| 舒城县| 宁明县| 天水市| 霍林郭勒市| 沁阳市| 阿坝县| 镇原县| 广灵县| 阜宁县| 林州市| 洪江市|