ngx_stream_proxy_module 模組
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 |
---|---|
預設值 | — |
上下文 |
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 |
---|---|
預設值 |
proxy_buffer_size 16k; |
上下文 |
stream , server |
此指令出現在 1.9.4 版本。
設定用於從代理伺服器讀取數據的緩衝區的 size
。同時設定用於從客戶端讀取數據的緩衝區的 size
。
語法 |
proxy_connect_timeout |
---|---|
預設值 |
proxy_connect_timeout 60s; |
上下文 |
stream , server |
定義與代理伺服器建立連線的逾時時間。
語法 |
proxy_download_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 |
---|---|
預設值 |
proxy_half_close off; |
上下文 |
stream , server |
此指令出現在 1.21.4 版本。
啟用或停用獨立關閉 TCP 連線的每個方向(「TCP 半關閉」)。如果啟用,透過 TCP 代理將保持直到雙方關閉連線。
語法 |
proxy_next_upstream |
---|---|
預設值 |
proxy_next_upstream on; |
上下文 |
stream , server |
當無法與代理伺服器建立連線時,決定是否將客戶端連線傳遞給下一個伺服器。
語法 |
proxy_next_upstream_timeout |
---|---|
預設值 |
proxy_next_upstream_timeout 0; |
上下文 |
stream , server |
限制將連線傳遞給下一個伺服器所允許的時間。0
值關閉此限制。
語法 |
proxy_next_upstream_tries |
---|---|
預設值 |
proxy_next_upstream_tries 0; |
上下文 |
stream , server |
限制將連線傳遞給下一個伺服器的可能嘗試次數。0
值關閉此限制。
語法 |
proxy_pass |
---|---|
預設值 | — |
上下文 |
伺服器 |
設定代理伺服器的位址。位址可以指定為網域名稱或 IP 位址,以及一個連接埠
proxy_pass localhost:12345;
或指定為 UNIX 網域套接字路徑
proxy_pass unix:/tmp/stream.socket;
如果網域名稱解析為多個位址,則所有位址將以循環方式使用。此外,位址可以指定為伺服器群組。
位址也可以使用變數指定 (1.11.3)
proxy_pass $upstream;
在這種情況下,會從已描述的伺服器群組中搜尋伺服器名稱,如果找不到,則使用解析器來決定。
語法 |
proxy_protocol |
---|---|
預設值 |
proxy_protocol off; |
上下文 |
stream , server |
此指令出現在 1.9.2 版本。
啟用與代理伺服器連線的 PROXY 協定。
語法 |
proxy_requests |
---|---|
預設值 |
proxy_requests 0; |
上下文 |
stream , server |
此指令出現在 1.15.7 版本。
設定客戶端資料報的數量,達到此數量時,將會捨棄客戶端和現有 UDP 串流工作階段之間的繫結。接收到指定數量的資料報後,來自同一客戶端的下一個資料報會啟動新的工作階段。當所有客戶端資料報都傳輸到代理伺服器,並且收到預期的回應數量,或達到逾時時,工作階段會終止。
語法 |
proxy_responses |
---|---|
預設值 | — |
上下文 |
stream , server |
此指令出現在 1.9.13 版本。
如果使用 UDP 協定,則設定預期從代理伺服器收到的資料報數量,以回應客戶端資料報。此數字作為工作階段終止的提示。依預設,資料報的數量沒有限制。
如果指定零值,則不會預期回應。但是,如果收到回應且工作階段仍未結束,則會處理回應。
語法 |
proxy_session_drop |
---|---|
預設值 |
proxy_session_drop off; |
上下文 |
stream , server |
此指令出現在 1.15.8 版本。
啟用在代理伺服器從群組移除或標記為永久不可用後,終止與代理伺服器的所有工作階段。這可能是因為重新解析或透過 API DELETE
命令發生。如果伺服器被認為不健康或透過 API PATCH
命令,則可將其標記為永久不可用。當處理客戶端或代理伺服器的下一個讀取或寫入事件時,每個工作階段都會終止。
此指令可作為我們的商業訂閱的一部分。
語法 |
proxy_socket_keepalive |
---|---|
預設值 |
proxy_socket_keepalive off; |
上下文 |
stream , server |
此指令出現在 1.15.6 版本。
設定與代理伺服器連線的「TCP keepalive」行為。依預設,作業系統的設定對套接字有效。如果將此指令設定為「on
」值,則會針對套接字開啟 SO_KEEPALIVE
套接字選項。
語法 |
proxy_ssl |
---|---|
預設值 |
proxy_ssl off; |
上下文 |
stream , server |
啟用與代理伺服器連線的 SSL/TLS 協定。
語法 |
proxy_ssl_certificate |
---|---|
預設值 | — |
上下文 |
stream , server |
指定以 PEM 格式包含憑證的 file
,用於向代理伺服器進行驗證。
自 1.21.0 版起,變數可以用於 file
名稱。
語法 |
proxy_ssl_certificate_key |
---|---|
預設值 | — |
上下文 |
stream , server |
指定以 PEM 格式包含私密金鑰的 file
,用於向代理伺服器進行驗證。
自 1.21.0 版起,變數可以用於 file
名稱。
語法 |
proxy_ssl_ciphers |
---|---|
預設值 |
proxy_ssl_ciphers DEFAULT; |
上下文 |
stream , server |
指定與代理伺服器連線時啟用的密碼。密碼以 OpenSSL 程式庫理解的格式指定。
可以使用「openssl ciphers
」命令檢視完整清單。
語法 |
proxy_ssl_conf_command |
---|---|
預設值 | — |
上下文 |
stream , server |
此指令出現在 1.19.4 版本。
在與代理伺服器建立連線時,設定任意 OpenSSL 設定命令。
當使用 OpenSSL 1.0.2 或更高版本時,支援此指令。
可以在同一層級指定多個 proxy_ssl_conf_command
指令。當且僅當目前層級上未定義 proxy_ssl_conf_command
指令時,這些指令才會從先前的設定層級繼承。
請注意,直接設定 OpenSSL 可能會導致意外行為。
語法 |
proxy_ssl_crl |
---|---|
預設值 | — |
上下文 |
stream , server |
指定以 PEM 格式包含撤銷憑證 (CRL) 的 file
,用於驗證代理伺服器的憑證。
語法 |
proxy_ssl_key_log |
---|---|
預設值 | — |
上下文 |
stream , server |
此指令出現在 1.27.2 版本。
啟用代理伺服器連線 SSL 金鑰的記錄,並指定金鑰記錄檔的路徑。金鑰會以與 Wireshark 相容的 SSLKEYLOGFILE 格式記錄。
此指令可作為我們的商業訂閱的一部分。
語法 |
proxy_ssl_name |
---|---|
預設值 |
proxy_ssl_name host from proxy_pass; |
上下文 |
stream , server |
允許覆寫用於驗證代理伺服器憑證的伺服器名稱,以及在與代理伺服器建立連線時透過 SNI 傳遞的伺服器名稱。也可以使用變數指定伺服器名稱 (1.11.3)。
依預設,會使用 proxy_pass 位址的主機部分。
語法 |
proxy_ssl_password_file |
---|---|
預設值 | — |
上下文 |
stream , server |
指定包含私密金鑰密碼的 file
,其中每個密碼都在單獨一行上指定。載入金鑰時,會依序嘗試密碼。
語法 |
proxy_ssl_protocols [ |
---|---|
預設值 |
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; |
上下文 |
stream , server |
啟用與代理伺服器連線時使用的指定協定。
自 1.23.4 版本起,預設使用 TLSv1.3
參數。
語法 |
proxy_ssl_server_name |
---|---|
預設值 |
proxy_ssl_server_name off; |
上下文 |
stream , server |
啟用或停用在與代理伺服器建立連線時,透過 TLS 伺服器名稱指示擴展 (SNI, RFC 6066) 傳遞伺服器名稱。
語法 |
proxy_ssl_session_reuse |
---|---|
預設值 |
proxy_ssl_session_reuse on; |
上下文 |
stream , server |
決定在與代理伺服器工作時是否可以重複使用 SSL 工作階段。如果日誌中出現錯誤訊息 "SSL3_GET_FINISHED:digest check failed
",請嘗試停用工作階段重複使用。
語法 |
proxy_ssl_trusted_certificate |
---|---|
預設值 | — |
上下文 |
stream , server |
指定一個 file
,其中包含 PEM 格式的受信任 CA 憑證,用於驗證代理伺服器的憑證。
語法 |
proxy_ssl_verify |
---|---|
預設值 |
proxy_ssl_verify off; |
上下文 |
stream , server |
啟用或停用對代理伺服器憑證的驗證。
語法 |
proxy_ssl_verify_depth |
---|---|
預設值 |
proxy_ssl_verify_depth 1; |
上下文 |
stream , server |
設定代理伺服器憑證鏈中的驗證深度。
語法 |
proxy_timeout |
---|---|
預設值 |
proxy_timeout 10m; |
上下文 |
stream , server |
設定用戶端或代理伺服器連線上,兩次連續讀取或寫入操作之間的 timeout
時間。如果在此時間內沒有傳輸任何資料,連線將會關閉。
語法 |
proxy_upload_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;