高并發場景下,如何提升Nginx并發性能?
Nginx是大型架構的必備中間件,也是高并發的核心組件,下面我就重點詳解“5大提升Nginx并發性能方案”@mikechen
Nginx高并發
Nginx 是目前全球最流行的 Web 服務器之一,其廣泛使用得益于其卓越的性能。
Nginx 采用一個主進程(Master),管理多個工作進程(Worker)的架構。
每個工作進程通過一個事件循環處理所有活躍連接,僅在有事件觸發時執行回調,避免阻塞。
與其他傳統的 Web 服務器相比,Nginx 在處理大量并發請求時,能夠在有限的硬件資源下提供更穩定的服務。
即使在處理大量并發連接時,Nginx 對系統資源(CPU 和內存)的占用也更低。
Nginx高并發優化
即便Nginx可以更好的支撐并發,但在 Nginx 高并發性能中,以下 5 大核心參數依然是最關鍵的優化項。
worker_processes
worker_processes 是 Nginx 中一個非常重要的配置參數,它用于設置 Nginx 工作進程的數量。
最新文章
可以使用 auto 關鍵字,讓 Nginx 自動檢測 CPU 核心數并進行配置:
worker_processes auto;
events {
worker_connections 1024;
}
如果你對服務器的負載情況有更精確的了解,也可以手動指定 worker_processes 的值。
最新文章
例如:如果服務器有 4 個 CPU 核心,可以將 worker_processes 設置為 4:
worker_processes 4;
events {
worker_connections 1024;
}
比如:中型服務器配置:
- CPU核心數:8;
- 內存:16GB;
- Nginx配置;
worker_processes 8;
events {
worker_connections 16384;
multi_accept on;
use epoll;
}
worker_connections
worker_connections 指令,用于設置每個工作進程可以處理的“最大連接數”。
最新文章
默認值為 1024,通常需要根據系統資源增加此值。
worker_processes 4;
events {
worker_connections 1024;
}
http {
# 其他 HTTP 相關配置
server {
listen 80;
server_name mikechen.cc;
location / {
root /var/www/html;
index index.html;
}
}
}
理論上最大連接數 = worker_processes * worker_connections。
可以根據服務器的硬件資源,比如:(CPU、內存、網絡帶寬…),調整 worker_connections。
推薦值:通常設置為 幾千到幾萬,具體取決于服務器能力。
比如:
- 小型服務器:4096 ~ 8192;
- 中型服務器:16384 ~ 32768;
- 大型服務器:65536 或更高。
events {
worker_connections 65535;
}
備注:這里同時需要,調整系統的文件描述符限制(通過修改 /etc/security/limits.conf 和 ulimit 命令)。
ulimit -n
Nginx 提供了一個指令 worker_rlimit_nofile,用于設置每個 worker 進程的最大文件描述符限制:
worker_rlimit_nofile 65535; # 設置每個 worker 的文件描述符限制
worker_processes auto;
events {
worker_connections 16384;
}
keepalive_timeout
HTTP 長連接的超時時間,主要是:控制客戶端、與服務器之間保持連接的時間,減少重復建立連接的開銷。
最新文章
一般,設置合理的超時時間(如 60 秒),避免過長導致無效連接占用資源。
keepalive_timeout 60;
在高并發場景下,建議將 keepalive_timeout 設置為較短的時間(如 30 秒),以避免空閑連接占用過多資源:
keepalive_timeout 30;
gzip
啟用 Gzip 壓縮,可以減少傳輸數據量,提高并發處理能力
比如:通過壓縮響應數據(如 HTML、CSS、JavaScript),減少傳輸的數據量,提高帶寬利用率。
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain application/javascript text/css application/xml;
緩存配置
緩存打開的文件句柄,可以減少頻繁打開文件的操作,提高靜態資源的訪問速度。
最新文章
open_file_cache max=10000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
open_file_cache_errors on;
以及,通過緩存靜態文件,減少對后端服務器的請求:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control public;
}
通過以上配置,可以有效提升 Nginx 在高并發場景下的性能表現。