ngx_stream_proxy_module 模組

範例設定
指令
     proxy_bind
     proxy_buffer_size
     proxy_connect_timeout
     proxy_download_rate
     proxy_half_close
     proxy_next_upstream
     proxy_next_upstream_timeout
     proxy_next_upstream_tries
     proxy_pass
     proxy_protocol
     proxy_requests
     proxy_responses
     proxy_session_drop
     proxy_socket_keepalive
     proxy_ssl
     proxy_ssl_certificate
     proxy_ssl_certificate_key
     proxy_ssl_ciphers
     proxy_ssl_conf_command
     proxy_ssl_crl
     proxy_ssl_key_log
     proxy_ssl_name
     proxy_ssl_password_file
     proxy_ssl_protocols
     proxy_ssl_server_name
     proxy_ssl_session_reuse
     proxy_ssl_trusted_certificate
     proxy_ssl_verify
     proxy_ssl_verify_depth
     proxy_timeout
     proxy_upload_rate

ngx_stream_proxy_module 模組 (1.9.0) 允許透過 TCP、UDP (1.9.13) 和 UNIX 網域套接字代理數據流。

範例設定

server {
    listen 127.0.0.1:12345;
    proxy_pass 127.0.0.1:8080;
}

server {
    listen 12345;
    proxy_connect_timeout 1s;
    proxy_timeout 1m;
    proxy_pass example.com:12345;
}

server {
    listen 53 udp reuseport;
    proxy_timeout 20s;
    proxy_pass dns.example.com:53;
}

server {
    listen [::1]:12345;
    proxy_pass unix:/tmp/stream.socket;
}

指令

語法 proxy_bind address [transparent] | off;
預設值
上下文 stream, server

此指令出現在 1.9.2 版本。

使與代理伺服器的連線來源於指定的本機 IP address。參數值可以包含變數 (1.11.2)。特殊值 off 會取消從先前設定層級繼承的 proxy_bind 指令的效果,允許系統自動指派本機 IP 位址。

transparent 參數 (1.11.0) 允許與代理伺服器的連線來源於非本機 IP 位址,例如,來自用戶端的真實 IP 位址

proxy_bind $remote_addr transparent;

為了使此參數生效,通常需要以超級使用者權限執行 nginx 工作程序。在 Linux 上則不需要 (1.13.8),因為如果指定了 transparent 參數,工作程序會從主程序繼承 CAP_NET_RAW 能力。也需要設定核心路由表以攔截來自代理伺服器的網路流量。

語法 proxy_buffer_size size;
預設值
proxy_buffer_size 16k;
上下文 stream, server

此指令出現在 1.9.4 版本。

設定用於從代理伺服器讀取數據的緩衝區的 size。同時設定用於從客戶端讀取數據的緩衝區的 size

語法 proxy_connect_timeout time;
預設值
proxy_connect_timeout 60s;
上下文 stream, server

定義與代理伺服器建立連線的逾時時間。

語法 proxy_download_rate rate;
預設值
proxy_download_rate 0;
上下文 stream, server

此指令出現在 1.9.3 版本。

限制從代理伺服器讀取數據的速度。rate 以每秒位元組數指定。零值會停用速率限制。限制是針對每個連線設定的,因此如果 nginx 同時開啟兩個與代理伺服器的連線,則整體速率將是指定限制的兩倍。

參數值可以包含變數 (1.17.0)。在速率應根據特定條件限制的情況下可能很有用。

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_download_rate $rate;

語法 proxy_half_close on | off;
預設值
proxy_half_close off;
上下文 stream, server

此指令出現在 1.21.4 版本。

啟用或停用獨立關閉 TCP 連線的每個方向(「TCP 半關閉」)。如果啟用,透過 TCP 代理將保持直到雙方關閉連線。

語法 proxy_next_upstream on | off;
預設值
proxy_next_upstream on;
上下文 stream, server

當無法與代理伺服器建立連線時,決定是否將客戶端連線傳遞給下一個伺服器。

