ngx_stream_core_module モジュール
設定例 ディレクティブ listen preread_buffer_size preread_timeout proxy_protocol_timeout resolver resolver_timeout server stream tcp_nodelay variables_hash_bucket_size variables_hash_max_size 組み込み変数 |
ngx_stream_core_module
モジュールはバージョン1.9.0から利用可能です。このモジュールはデフォルトでビルドされず、--with-stream
configuration パラメータを有効にする必要があります。
設定例
worker_processes auto; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } stream { upstream backend { hash $remote_addr consistent; server backend1.example.com:12345 weight=5; server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; } upstream dns { server 192.168.0.1:53535; server dns.example.com:53; } server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass backend; } server { listen 127.0.0.1:53 udp reuseport; proxy_timeout 20s; proxy_pass dns; } server { listen [::1]:12345; proxy_pass unix:/tmp/stream.socket; } }
ディレクティブ
構文: |
listen
|
---|---|
デフォルト: | - |
コンテキスト: |
server |
サーバが接続を受け取るソケットのaddress
と port
を設定します。portだけを指定することもできます。アドレスはホスト名でも可能です。例えば:
listen 127.0.0.1:12345; listen *:12345; listen 12345; # same as *:12345 listen localhost:12345;
IPv6 アドレスは四角括弧で指定されます:
listen [::1]:12345; listen [::]:12345;
UNIX-domain ソケット は"unix:
"のプリフィックスで指定されます:
listen unix:/var/run/nginx.sock;
ポートの範囲(1.15.10)は、最初と最後のポートをハイフンで区切って指定します:
listen 127.0.0.1:12345-12399; listen 12345-12399;
ssl
パラメータ は、このポートで受け付ける全ての接続がSSLモードで動作しなければならないことを指定することができます。
udp
パラメータはデータグラムと動作するためのlistenソケットを設定します (1.9.13)。同じセッションで同じアドレスとポートからのパケットを処理するには、reuseport
パラメータも指定する必要があります。
proxy_protocol
パラメータ(1.11.4)は、このポートの全ての接続の受付がPROXY protocolを使わなければならないように指定することができます。
PROXY プロトコル バージョン 2はバージョン 1.13.11 からサポートされます。
listen
ディレクティブはソケットに関するシステムコールに特有の幾つかの追加パラメータを指定することができます。
-
fastopen
=number
-
listenソケットのための"TCP Fast Open"(1.21.0)を有効にし、3ウェイハンドシェイクがまだ完了していない接続のキューの最大の長さを制限します。
サーバが same SYN packet with dataの受信を1回以上処理できない場合には、この機能を有効にしないでください。
-
backlog
=number
-
ペンディング接続のキューのための最大長を制限している
listen()
コールの中でbacklog
パラメータを設定します。(1.9.2)デフォルトでは、backlog
はFreeBSD、DragonFly BSD および macOS では -1、その他のプラットフォームでは511に設定されています。 -
rcvbuf
=size
-
listenソケットのための受信バッファサイズ(
SO_RCVBUF
オプション)を設定します (1.11.13)。 -
sndbuf
=size
-
listenソケットのための送信バッファサイズ(
SO_SNDBUF
オプション)を設定します (1.11.13)。 -
bind
-
指定された address:port ペアに個別の
bind()
コールをします。実際のところ、もし複数の同じポートで異なるアドレスのlisten
ディレクティブがあり、listen
ディレクティブ のうちの一つが指定されたポートの全てのアドレス(*:
port
)をlistenしている場合、nginx は*:
port
にだけbind()
するでしょう。この場合接続を受け付けるためのアドレスを決定するために、getsockname()
システムコールがされることに注意しなければなりません。If thebacklog
,rcvbuf
,sndbuf
,ipv6only
,reuseport
, orso_keepalive
parameters are used then for a givenaddress
:port
pair a separatebind()
call will always be made. -
ipv6only
=on
|off
-
このパラメータは(
IPV6_V6ONLY
ソケットオプションを経由して)、ワイルドカードアドレス[::]
でlistenしている IPv6ソケットがIPv6接続だけを受け付けるかIPv6とIPv4接続の両方を受け付けるかどうかを決定します。このパラメータはデフォルトでonです。開始時に一度だけ設定することができます。 -
reuseport
-
このパラメータ(1.9.1)は、カーネルがワーカープロセス間の着信接続を分散できるようにして、ワーカープロセスごとに個別のlistenソケットを再生するように指示します(Linux 3.9+およびDragonFly BSDでは
SO_REUSEPORT
ソケットオプションを使い、FreeBSD 12+ではSO_REUSEPORT_LB
を使います)。これは現在、Linux 3.9+、DragonFly BSD、FreeBSD 12+ (1.15.1)でのみ動作します。このオプションの不適切な使用はセキュリティの巻き添えを持ちます。
-
so_keepalive
=on
|off
|[keepidle
]:[keepintvl
]:[keepcnt
] -
このパラメータはlistenソケットの"TCP keepalive"の挙動を設定します。パラメータが省略されると、オペレーティングシステムの設定がそのソケットに対して有効になります。値が"
on
"に設定されると、SO_KEEPALIVE
オプションがそのソケットに対してonになります。値が"off
"に設定されると、SO_KEEPALIVE
オプションがそのソケットに対してoffになります。幾つかのオペレーティングシステムではTCP_KEEPIDLE
,TCP_KEEPINTVL
とTCP_KEEPCNT
ソケットオプションを使ってソケットごとのTCP keepaliveパラメータの設定をサポートしています。そのようなシステム(現在のところ、Linux 2.4+, NetBSD 5+ と FreeBSD 9.0-STABLE)では、keepidle
,keepintvl
とkeepcnt
パラメータを使って設定することができます。対応するソケットのオプションにシステムのデフォルトの設定が効果を持つ場合に、一つ以上のパラメータが省略されるかも知れません。例えば:
アイドルタイムアウト(so_keepalive=30m::10
TCP_KEEPIDLE
) が30分に設定され、プルーブインターバル (TCP_KEEPINTVL
)はシステムのデフォルトのままになり、プルーブカウント(TCP_KEEPCNT
) は10プルーブに設定されます。
異なるサーバは、異なるaddress
:port
ペアでlistenする必要があります。
構文: |
preread_buffer_size |
---|---|
デフォルト: |
preread_buffer_size 16k; |
コンテキスト: |
stream , server |
このディレクティブはバージョン1.11.5から導入されました。
prereadバッファのsize
を指定します。
構文: |
preread_timeout |
---|---|
デフォルト: |
preread_timeout 30s; |
コンテキスト: |
stream , server |
このディレクティブはバージョン1.11.5から導入されました。
prereadフェーズのtimeout
を指定します。
構文: |
proxy_protocol_timeout |
---|---|
デフォルト: |
proxy_protocol_timeout 30s; |
コンテキスト: |
stream , server |
このディレクティブはバージョン 1.11.4 から導入されました。
PROXYプロトコルヘッダの読み込みが完了するまでのtimeout
を指定します。この時間内にヘッダ全体が転送されない場合は、接続が閉じられます。
構文: |
resolver
|
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
このディレクティブはバージョン1.11.3から導入されました。
upstreamサーバの名前をアドレス解決するために使われるネームサーバを設定します。例えば:
resolver 127.0.0.1 [::1]:5353;
アドレスはドメイン名またはIPアドレス、オプションとしてポートが指定可能です。ポートが指定された場合は、ポート53が使われるでしょう。ラウンドロビンの形式で、ネームサーバが照合されます。
デフォルトでは、nginxは名前解決の時にIPv4とIPv6アドレスの両方を調べるでしょう。IPv4またはIPv6アドレスの調査が望ましいものではない場合、ipv4=off
(1.23.1) またはipv6=off
パラメータを指定することができます。
デフォルトでは、nginxのキャッシュは 応答のTTL値を使って返答します。オプションの valid
パラメータはそれを上書くことができます:
resolver 127.0.0.1 [::1]:5353 valid=30s;
DNSスプーフィングを避けるために、適切に安全な信頼できるローカルネットワーク内のDNSサーバを設定することをお勧めします。
オプションのstatus_zone
パラメータ(1.17.1)は、指定されたゾーン
の要求と応答のDNSサーバ統計のコレクションを有効にします。このパラメータは商用サブスクリプションの一部として利用可能です。
バージョン 1.11.3より前は、このディレクティブは商用許可の一部として利用可能でした。
構文: |
resolver_timeout |
---|---|
デフォルト: |
resolver_timeout 30s; |
コンテキスト: |
stream , server |
このディレクティブはバージョン1.11.3から導入されました。
名前解決のタイムアウトを設定します。例えば:
resolver_timeout 5s;
バージョン 1.11.3より前は、このディレクティブは商用許可の一部として利用可能でした。
構文: |
server { ... } |
---|---|
デフォルト: | - |
コンテキスト: |
stream |
サーバ設定を設定します。
構文: |
stream { ... } |
---|---|
デフォルト: | - |
コンテキスト: |
main |
streamサーバのディレクティブが指定されているコンテキストの設定ファイルを提供します。
構文: |
tcp_nodelay |
---|---|
デフォルト: |
tcp_nodelay on; |
コンテキスト: |
stream , server |
このディレクティブはバージョン1.9.4から導入されました。
TCP_NODELAY
オプションの利用を有効または無効にします。オプションはクライアントとプロキシされたサーバの接続の両方で有効にされます。
構文: |
variables_hash_bucket_size |
---|---|
デフォルト: |
variables_hash_bucket_size 64; |
コンテキスト: |
stream |
このディレクティブはバージョン1.11.2から導入されました。
変数ハッシュテーブルのbucketサイズを設定します。ハッシュテーブルの設定の詳細は別個のドキュメントで提供されています。
構文: |
variables_hash_max_size |
---|---|
デフォルト: |
variables_hash_max_size 1024; |
コンテキスト: |
stream |
このディレクティブはバージョン1.11.2から導入されました。
変数ハッシュテーブルの最大size
を設定します。ハッシュテーブルの設定の詳細は別個の<a0>ドキュメント</a0>で提供されています。
埋め込み変数
1.11.2から、ngx_stream_core_module
モジュールは変数をサポートします。
$binary_remote_addr
- バイナリ形式のクライアントアドレスで、値の長さはIPv4アドレスの場合は常に4バイト、IPv6アドレスの場合は16バイト
$bytes_received
- クライアントから受け取ったバイト数 (1.11.4)
$bytes_sent
- クライアントに往診されたバイト数
$connection
- 接続のシリアルナンバー
$hostname
- ホスト名
$msec
- ミリ秒の精度の現在の秒
$nginx_version
- nginx のバージョン
$pid
- workerプロセスのPID
$protocol
-
クライアントと通信するために使われるプロトコル:
TCP
あるいはUDP
(1.11.4) $proxy_protocol_addr
-
PROXYプロトコルヘッダからのクライアントアドレス(1.11.4)
PROXYプロトコルはlistenディレクティブの
proxy_protocol
パラメータの設定によって前もって有効にされていなければなりません。 $proxy_protocol_port
-
RPOXYプロトコルヘッダからのクライアントポート(1.11.4)
PROXYプロトコルはlistenディレクティブの
proxy_protocol
パラメータの設定によって前もって有効にされていなければなりません。 $proxy_protocol_server_addr
-
PROXYプロトコルヘッダからのサーバアドレス(1.17.6)
PROXYプロトコルはlistenディレクティブの
proxy_protocol
パラメータの設定によって前もって有効にされていなければなりません。 $proxy_protocol_server_port
-
PROXYプロトコルヘッダからのサーバポート(1.17.6)
PROXYプロトコルはlistenディレクティブの
proxy_protocol
パラメータの設定によって前もって有効にされていなければなりません。 $remote_addr
- クライアントのアドレス
$remote_port
- クライアントのポート
$server_addr
-
接続を受け付けたサーバのアドレス
この変数の値の計算は、通常一回のシステムコールを要求します。システムコールを避けるには、listen ディレクティブはアドレスで指定して
bind
パラメータを使う必要があります。 $server_port
- 接続を受け付けたサーバのポート
$session_time
- ミリ秒の精度のセッションの持続秒数 (1.11.4);
状態
-
セッションステータス (1.11.4)。以下のうちの一つ:
200
- セッションが成功裏に完了した
400
- クライアントのデータがパースできなかった。例えば、PROXY protocol ヘッダ
403
- アクセス禁止。例えば、アクセスが特定のクライアントアドレスに制限されている
500
- 内部サーバエラー
502
- bad gateway。例えばもしupstreamサーバが選択できなかったか、到達できなかった場合。
503
- service unavailable。例えば、アクセスが接続の数で制限されている
$time_iso8601
- ISO 8601 標準フォーマットのローカルタイム
$time_local
- Common Log フォーマットのローカルタイム