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 address:port [ssl] [udp] [proxy_protocol] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
デフォルト: -
コンテキスト: server

サーバが接続を受け取るソケットのaddressportを設定します。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 the backlog, rcvbuf, sndbuf, ipv6only, reuseport, or so_keepalive parameters are used then for a given address:port pair a separate bind() 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_KEEPINTVLTCP_KEEPCNT ソケットオプションを使ってソケットごとのTCP keepaliveパラメータの設定をサポートしています。そのようなシステム(現在のところ、Linux 2.4+, NetBSD 5+ と FreeBSD 9.0-STABLE)では、keepidle, keepintvlkeepcnt パラメータを使って設定することができます。対応するソケットのオプションにシステムのデフォルトの設定が効果を持つ場合に、一つ以上のパラメータが省略されるかも知れません。例えば:
so_keepalive=30m::10
アイドルタイムアウト(TCP_KEEPIDLE) が30分に設定され、プルーブインターバル (TCP_KEEPINTVL)はシステムのデフォルトのままになり、プルーブカウント(TCP_KEEPCNT) は10プルーブに設定されます。

異なるサーバは、異なるaddress:port ペアでlistenする必要があります。

構文: preread_buffer_size size;
デフォルト:
preread_buffer_size 16k;
コンテキスト: stream, server

このディレクティブはバージョン1.11.5から導入されました。

prereadバッファのsize を指定します。

構文: preread_timeout timeout;
デフォルト:
preread_timeout 30s;
コンテキスト: stream, server

このディレクティブはバージョン1.11.5から導入されました。

prereadフェーズのtimeout を指定します。

構文: proxy_protocol_timeout timeout;
デフォルト:
proxy_protocol_timeout 30s;
コンテキスト: stream, server

このディレクティブはバージョン 1.11.4 から導入されました。

PROXYプロトコルヘッダの読み込みが完了するまでのtimeout を指定します。この時間内にヘッダ全体が転送されない場合は、接続が閉じられます。

構文: resolver address ... [valid=time] [ipv4=on|off] [ipv6=on|off] [status_zone=zone];
デフォルト: -
コンテキスト: 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 time;
デフォルト:
resolver_timeout 30s;
コンテキスト: stream, server

このディレクティブはバージョン1.11.3から導入されました。

名前解決のタイムアウトを設定します。例えば:

resolver_timeout 5s;

バージョン 1.11.3より前は、このディレクティブは商用許可の一部として利用可能でした。

構文: server { ... }
デフォルト: -
コンテキスト: stream

サーバ設定を設定します。

構文: stream { ... }
デフォルト: -
コンテキスト: main

streamサーバのディレクティブが指定されているコンテキストの設定ファイルを提供します。

構文: tcp_nodelay on | off;
デフォルト:
tcp_nodelay on;
コンテキスト: stream, server

このディレクティブはバージョン1.9.4から導入されました。

TCP_NODELAYオプションの利用を有効または無効にします。オプションはクライアントとプロキシされたサーバの接続の両方で有効にされます。

構文: variables_hash_bucket_size size;
デフォルト:
variables_hash_bucket_size 64;
コンテキスト: stream

このディレクティブはバージョン1.11.2から導入されました。

変数ハッシュテーブルのbucketサイズを設定します。ハッシュテーブルの設定の詳細は別個のドキュメントで提供されています。

構文: variables_hash_max_size 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 フォーマットのローカルタイム

TOP
inserted by FC2 system