將連線傳遞給下一個伺服器可由嘗試次數時間限制。

語法 proxy_next_upstream_timeout time;
預設值
proxy_next_upstream_timeout 0;
上下文 stream, server

限制將連線傳遞給下一個伺服器所允許的時間。0 值關閉此限制。

語法 proxy_next_upstream_tries number;
預設值
proxy_next_upstream_tries 0;
上下文 stream, server

限制將連線傳遞給下一個伺服器的可能嘗試次數。0 值關閉此限制。

語法 proxy_pass address;
預設值
上下文 伺服器

設定代理伺服器的位址。位址可以指定為網域名稱或 IP 位址,以及一個連接埠

proxy_pass localhost:12345;

或指定為 UNIX 網域套接字路徑

proxy_pass unix:/tmp/stream.socket;

如果網域名稱解析為多個位址,則所有位址將以循環方式使用。此外,位址可以指定為伺服器群組

位址也可以使用變數指定 (1.11.3)

proxy_pass $upstream;

在這種情況下,會從已描述的伺服器群組中搜尋伺服器名稱,如果找不到,則使用解析器來決定。

語法 proxy_protocol on | off;
預設值
proxy_protocol off;
上下文 stream, server

此指令出現在 1.9.2 版本。

啟用與代理伺服器連線的 PROXY 協定

語法 proxy_requests number;
預設值
proxy_requests 0;
上下文 stream, server

此指令出現在 1.15.7 版本。

設定客戶端資料報的數量,達到此數量時,將會捨棄客戶端和現有 UDP 串流工作階段之間的繫結。接收到指定數量的資料報後,來自同一客戶端的下一個資料報會啟動新的工作階段。當所有客戶端資料報都傳輸到代理伺服器,並且收到預期的回應數量,或達到逾時時,工作階段會終止。

語法 proxy_responses number;
預設值
上下文 stream, server

此指令出現在 1.9.13 版本。

如果使用 UDP 協定,則設定預期從代理伺服器收到的資料報數量,以回應客戶端資料報。此數字作為工作階段終止的提示。依預設,資料報的數量沒有限制。

如果指定零值,則不會預期回應。但是,如果收到回應且工作階段仍未結束,則會處理回應。

語法 proxy_session_drop on | off;
預設值
proxy_session_drop off;
上下文 stream, server

此指令出現在 1.15.8 版本。

啟用在代理伺服器從群組移除或標記為永久不可用後,終止與代理伺服器的所有工作階段。這可能是因為重新解析或透過 API DELETE 命令發生。如果伺服器被認為不健康或透過 API PATCH 命令,則可將其標記為永久不可用。當處理客戶端或代理伺服器的下一個讀取或寫入事件時,每個工作階段都會終止。

此指令可作為我們的商業訂閱的一部分。

語法 proxy_socket_keepalive on | off;
預設值
proxy_socket_keepalive off;
上下文 stream, server

此指令出現在 1.15.6 版本。

設定與代理伺服器連線的「TCP keepalive」行為。依預設,作業系統的設定對套接字有效。如果將此指令設定為「on」值,則會針對套接字開啟 SO_KEEPALIVE 套接字選項。

語法 proxy_ssl on | off;
預設值
proxy_ssl off;
上下文 stream, server

啟用與代理伺服器連線的 SSL/TLS 協定。

語法 proxy_ssl_certificate file;
預設值
上下文 stream, server

指定以 PEM 格式包含憑證的 file,用於向代理伺服器進行驗證。

自 1.21.0 版起,變數可以用於 file 名稱。

語法 proxy_ssl_certificate_key file;
預設值
上下文 stream, server

指定以 PEM 格式包含私密金鑰的 file,用於向代理伺服器進行驗證。

自 1.21.0 版起,變數可以用於 file 名稱。

語法 proxy_ssl_ciphers ciphers;
預設值
proxy_ssl_ciphers DEFAULT;
上下文 stream, server

指定與代理伺服器連線時啟用的密碼。密碼以 OpenSSL 程式庫理解的格式指定。

