NGINX 作為常見的網頁伺服器和反向代理伺服器,效能調校對於應付高流量至關重要。本文除了探討連線和緩衝設定外,也涵蓋作業系統層級的最佳化,提供全面的效能提升策略。透過調整 keepalive 引數,可以有效減少建立新連線的開銷,而正確設定 proxy_buffering 等緩衝引數則能改善代理效能,避免頻繁寫入磁碟。此外,作業系統核心引數的調校,例如調整檔案描述符限制和臨時埠範圍,也能顯著提升 NGINX 的處理能力,確保系統在高負載下維持穩定運作。
NGINX效能調校:最佳化連線與緩衝設定
NGINX作為高效能的網頁伺服器與反向代理伺服器,其效能調校對於處理大量請求至關重要。本篇將探討NGINX的連線管理、緩衝機制以及作業系統層級的調校,以提升整體效能。
保持客戶端連線開啟
在處理客戶端請求時,保持連線開啟可以減少建立新連線的開銷。NGINX提供了keepalive_requests和keepalive_timeout指令來控制連線的最大請求數和閒置逾時時間。
http {
keepalive_requests 320;
keepalive_timeout 300s;
# ...
}
內容解密:
keepalive_requests指令預設為100,可根據需求調整以允許更多請求在單一連線上進行。keepalive_timeout指令預設為75秒,可調整以保持連線更長時間。- 這些設定對於持續輪詢後端服務的前端應用尤其有益。
維持上游伺服器連線
保持與上游伺服器的連線開啟,可以加快請求處理速度。NGINX的keepalive指令可在上游伺服器群組中啟用連線快取。
proxy_http_version 1.1;
proxy_set_header Connection "";
upstream backend {
server 10.0.0.42;
server 10.0.2.56;
keepalive 32;
}
內容解密:
keepalive指令設定每個NGINX工作程式可保持開啟的閒置連線數量。- 需要設定
proxy_http_version為1.1,並清空Connection標頭,以允許連線保持開啟。 - 開啟的連線數可能會超過設定的
keepalive值,因為開啟的連線和閒置的連線是不同的概念。
調整回應緩衝
NGINX可透過緩衝機制改善代理效能,將回應暫存在記憶體中,避免寫入臨時檔案。
server {
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 32k;
proxy_busy_buffer_size 64k;
# ...
}
內容解密:
proxy_buffering指令控制是否啟用緩衝,預設為開啟。proxy_buffer_size設定用於讀取回應首部和第一部份回應的緩衝區大小。proxy_buffers指令設定緩衝區的數量和大小。proxy_busy_buffer_size限制可用的忙碌緩衝區總大小,用於傳送給客戶端的回應。
緩衝存取日誌
為了減少在高負載下的磁碟I/O操作,NGINX允許對日誌寫入進行緩衝處理。
http {
access_log /var/log/nginx/access.log main buffer=32k flush=1m gzip=1;
}
內容解密:
buffer引數指定日誌資料在寫入磁碟前的記憶體緩衝區大小。flush引數設定日誌資料在緩衝區中保留的最長時間。gzip引數可對日誌資料進行壓縮後再寫入磁碟。
作業系統層級調校
在某些情況下,需要對作業系統進行調校以支援更多的連線。
- 調整核心引數:檢查並調整
net.core.somaxconn以增加連線佇列大小。 - 增加檔案描述符限制:提高系統對開啟檔案描述符的限制,以支援更多連線。
- 啟用更多臨時埠:當NGINX作為反向代理或負載平衡器時,每個上游連線都會開啟一個臨時埠。
這些調校措施能夠顯著提升NGINX在高流量情況下的處理能力。
最佳化作業系統以支援高效能連線
在進行高效能連線的調優時,首先需要關注的是作業系統的引數設定。其中一個重要的核心引數是 net.ipv4.ip_local_port_range,它定義了系統可用於建立連線的本地埠範圍。通常建議將此引數設定為從1024到65535的範圍。1024是註冊TCP埠的結束,而65535是動態或臨時埠的結束。需要注意的是,設定的下限應該高於最高的開放監聽服務埠,以避免衝突。
核心調優的重要性與注意事項
對作業系統進行調優是提升系統效能的第一步。根據特定的使用場景,可以對核心進行多項最佳化。然而,核心調優不應隨意進行,每項更改都應經過嚴格的效能測試,以確保變更確實帶來了正面的影響。通常,當核心日誌中出現相關訊息,或NGINX在錯誤日誌中明確記錄相關訊息時,就是需要開始進行核心調優的訊號。
NGINX 組態與最佳化
NGINX作為一個高效能的Web伺服器和反向代理伺服器,其組態對於系統的整體效能至關重要。正確的組態可以提升系統的處理能力和穩定性。
安全控制與存取控制
- 存取控制: NGINX提供了多種方式來控制存取,包括根據IP的存取控制、國家限制、RBAC(根據角色的存取控制)等。
- 日誌記錄: 正確組態日誌記錄對於監控和除錯系統非常重要。NGINX允許自定義日誌格式和存取日誌。
認證與授權
NGINX支援多種認證方式,包括HTTP基本認證、JWT(JSON Web Tokens)認證、SAML(Security Assertion Markup Language)認證等。正確組態認證機制對於保護系統和資料安全至關重要。
快取與效能最佳化
- 快取: NGINX提供了強大的快取功能,可以顯著提升系統效能。正確組態快取策略,包括快取鎖定、記憶體快取區等,可以最佳化系統效能。
- 效能調優: 除了快取外,還可以透過其他方式進行效能調優,如最佳化連線管理、啟用HTTP/2和HTTP/3等。
自動化與雲端佈署
隨著雲端運算的發展,自動化和雲端佈署變得越來越重要。NGINX支援在多種雲端平台上進行自動化佈署,包括AWS、Azure和Google Cloud等。
程式碼範例:組態NGINX使用HTTP/3
server {
listen 443 ssl;
listen 443 quic;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
# 設定 HTTP/3 相關引數
add_header Alt-Svc 'h3=":443"; ma=86400';
# 其他組態...
}
}
內容解密:
listen 443 quic;: 啟用QUIC協定,支援HTTP/3。add_header Alt-Svc 'h3=":443"; ma=86400';: 在HTTP回應中加入Alt-Svc標頭,告知客戶端伺服器支援HTTP/3。ssl_certificate和ssl_certificate_key: 設定SSL憑證和私鑰,用於加密連線。
透過上述組態,可以使NGINX支援HTTP/3,從而提升傳輸效率和安全性。
NGINX 技術深度解析與實踐
負載平衡技術探討
NGINX 提供了多種負載平衡技術,包括 least connections 和 generic hash 等。其中,least connections 方法根據後端伺服器的連線數進行負載分配,而 generic hash 方法則根據特定的 hash 鍵進行分配。
Least Connections 方法
此方法適用於後端伺服器處理能力不同的情況,能夠有效地將請求分配給當前連線數最少的伺服器,從而提高系統的整體吞吐量。
http {
upstream backend {
least_conn;
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
內容解密:
http區塊定義了 NGINX 的 HTTP 組態。upstream backend定義了一個名為backend的上游伺服器群組。least_conn指令啟用了 least connections 負載平衡方法。server指令定義了後端伺服器的地址和埠。proxy_pass指令將客戶端請求轉發給backend上游伺服器群組。
流量管理與限制
NGINX 提供了多種流量管理功能,包括連線限制和請求限制等。這些功能可以有效地防止 DDoS 攻擊和過載。
連線限制
NGINX 可以透過 limit_conn_zone 和 limit_conn 指令限制客戶端的連線數。
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
listen 80;
limit_conn addr 10;
}
}
內容解密:
limit_conn_zone指令定義了一個名為addr的連線數限制區域,大小為 10MB。$binary_remote_addr變數表示客戶端的 IP 地址。limit_conn指令限制客戶端的連線數為 10。
API 閘道器應用
NGINX 可以作為 API 閘道器,提供請求路由、身份驗證和速率限制等功能。
NGINX 作為 API 閘道器
透過組態 NGINX,可以將請求路由到不同的後端服務,並提供身份驗證和速率限制等功能。
http {
upstream api_backend {
server localhost:8080;
}
server {
listen 80;
location /api {
proxy_pass http://api_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
內容解密:
upstream api_backend定義了一個名為api_backend的上游伺服器群組。location /api區塊定義了 API 請求的路由規則。proxy_pass指令將 API 請求轉發給api_backend上游伺服器群組。proxy_set_header指令設定了轉發請求的頭部資訊。
Nginx效能調優與負載平衡技術探討
Nginx簡介與安裝
Nginx是一款高效能的Web伺服器和反向代理伺服器,廣泛應用於現代網路架構中。其高效的事件驅動架構使得它能夠處理大量的並發連線,同時保持低資源佔用。Nginx的安裝可以透過多種方式進行,包括使用套件管理器或從原始碼編譯安裝。
安裝Nginx
在Ubuntu系統上,可以使用以下命令安裝Nginx:
sudo apt-get update
sudo apt-get install nginx
安裝完成後,可以透過檢查Nginx版本來確認安裝是否成功:
nginx -v
負載平衡技術
Nginx提供了多種負載平衡技術,包括輪詢(Round-Robin)、最少連線(Least Connections)和IP雜湊(IP Hash)等。這些技術可以根據不同的應用場景進行選擇,以實作最佳的負載分配。
輪詢(Round-Robin)負載平衡
輪詢是Nginx預設的負載平衡方法,它將請求依次分配給後端伺服器。這種方法簡單易用,適用於後端伺服器效能相近的情況。
http {
upstream backend {
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
最少連線(Least Connections)負載平衡
最少連線方法將請求分配給當前連線數最少的後端伺服器。這種方法適用於後端伺服器效能不同的情況,可以更好地利用伺服器資源。
http {
upstream backend {
least_conn;
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
IP雜湊(IP Hash)負載平衡
IP雜湊方法根據客戶端的IP地址進行雜湊計算,將來自同一IP地址的請求分配給同一台後端伺服器。這種方法適用於需要會話保持的應用場景。
http {
upstream backend {
ip_hash;
server localhost:8081;
server localhost:8082;
server localhost:8083;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
效能調優
Nginx的效能調優可以從多個方面進行,包括調整工作程式數、最佳化連線數、啟用快取等。
調整工作程式數
Nginx的工作程式數應該根據伺服器的CPU核心數進行調整,以充分利用多核處理器的效能。
worker_processes auto;
最佳化連線數
增加Nginx可以處理的最大連線數,可以提高伺服器的並發處理能力。
worker_connections 1024;
啟用快取
啟用快取可以減少對後端伺服器的請求,提高回應速度。
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
}