1. 使用事件驅(qū)動模型
Nginx 采用事件驅(qū)動(event-driven)模型來處理請求,而不是為每個連接創(chuàng)建一個新的進程或線程。
這使得 Nginx 能夠以更低的資源消耗處理大量并發(fā)連接。
2. 優(yōu)化 Worker 進程配置
worker_processes
參數(shù)決定了 Nginx 啟動多少個 worker 進程。一
個常見的做法是將這個值設置為服務器的 CPU 核心數(shù),這樣可以充分利用所有 CPU 資源。
worker_processesauto;
worker_connections
參數(shù)定義了每個 worker 進程可以處理的最大并發(fā)連接數(shù)。建議將這個值設置得足夠大,例如 1024
或更高,以滿足高并發(fā)需求。
events{
worker_connections2048;
}
3. 啟用 gzip 壓縮
Gzip 壓縮:可以顯著減少發(fā)送給客戶端的數(shù)據(jù)量,從而加快網(wǎng)頁加載速度。
gzipon;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_proxied any;
gzip_comp_level5;
gzip_buffers168k;
gzip_varyon;
注意:gzip_proxied any;
表示代理服務器會壓縮所有請求。gzip_comp_level
設置壓縮級別,1是最低壓縮,9是最高。建議使用中等值,例如 5。
4. 靜態(tài)文件緩存
通過設置適當?shù)?nbsp;HTTP 緩存頭,可以指導瀏覽器緩存靜態(tài)文件(如圖片、CSS、JS)。這可以減少重復請求,減輕服務器壓力。
location~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|eot|ttf)${
expires30d;
add_headerCache-Control"public, no-transform";
}
expires 30d;
指示瀏覽器緩存這些文件 30 天。
5. 使用緩存來加速動態(tài)內(nèi)容
對于動態(tài)內(nèi)容,可以使用 Nginx 的 fastcgi_cache
或 proxy_cache
來緩存后端應用(如 PHP-FPM, Node.js)的響應。
http{
# 定義緩存區(qū)域
fastcgi_cache_path/var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
fastcgi_cache_key"$scheme$request_method$host$request_uri";
server{
location~ \.php${
fastcgi_cache my_cache;
fastcgi_cache_valid20060m;# 緩存 HTTP 200 響應 60 分鐘
fastcgi_pass127.0.0.1:9000;
}
}
}
6. 減少 DNS 解析時間
在 Nginx 中,如果上游服務器地址是域名而不是 IP 地址,Nginx 會在啟動時進行一次 DNS 解析。為了避免這個問題,可以使用 resolver
指令,并配置一個合適的 DNS 服務器。
location/{
resolver8.8.8.8;
proxy_pass http://backend_server;
}
7. 開啟 TCP_NODELAY
TCP_NODELAY
可以確保數(shù)據(jù)包立即發(fā)送,而不是等待更多數(shù)據(jù)來填滿緩沖區(qū)。這對于低延遲的網(wǎng)絡應用非常有用。
http{
tcp_nodelayon;
}
8. 優(yōu)化日志記錄
日志記錄會產(chǎn)生 I/O 消耗。為了提升性能,可以考慮關(guān)閉不必要的日志或使用 buffer
指令將日志寫入內(nèi)存緩沖區(qū)。
http{
access_logoff;# 關(guān)閉訪問日志
# 或
# access_log /var/log/nginx/access.log buffer=32k;
}
9. 限制請求速率
使用 limit_req_zone
和 limit_req
模塊可以限制來自單個 IP 地址的請求速率,防止惡意攻擊或濫用。
http{
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server{
location/login/{
limit_req zone=one burst=5;
}
}
}
rate=1r/s
限制每秒一個請求,burst=5
允許短時間內(nèi)的突發(fā)請求。
10. 使用 HTTP/2
HTTP/2 提供了多路復用、服務器推送和頭部壓縮等特性,可以顯著提升網(wǎng)站性能。要啟用 HTTP/2,只需在 listen
指令中添加 http2
參數(shù)。
server {
listen443 ssl http2;
# ...
}
閱讀原文:原文鏈接
該文章在 2025/9/12 11:39:31 編輯過