NGINX 作為常見的網頁伺服器和反向代理伺服器,效能調校對於應付高流量至關重要。本文除了探討連線和緩衝設定外,也涵蓋作業系統層級的最佳化,提供全面的效能提升策略。透過調整 keepalive 引數,可以有效減少建立新連線的開銷,而正確設定 proxy_buffering 等緩衝引數則能改善代理效能,避免頻繁寫入磁碟。此外,作業系統核心引數的調校,例如調整檔案描述符限制和臨時埠範圍,也能顯著提升 NGINX 的處理能力,確保系統在高負載下維持穩定運作。

NGINX效能調校:最佳化連線與緩衝設定

NGINX作為高效能的網頁伺服器與反向代理伺服器,其效能調校對於處理大量請求至關重要。本篇將探討NGINX的連線管理、緩衝機制以及作業系統層級的調校,以提升整體效能。

保持客戶端連線開啟

在處理客戶端請求時,保持連線開啟可以減少建立新連線的開銷。NGINX提供了keepalive_requestskeepalive_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引數可對日誌資料進行壓縮後再寫入磁碟。

作業系統層級調校

在某些情況下,需要對作業系統進行調校以支援更多的連線。

  1. 調整核心引數:檢查並調整net.core.somaxconn以增加連線佇列大小。
  2. 增加檔案描述符限制:提高系統對開啟檔案描述符的限制,以支援更多連線。
  3. 啟用更多臨時埠:當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';
        # 其他組態...
    }
}

內容解密:

  1. listen 443 quic;: 啟用QUIC協定,支援HTTP/3。
  2. add_header Alt-Svc 'h3=":443"; ma=86400';: 在HTTP回應中加入Alt-Svc標頭,告知客戶端伺服器支援HTTP/3。
  3. ssl_certificatessl_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;
        }
    }
}

內容解密:

  1. http 區塊定義了 NGINX 的 HTTP 組態。
  2. upstream backend 定義了一個名為 backend 的上游伺服器群組。
  3. least_conn 指令啟用了 least connections 負載平衡方法。
  4. server 指令定義了後端伺服器的地址和埠。
  5. proxy_pass 指令將客戶端請求轉發給 backend 上游伺服器群組。

流量管理與限制

NGINX 提供了多種流量管理功能,包括連線限制和請求限制等。這些功能可以有效地防止 DDoS 攻擊和過載。

連線限制

NGINX 可以透過 limit_conn_zonelimit_conn 指令限制客戶端的連線數。

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        listen 80;
        limit_conn addr 10;
    }
}

內容解密:

  1. limit_conn_zone 指令定義了一個名為 addr 的連線數限制區域,大小為 10MB。
  2. $binary_remote_addr 變數表示客戶端的 IP 地址。
  3. 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;
        }
    }
}

內容解密:

  1. upstream api_backend 定義了一個名為 api_backend 的上游伺服器群組。
  2. location /api 區塊定義了 API 請求的路由規則。
  3. proxy_pass 指令將 API 請求轉發給 api_backend 上游伺服器群組。
  4. 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;
        }
    }
}