モジュール 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 では、transparent パラメータが指定されている場合、ワーカープロセスはマスタープロセスから CAP_NET_RAW 機能を受け継ぐため、必須ではありません (1.13.8)。また、プロキシされたサーバーからのネットワークトラフィックをインターセプトするために、カーネルルーティングテーブルを構成する必要があります。

構文 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 は、1秒あたりのバイト数で指定します。ゼロ値を指定すると、レート制限は無効になります。制限は接続ごとに設定されるため、nginx が同時にプロキシされたサーバーへの2つの接続を開く場合、全体的なレートは指定された制限の2倍になります。

パラメータ値には変数を含めることができます (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;
デフォルト
コンテキスト server

プロキシされたサーバーのアドレスを設定します。アドレスは、ドメイン名または 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キープアライブ」の動作を構成します。デフォルトでは、ソケットに対してオペレーティングシステムの構成が有効になります。ディレクティブが値「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

プロキシされたサーバーへの接続に対して、指定されたプロトコルを有効にします。

TLSv1.3 パラメータは、1.23.4 以降デフォルトで使用されます。

構文 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

プロキシされたサーバーの証明書を検証するために使用される、信頼できるCA証明書を含むPEM形式のfileを指定します。

構文 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

クライアントまたはプロキシされたサーバー接続での連続する2つの読み取りまたは書き込み操作間の timeout を設定します。この時間内にデータが送信されない場合、接続は閉じられます。

構文 proxy_upload_rate rate;
デフォルト
proxy_upload_rate 0;
コンテキスト stream, server

このディレクティブはバージョン 1.9.3 で登場しました。

クライアントからのデータの読み取り速度を制限します。rate は、1秒あたりのバイト数で指定します。ゼロ値を指定すると、レート制限は無効になります。制限は接続ごとに設定されるため、クライアントが同時に2つの接続を開く場合、全体的なレートは指定された制限の2倍になります。

パラメータ値には変数を含めることができます (1.17.0)。レートを特定の条件に応じて制限する必要がある場合に役立つ場合があります。

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

proxy_upload_rate $rate;