全部產品
Search
文件中心

Alibaba Cloud Service Mesh:將Nginx的常用配置遷移至ASM網關

更新時間:Jun 30, 2024

本文介紹Nginx的常用配置以及如何在ASM網關實現對應的功能。

Nginx配置

描述

ASM實現方案

allow-backend-server-header

允許從後端返回標題Server而不是通用的Nginx字串。

ASM網關預設為true。

allow-snippet-annotations

允許在Ingress的Annotation中添加自訂指令碼修改Nginx配置。

不支援該參數,ASM網關需要通過編輯IstioGateway YAML來修改網關配置。

compute-full-forwarded-for

將遠程地址附加到X-Forwarded-For標題而不是替換它。

取決於Envoy的use_remote_address配置,預設為true。Istio關於XFF頭的處理,請參見Configuring Gateway Network Topology

enable-underscores-inheaders

允許Header出現底線。

對應Envoy的headers_with_underscores_action,預設為允許。

forwarded-for-header

設定用於標識用戶端的原始IP地址的標題欄位。

ASM網關不支援自訂forwarded-for Header,預設為X-Forwarded-For。

generate-request-id

如果請求中不存在X-Request-ID,則隨機產生X-Request-ID。

對應Envoy的generate_request_id,可以通過ASM外掛程式進行修改,預設為true。

ignore-invalid-headers

設定是否忽略帶有非法名稱的Header。合法的Header名稱應該是由英文字母、數字、短劃線(-),可能包含底線(_)。

說明

底線(_)由underscores_in_headers控制。

Envoy提供了一個Header Validator。若未配置Header Validator,會使用預設值。如果有非法Header,會提示Bad Request

image.png

keep-alive-requests

設定同一個keep-alive Connection最大可以處理多少個請求。達到最大請求數後,該串連將被關閉。

關於如何配置,請參見Destination RuleconnectionPool.maxRequestsPerConnection

log-format-upstream

自訂日誌格式。

ASM支援自訂日誌格式,您可以通過ASM控制台的可觀測配置頁面進行配置。具體操作,請參見可觀測配置

max-worker-connections

設定同一個Worker進程可以開啟的最大串連數。

ASM並未提供完全相同的配置,但是支援通過Destination RuleconnectionPool.tcp.maxConnections欄位進行配置,該欄位表示與同一個Host的最大串連數。

proxy-body-size

設定用戶端請求的最大Body Size,若超過該值,就會報413錯誤

不支援直接配置。建議分塊傳輸,不要使用太大的Body。

proxy-connect-timeout

定義與Proxy 伺服器建立串連的逾時時間,不能超過75秒。

關於如何配置,請參見Destination RuleconnectionPool.http.connectTimeout

reuse-port

設定Nginx為每個背景工作處理序建立一個單獨的監聽Socket(使用SO_REUSEPORT參數),允許核心在背景工作處理序之間分配傳入的串連。預設為true。

ASM網關預設為true。

server-tokens

在響應中發送Nginx伺服器標題,並在錯誤頁面中顯示Nginx的版本,預設為disabled。

ASM網關預設會將伺服器標題填寫為Envoy的標題,但是錯誤頁面不會顯示Envoy版本。

ssl-redirect

如果伺服器由TLS認證,則將重新導向的全域值設定為HTTPS。

關於如何配置,請參見Gatewaytls.httpsRedirect

upstream-keepalive-connections

設定保留在每個背景工作處理序的緩衝中與上遊伺服器的最大的空閑Keepalive Connection數目。

ASM並未提供完全相同的配置,但Destination Rule提供了connectionPool.tcp.maxConnections欄位,和該選項語義類似,不同的地方在於Istio中是所有串連,Nginx中是空閑串連。

upstream-keepalive-timeout

設定一個逾時,逾時之後將關閉與上遊伺服器之間的空閑串連。

關於如何配置,請參見Destination RuleconnectionPool.http.idleTimeout

use-forwarded-headers

  • 若為true,Nginx將會轉寄傳進來的X-Forwarded-* Header。通常用於L7代理之後。

  • 若為false,Nginx會忽略傳進來的值,自動重新填寫一個。

Istio關於XFF頭的處理,請參見Configuring Gateway Network Topology

worker-cpu-affinity

將Worker進程綁定到指定的CPU集合上。

容器環境中,通常不建議配置該選項。保持預設即可。

更多資訊,請參見Ingress Nginx