可以使用「openssl ciphers」命令檢視完整清單。

語法 proxy_ssl_conf_command name value;
預設值
上下文 stream, server

此指令出現在 1.19.4 版本。

在與代理伺服器建立連線時,設定任意 OpenSSL 設定命令

當使用 OpenSSL 1.0.2 或更高版本時,支援此指令。

可以在同一層級指定多個 proxy_ssl_conf_command 指令。當且僅當目前層級上未定義 proxy_ssl_conf_command 指令時,這些指令才會從先前的設定層級繼承。

請注意,直接設定 OpenSSL 可能會導致意外行為。

語法 proxy_ssl_crl file;
預設值
上下文 stream, server

指定以 PEM 格式包含撤銷憑證 (CRL) 的 file,用於驗證代理伺服器的憑證。

語法 proxy_ssl_key_log path;
預設值
上下文 stream, server

此指令出現在 1.27.2 版本。

啟用代理伺服器連線 SSL 金鑰的記錄,並指定金鑰記錄檔的路徑。金鑰會以與 Wireshark 相容的 SSLKEYLOGFILE 格式記錄。

此指令可作為我們的商業訂閱的一部分。

語法 proxy_ssl_name name;
預設值
proxy_ssl_name host from proxy_pass;
上下文 stream, server

允許覆寫用於驗證代理伺服器憑證的伺服器名稱,以及在與代理伺服器建立連線時透過 SNI 傳遞的伺服器名稱。也可以使用變數指定伺服器名稱 (1.11.3)。

依預設,會使用 proxy_pass 位址的主機部分。

語法 proxy_ssl_password_file file;
預設值
上下文 stream, server

指定包含私密金鑰密碼的 file,其中每個密碼都在單獨一行上指定。載入金鑰時,會依序嘗試密碼。

語法 proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
預設值
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
上下文 stream, server

啟用與代理伺服器連線時使用的指定協定。

自 1.23.4 版本起,預設使用 TLSv1.3 參數。

語法 proxy_ssl_server_name on | off;
預設值
proxy_ssl_server_name off;
上下文 stream, server

啟用或停用在與代理伺服器建立連線時,透過 TLS 伺服器名稱指示擴展 (SNI, RFC 6066) 傳遞伺服器名稱。

語法 proxy_ssl_session_reuse on | off;
預設值
proxy_ssl_session_reuse on;
上下文 stream, server

決定在與代理伺服器工作時是否可以重複使用 SSL 工作階段。如果日誌中出現錯誤訊息 "SSL3_GET_FINISHED:digest check failed",請嘗試停用工作階段重複使用。

語法 proxy_ssl_trusted_certificate file;
預設值
上下文 stream, server

指定一個 file,其中包含 PEM 格式的受信任 CA 憑證,用於驗證代理伺服器的憑證。

語法 proxy_ssl_verify on | off;
預設值
proxy_ssl_verify off;
上下文 stream, server

啟用或停用對代理伺服器憑證的驗證。

語法 proxy_ssl_verify_depth number;
預設值
proxy_ssl_verify_depth 1;
上下文 stream, server

設定代理伺服器憑證鏈中的驗證深度。

語法 proxy_timeout timeout;
預設值
proxy_timeout 10m;
上下文 stream, server

設定用戶端或代理伺服器連線上,兩次連續讀取或寫入操作之間的 timeout 時間。如果在此時間內沒有傳輸任何資料,連線將會關閉。

語法 proxy_upload_rate rate;
預設值
proxy_upload_rate 0;
上下文 stream, server

此指令出現在 1.9.3 版本。

限制從用戶端讀取資料的速度。rate 以每秒位元組數指定。零值會停用速率限制。限制是針對每個連線設定的,因此如果用戶端同時開啟兩個連線,則總速率將是指定限制的兩倍。

參數值可以包含變數 (1.17.0)。在速率應根據特定條件限制的情況下可能很有用。

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_upload_rate $rate;