モジュール ngx_http_core_module

ディレクティブ
     absolute_redirect
     aio
     aio_write
     alias
     auth_delay
     chunked_transfer_encoding
     client_body_buffer_size
     client_body_in_file_only
     client_body_in_single_buffer
     client_body_temp_path
     client_body_timeout
     client_header_buffer_size
     client_header_timeout
     client_max_body_size
     connection_pool_size
     default_type
     directio
     directio_alignment
     disable_symlinks
     error_page
     etag
     http
     if_modified_since
     ignore_invalid_headers
     internal
     keepalive_disable
     keepalive_requests
     keepalive_time
     keepalive_timeout
     large_client_header_buffers
     limit_except
     limit_rate
     limit_rate_after
     lingering_close
     lingering_time
     lingering_timeout
     listen
     location
     log_not_found
     log_subrequest
     max_ranges
     merge_slashes
     msie_padding
     msie_refresh
     open_file_cache
     open_file_cache_errors
     open_file_cache_min_uses
     open_file_cache_valid
     output_buffers
     port_in_redirect
     postpone_output
     read_ahead
     recursive_error_pages
     request_pool_size
     reset_timedout_connection
     resolver
     resolver_timeout
     root
     satisfy
     send_lowat
     send_timeout
     sendfile
     sendfile_max_chunk
     server
     server_name
     server_name_in_redirect
     server_names_hash_bucket_size
     server_names_hash_max_size
     server_tokens
     subrequest_output_buffer_size
     tcp_nodelay
     tcp_nopush
     try_files
     types
     types_hash_bucket_size
     types_hash_max_size
     underscores_in_headers
     variables_hash_bucket_size
     variables_hash_max_size
埋め込み変数

ディレクティブ

構文 absolute_redirect on | off;
デフォルト
absolute_redirect on;
コンテキスト httpserverlocation

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

無効にすると、nginxによって発行されるリダイレクトは相対的になります。

server_name_in_redirectおよびport_in_redirectディレクティブも参照してください。

構文 aio on | off | threads[=pool];
デフォルト
aio off;
コンテキスト httpserverlocation

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

FreeBSDおよびLinuxで非同期ファイルI/O(AIO)の使用を有効または無効にします。

location /video/ {
    aio            on;
    output_buffers 1 64k;
}

FreeBSDでは、FreeBSD 4.3以降でAIOを使用できます。FreeBSD 11.0より前は、AIOはカーネルに静的にリンクするか、

options VFS_AIO

カーネルロード可能モジュールとして動的にロードできます。

kldload aio

Linuxでは、カーネルバージョン2.6.22以降でAIOを使用できます。directioを有効にする必要があります。そうでない場合、読み込みはブロッキングになります。

location /video/ {
    aio            on;
    directio       512;
    output_buffers 1 128k;
}

Linuxでは、directioは、512バイト境界(またはXFSの場合は4K)にアラインメントされたブロックの読み取りにのみ使用できます。ファイルの非アラインメントされた部分はブロッキングモードで読み取られます。バイト範囲要求とファイルの先頭からのFLV要求にも同じことが当てはまります。ファイルの先頭と末尾の非アラインメントされたデータの読み取りはブロッキングになります。

LinuxでAIOとsendfileの両方が有効になっている場合、directioディレクティブで指定されたサイズ以上のファイルにはAIOが使用され、それより小さいファイルまたはdirectioが無効になっている場合はsendfileが使用されます。

location /video/ {
    sendfile       on;
    aio            on;
    directio       8m;
}

最後に、ファイルをマルチスレッド(1.7.11)を使用して読み書きし、ワーカープロセスをブロックすることなく送信できます。

location /video/ {
    sendfile       on;
    aio            threads;
}

ファイルの読み取りと送信操作は、指定されたプールのスレッドにオフロードされます。プール名が省略された場合は、「default」という名前のプールが使用されます。プール名は変数でも設定できます。

aio threads=pool$disk;

デフォルトでは、マルチスレッディングは無効になっています。--with-threads構成パラメータで有効にする必要があります。現在、マルチスレッディングはepollkqueueeventportメソッドのみと互換性があります。ファイルのマルチスレッド送信はLinuxでのみサポートされています。

sendfileディレクティブも参照してください。

構文 aio_write on | off;
デフォルト
aio_write off;
コンテキスト httpserverlocation

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

aioが有効になっている場合、ファイルの書き込みに使用されるかどうかを指定します。現在、これはaio threadsを使用する場合にのみ機能し、プロキシされたサーバーから受信したデータを含む一時ファイルの書き込みに限定されています。

構文 alias path;
デフォルト
コンテキスト location

指定されたロケーションの置換を定義します。たとえば、次の構成では

location /i/ {
    alias /data/w3/images/;
}

/i/top.gif」のリクエストに対して、ファイル/data/w3/images/top.gifが送信されます。

pathの値には、$document_root$realpath_rootを除く変数を含めることができます。

正規表現で定義されたlocation内でaliasを使用する場合、その正規表現にはキャプチャを含める必要があり、aliasはこれらのキャプチャを参照する必要があります(0.7.40)。たとえば

location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
    alias /data/w3/images/$1;
}

ディレクティブの値の最後の部分とlocationが一致する場合

location /images/ {
    alias /data/w3/images/;
}

rootディレクティブを使用することをお勧めします。

location /images/ {
    root /data/w3;
}

構文 auth_delay time;
デフォルト
auth_delay 0s;
コンテキスト httpserverlocation

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

パスワードサブリクエストの結果、またはJWTによってアクセスが制限されている場合、401応答コードを持つ承認されていないリクエストの処理を遅延させて、タイミング攻撃を防ぎます。

構文 chunked_transfer_encoding on | off;
デフォルト
chunked_transfer_encoding on;
コンテキスト httpserverlocation

HTTP/1.1でチャンク転送エンコーディングの無効化を許可します。標準の要件にもかかわらず、チャンクエンコーディングをサポートできないソフトウェアを使用する場合に役立つ場合があります。

構文 client_body_buffer_size size;
デフォルト
client_body_buffer_size 8k|16k;
コンテキスト httpserverlocation

クライアントリクエストボディの読み取りバッファサイズを設定します。リクエストボディがバッファより大きい場合、ボディ全体または一部が一時ファイルに書き込まれます。デフォルトでは、バッファサイズは2つのメモリページと同じです。x86、その他の32ビットプラットフォーム、およびx86-64では8Kです。通常、その他の64ビットプラットフォームでは16Kです。

構文 client_body_in_file_only on | clean | off;
デフォルト
client_body_in_file_only off;
コンテキスト httpserverlocation

nginxがクライアントリクエストボディ全体をファイルに保存するかどうかを決定します。このディレクティブは、デバッグ中、または$request_body_file変数を使用する場合、またはngx_http_perl_moduleモジュールの$r->request_body_fileメソッドを使用する場合に使用できます。

onに設定すると、リクエスト処理後に一時ファイルは削除されません。

clean値は、リクエスト処理後に残った一時ファイルを削除します。

構文 client_body_in_single_buffer on | off;
デフォルト
client_body_in_single_buffer off;
コンテキスト httpserverlocation

nginxがクライアントリクエストボディ全体を単一のバッファに保存するかどうかを決定します。$request_body変数を使用する場合、関与するコピー操作の数を節約するために、このディレクティブをお勧めします。

構文 client_body_temp_path path [level1 [level2 [level3]]];
デフォルト
client_body_temp_path client_body_temp;
コンテキスト httpserverlocation

クライアントリクエストボディを格納する一時ファイルを格納するためのディレクトリを定義します。指定されたディレクトリの下に、最大3レベルのサブディレクトリ階層を使用できます。たとえば、次の構成では

client_body_temp_path /spool/nginx/client_temp 1 2;

一時ファイルへのパスは次のようになります。

/spool/nginx/client_temp/7/45/00000123457

構文 client_body_timeout time;
デフォルト
client_body_timeout 60s;
コンテキスト httpserverlocation

クライアントリクエストボディの読み取りタイムアウトを定義します。タイムアウトは、2つの連続した読み取り操作の間の期間のみに設定され、リクエストボディ全体の伝送には設定されません。この時間内にクライアントが何も送信しないと、リクエストは408(リクエストタイムアウト)エラーで終了します。

構文 client_header_buffer_size size;
デフォルト
client_header_buffer_size 1k;
コンテキスト httpserver

クライアントリクエストヘッダーの読み取りバッファサイズを設定します。ほとんどのリクエストでは、1Kバイトのバッファで十分です。ただし、リクエストに長いクッキーが含まれている場合、またはWAPクライアントからのものである場合、1Kに収まらない場合があります。リクエスト行またはリクエストヘッダーフィールドがこのバッファに収まらない場合、large_client_header_buffersディレクティブで構成されたより大きなバッファが割り当てられます。

serverレベルでディレクティブが指定されている場合、デフォルトサーバーからの値を使用できます。詳細は、「仮想サーバーの選択」セクションに記載されています。

構文 client_header_timeout time;
デフォルト
client_header_timeout 60s;
コンテキスト httpserver

クライアントリクエストヘッダーの読み取りタイムアウトを定義します。この時間内にクライアントがヘッダー全体を送信しないと、リクエストは408(リクエストタイムアウト)エラーで終了します。

構文 client_max_body_size size;
デフォルト
client_max_body_size 1m;
コンテキスト httpserverlocation

クライアントリクエストボディの最大許容サイズを設定します。リクエストのサイズが構成された値を超えると、413(リクエストエンティティが大きすぎます)エラーがクライアントに返されます。ブラウザはこのエラーを正しく表示できないことに注意してください。sizeを0に設定すると、クライアントリクエストボディサイズのチェックが無効になります。

構文 connection_pool_size size;
デフォルト
connection_pool_size 256|512;
コンテキスト httpserver

接続ごとのメモリ割り当ての正確な調整を可能にします。このディレクティブはパフォーマンスへの影響が最小限であり、一般的には使用しないでください。デフォルトでは、32ビットプラットフォームでは256バイト、64ビットプラットフォームでは512バイトです。

バージョン1.9.8より前は、すべてのプラットフォームでデフォルト値は256でした。

構文 default_type mime-type;
デフォルト
default_type text/plain;
コンテキスト httpserverlocation

応答のデフォルトのMIMEタイプを定義します。ファイル名拡張子のMIMEタイプへのマッピングは、typesディレクティブで設定できます。

構文 directio size | off;
デフォルト
directio off;
コンテキスト httpserverlocation

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

指定されたsize以上のファイルを読み取る際に、O_DIRECTフラグ(FreeBSD、Linux)、F_NOCACHEフラグ(macOS)、またはdirectio()関数(Solaris)の使用を有効にします。このディレクティブは、特定のリクエストに対してsendfileの使用を自動的に無効にします(0.7.15)。大きなファイルを提供する場合

directio 4m;

またはLinuxでaioを使用する場合に役立ちます。

構文 directio_alignment size;
デフォルト
directio_alignment 512;
コンテキスト httpserverlocation

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

directioのアラインメントを設定します。ほとんどの場合、512バイトのアラインメントで十分です。ただし、LinuxでXFSを使用する場合は、4Kに増やす必要があります。

構文 disable_symlinks off;
disable_symlinks on | if_not_owner [from=part];
デフォルト
disable_symlinks off;
コンテキスト httpserverlocation

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

ファイルをオープンする際のシンボリックリンクの処理方法を決定します。

off
パス名のシンボリックリンクは許可され、チェックされません。これがデフォルトの動作です。
on
パス名のコンポーネントがシンボリックリンクである場合、ファイルへのアクセスは拒否されます。
if_not_owner
パス名のコンポーネントがシンボリックリンクであり、リンクとリンクが指すオブジェクトの所有者が異なる場合、ファイルへのアクセスは拒否されます。
from=part
シンボリックリンクのチェック(パラメータonif_not_owner)では、通常、パス名のすべてのコンポーネントがチェックされます。パス名の先頭部分のシンボリックリンクのチェックを回避するには、さらにfrom=partパラメータを指定できます。この場合、シンボリックリンクは、指定された先頭部分の後のパス名コンポーネントからのみチェックされます。値がチェック対象のパス名の先頭部分ではない場合、このパラメータがまったく指定されていないかのように、パス名全体がチェックされます。値がファイル名全体と一致する場合、シンボリックリンクはチェックされません。パラメータ値には変数を指定できます。

disable_symlinks on from=$document_root;

このディレクティブは、openat()fstatat()インターフェースを持つシステムでのみ使用できます。このようなシステムには、FreeBSD、Linux、Solarisの最新バージョンが含まれます。

パラメータonif_not_ownerは、処理オーバーヘッドを追加します。

ディレクトリの検索のみを目的としたオープンをサポートしていないシステムでは、これらのパラメータを使用するには、ワーカープロセスがチェック対象のすべてのディレクトリに対する読み取り権限を持っている必要があります。

ngx_http_autoindex_modulengx_http_random_index_module、およびngx_http_dav_moduleモジュールは、現在このディレクティブを無視します。

構文 error_page code ... [=[response]] uri;
デフォルト
コンテキスト httpserverlocationif in location

指定されたエラーに対して表示されるURIを定義します。uri値には変数を指定できます。

error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;

これにより、クライアントのリクエストメソッドが「GET」に変更され(「GET」と「HEAD」以外のすべてのメソッドの場合)、指定されたuriへの内部リダイレクトが発生します。

さらに、「=response」構文を使用して、レスポンスコードを別のコードに変更することも可能です。例:

error_page 404 =200 /empty.gif;

エラー応答がプロキシサーバーまたはFastCGI/uwsgi/SCGI/gRPCサーバーによって処理され、サーバーが異なる応答コード(例:200、302、401、または404)を返す可能性がある場合、サーバーが返すコードで応答できます。

error_page 404 = /404.php;

内部リダイレクト中にURIとメソッドを変更する必要がない場合は、名前付きロケーションにエラー処理を渡すことができます。

location / {
    error_page 404 = @fallback;
}

location @fallback {
    proxy_pass http://backend;
}

uriの処理でエラーが発生した場合、最後に発生したエラーのステータスコードがクライアントに返されます。

エラー処理には、URLリダイレクトを使用することもできます。

error_page 403      http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;

この場合、デフォルトでは、レスポンスコード302がクライアントに返されます。リダイレクトステータスコード(301、302、303、307、および308)のいずれかにのみ変更できます。

バージョン1.1.16と1.0.13までは、コード307はリダイレクトとして扱われていませんでした。

バージョン1.13.0までは、コード308はリダイレクトとして扱われていませんでした。

これらのディレクティブは、現在のレベルでerror_pageディレクティブが定義されていない場合に限り、前の構成レベルから継承されます。

構文 etag on | off;
デフォルト
etag on;
コンテキスト httpserverlocation

このディレクティブはバージョン1.3.3で追加されました。

静的リソースの「ETag」レスポンスヘッダーフィールドの自動生成を有効または無効にします。

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

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

構文 if_modified_since off | exact | before;
デフォルト
if_modified_since exact;
コンテキスト httpserverlocation

このディレクティブはバージョン0.7.24で追加されました。

レスポンスの変更時刻と「If-Modified-Since」リクエストヘッダーフィールドの時刻の比較方法を指定します。

off
レスポンスは常に変更済みと見なされます (0.7.34);
exact
完全一致;
before
レスポンスの変更時刻が「If-Modified-Since」リクエストヘッダーフィールドの時刻以下である場合。

構文 ignore_invalid_headers on | off;
デフォルト
ignore_invalid_headers on;
コンテキスト httpserver

無効な名前のヘッダーフィールドを無視するかどうかを制御します。有効な名前は、英字、数字、ハイフン、および場合によってはアンダースコア(underscores_in_headersディレクティブで制御)で構成されます。

serverレベルでディレクティブが指定されている場合、デフォルトサーバーからの値を使用できます。詳細は、「仮想サーバーの選択」セクションに記載されています。

構文 internal;
デフォルト
コンテキスト location

指定されたロケーションを内部リクエストのみに使用できることを指定します。外部リクエストの場合、クライアントエラー404(見つかりません)が返されます。内部リクエストとは、以下のリクエストです。

error_page 404 /404.html;

location = /404.html {
    internal;
}

不正な構成で発生する可能性のあるリクエスト処理サイクルを防ぐために、リクエストごとに10回の内部リダイレクトの制限があります。この制限に達すると、エラー500(内部サーバーエラー)が返されます。このような場合、「rewriteまたは内部リダイレクションサイクル」というメッセージがエラーログに表示されることがあります。

構文 keepalive_disable none | browser ...;
デフォルト
keepalive_disable msie6;
コンテキスト httpserverlocation

動作不良のブラウザとのキープアライブ接続を無効にします。browserパラメータは、影響を受けるブラウザを指定します。値msie6は、POSTリクエストを受信した後に、古いバージョンのMSIEとのキープアライブ接続を無効にします。値safariは、macOSおよびmacOSライクなオペレーティングシステム上のSafariおよびSafariライクなブラウザとのキープアライブ接続を無効にします。値noneは、すべてのブラウザとのキープアライブ接続を有効にします。

バージョン1.1.18より前では、値safariはすべてのオペレーティングシステム上のすべてのSafariおよびSafariライクなブラウザに一致し、それらとのキープアライブ接続はデフォルトで無効になっていました。

構文 keepalive_requests number;
デフォルト
keepalive_requests 1000;
コンテキスト httpserverlocation

このディレクティブはバージョン0.8.0で追加されました。

1つのキープアライブ接続で処理できるリクエストの最大数を設定します。最大リクエスト数に達すると、接続が閉じられます。

接続を定期的に閉じることで、接続ごとのメモリ割り当てを解放する必要があります。したがって、リクエストの最大数を高すぎると、過剰なメモリ使用量につながる可能性があり、推奨されません。

バージョン1.19.10より前では、デフォルト値は100でした。

構文 keepalive_time time;
デフォルト
keepalive_time 1h;
コンテキスト httpserverlocation

このディレクティブはバージョン1.19.10で追加されました。

1つのキープアライブ接続を通じてリクエストを処理できる最大時間を制限します。この時間に達すると、後続のリクエスト処理後に接続が閉じられます。

構文 keepalive_timeout timeout [header_timeout];
デフォルト
keepalive_timeout 75s;
コンテキスト httpserverlocation

最初のタイムアウトパラメータは、キープアライブクライアント接続がサーバー側で開いたままになる時間を設定します。値が0の場合、キープアライブクライアント接続は無効になります。オプションの2番目のパラメータは、「Keep-Alive: timeout=time」レスポンスヘッダーフィールドの値を設定します。2つのパラメータは異なる場合があります。

「Keep-Alive: timeout=time」ヘッダーフィールドは、MozillaとKonquerorで認識されます。MSIEは、約60秒でキープアライブ接続を自分で閉じます。

構文 large_client_header_buffers number size;
デフォルト
large_client_header_buffers 4 8k;
コンテキスト httpserver

大きなクライアントリクエストヘッダーの読み取りに使用されるバッファの最大numbersizeを設定します。リクエスト行は1つのバッファのサイズを超えることはできません。そうでない場合、414(Request-URI Too Large)エラーがクライアントに返されます。リクエストヘッダーフィールドも1つのバッファのサイズを超えることはできません。そうでない場合、400(Bad Request)エラーがクライアントに返されます。バッファはオンデマンドで割り当てられます。デフォルトでは、バッファサイズは8KBです。リクエスト処理の終了後に接続がキープアライブ状態に移行すると、これらのバッファは解放されます。

serverレベルでディレクティブが指定されている場合、デフォルトサーバーからの値を使用できます。詳細は、「仮想サーバーの選択」セクションに記載されています。

構文 limit_except method ... { ... }
デフォルト
コンテキスト location

ロケーション内で許可されるHTTPメソッドを制限します。methodパラメータは、GETHEADPOSTPUTDELETEMKCOLCOPYMOVEOPTIONSPROPFINDPROPPATCHLOCKUNLOCK、またはPATCHのいずれかになります。GETメソッドを許可すると、HEADメソッドも許可されます。ngx_http_access_modulengx_http_auth_basic_module、およびngx_http_auth_jwt_module (1.13.10) モジュールのディレクティブを使用して、他のメソッドへのアクセスを制限できます。

limit_except GET {
    allow 192.168.1.0/32;
    deny  all;
}

これは、GETとHEAD以外のすべてのメソッドへのアクセスを制限することに注意してください。

構文 limit_rate rate;
デフォルト
limit_rate 0;
コンテキスト httpserverlocationif in location

クライアントへのレスポンス送信の速度を制限します。rateは、秒あたりのバイト数で指定されます。値が0の場合、レート制限は無効になります。制限はリクエストごとに設定されるため、クライアントが同時に2つの接続を開くと、全体のレートは指定された制限の2倍になります。

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

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

limit_rate $rate;

$limit_rate変数でもレート制限を設定できますが、バージョン1.17.0以降、この方法は推奨されません。

server {

    if ($slow) {
        set $limit_rate 4k;
    }

    ...
}

プロキシサーバーのレスポンスの「X-Accel-Limit-Rate」ヘッダーフィールドでもレート制限を設定できます。この機能は、proxy_ignore_headersfastcgi_ignore_headersuwsgi_ignore_headers、およびscgi_ignore_headersディレクティブを使用して無効にできます。

構文 limit_rate_after size;
デフォルト
limit_rate_after 0;
コンテキスト httpserverlocationif in location

このディレクティブはバージョン0.8.0で追加されました。

クライアントへのレスポンスのさらなる送信がレート制限される前の初期量を設定します。パラメータ値には変数を指定できます(1.17.0)。

location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}

構文 lingering_close off | on | always;
デフォルト
lingering_close on;
コンテキスト httpserverlocation

このディレクティブは、バージョン1.1.0と1.0.6で追加されました。

nginxがクライアント接続を閉じる方法を制御します。

デフォルト値の「on」は、nginxに待機して処理を指示します。クライアントがさらにデータを送信する可能性があることをヒューリスティックが示唆する場合のみ、クライアントからの追加データ。

値「always」は、nginxに無条件に追加のクライアントデータの待機と処理を強制します。

値「off」は、nginxにさらにデータの待機をせずに接続をすぐに閉じるように指示します。この動作はプロトコルを破るため、通常の状況下では使用しないでください。

HTTP/2接続の閉じ方を制御するには、serverレベルでディレクティブを指定する必要があります(1.19.1)。

構文 lingering_time 時間;
デフォルト
lingering_time 30s;
コンテキスト httpserverlocation

lingering_close が有効な場合、このディレクティブはnginxがクライアントから送られてくる追加データの処理(読み込みと無視)を行う最大時間を指定します。この時間経過後、たとえさらにデータが残っていても接続は閉じられます。

構文 lingering_timeout 時間;
デフォルト
lingering_timeout 5s;
コンテキスト httpserverlocation

lingering_close が有効な場合、このディレクティブはクライアントからのデータの到着を待機する最大時間を指定します。この時間内にデータが受信されなければ、接続は閉じられます。そうでなければ、データは読み込まれて無視され、nginxはさらにデータの到着を待ち始めます。「待機-読み込み-無視」のサイクルが繰り返されますが、lingering_time ディレクティブで指定された時間以内です。

構文 listen アドレス[:ポート] [default_server] [ssl] [http2 | quic] [proxy_protocol] [setfib=番号] [fastopen=番号] [backlog=番号] [rcvbuf=サイズ] [sndbuf=サイズ] [accept_filter=フィルタ] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen ポート [default_server] [ssl] [http2 | quic] [proxy_protocol] [setfib=番号] [fastopen=番号] [backlog=番号] [rcvbuf=サイズ] [sndbuf=サイズ] [accept_filter=フィルタ] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen unix:パス [default_server] [ssl] [http2 | quic] [proxy_protocol] [backlog=番号] [rcvbuf=サイズ] [sndbuf=サイズ] [accept_filter=フィルタ] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
デフォルト
listen *:80 | *:8000;
コンテキスト server

サーバーがリクエストを受け付けるIPアドレスとポート、またはUNIXドメインソケットのパスを設定します。アドレスとポートの両方、またはアドレスのみ、またはポートのみを指定できます。アドレスにはホスト名も指定できます。例えば

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

IPv6アドレス (0.7.36) は角括弧で囲んで指定します。

listen [::]:8000;
listen [::1];

UNIXドメインソケット (0.8.21) は「unix:」プレフィックスを付けて指定します。

listen unix:/var/run/nginx.sock;

アドレスのみが指定されている場合、ポート80が使用されます。

このディレクティブが存在しない場合、nginxがスーパーユーザー権限で実行されている場合は*:80が、そうでない場合は*:8000が使用されます。

default_serverパラメータが存在する場合、そのサーバーは指定されたアドレス:ポートペアのデフォルトサーバーになります。どのディレクティブにもdefault_serverパラメータがない場合、アドレス:ポートペアを持つ最初のサーバーがこのペアのデフォルトサーバーになります。

0.8.21以前のバージョンでは、このパラメータは単にdefaultと呼ばれていました。

sslパラメータ (0.7.14) は、このポートで受け付けられるすべての接続がSSLモードで動作することを指定できます。これにより、HTTPとHTTPSのリクエストの両方を処理するサーバーのよりコンパクトな設定が可能になります。

http2パラメータ (1.9.5) は、ポートがHTTP/2接続を受け付けるように設定します。通常、これが機能するためにはsslパラメータも指定する必要がありますが、nginxはSSLなしでHTTP/2接続を受け付けるように設定することもできます。

このパラメータは非推奨です。http2ディレクティブを使用する必要があります。

quicパラメータ (1.25.0) は、ポートがQUIC接続を受け付けるように設定します。

proxy_protocolパラメータ (1.5.12) は、このポートで受け付けられるすべての接続がPROXYプロトコルを使用することを指定できます。

PROXYプロトコルバージョン2はバージョン1.13.11以降でサポートされています。

listenディレクティブには、ソケット関連のシステムコールに固有の追加パラメータがいくつかあります。これらのパラメータは任意のlistenディレクティブで指定できますが、特定のアドレス:ポートペアに対しては一度だけ指定できます。

0.8.21以前のバージョンでは、defaultパラメータと共にlistenディレクティブにのみ指定できました。

setfib=番号
このパラメータ (0.8.44) は、リスニングソケットの関連付けられたルーティングテーブル、FIB (SO_SETFIBオプション) を設定します。これは現在、FreeBSDでのみ機能します。
fastopen=番号
リスニングソケットに対して「TCP Fast Open」を有効にし(1.5.8)、まだ3ウェイハンドシェイクを完了していない接続のキューの最大長を制限します。
サーバーが同じSYNパケットをデータと共に複数回受信できる場合を除き、この機能を有効にしないでください。
backlog=番号
保留中の接続のキューの最大長を制限するlisten()呼び出しにおけるbacklogパラメータを設定します。デフォルトでは、backlogはFreeBSD、DragonFly BSD、macOSでは-1に、その他のプラットフォームでは511に設定されます。
rcvbuf=サイズ
リスニングソケットの受信バッファサイズ (SO_RCVBUFオプション) を設定します。
sndbuf=サイズ
リスニングソケットの送信バッファサイズ (SO_SNDBUFオプション) を設定します。
accept_filter=フィルタ
accept()に渡す前に着信接続をフィルタリングするリスニングソケットのアクセプタフィルタの名前 (SO_ACCEPTFILTERオプション) を設定します。これはFreeBSDとNetBSD 5.0以降でのみ機能します。可能な値はdatareadyhttpreadyです。
deferred
Linuxで遅延accept() (TCP_DEFER_ACCEPTソケットオプション) を使用するように指示します。
bind
特定のアドレス:ポートペアに対して個別のbind()呼び出しを行うように指示します。これは、同じポートだがアドレスが異なる複数のlistenディレクティブがあり、そのうちの1つのlistenディレクティブが指定されたポートのすべてのアドレスをリッスンしている場合(*:ポート)に役立ちます。nginxは*:ポートのみにbind()します。この場合、接続を受け付けたアドレスを特定するためにgetsockname()システムコールが行われることに注意してください。setfibfastopenbacklogrcvbufsndbufaccept_filterdeferredipv6onlyreuseport、またはso_keepaliveパラメータが使用されている場合、特定のアドレス:ポートペアに対しては常に個別のbind()呼び出しが行われます。
ipv6only=on|off
このパラメータ (0.7.42) は(IPV6_V6ONLYソケットオプションを介して) ワイルドカードアドレス[::]をリッスンしているIPv6ソケットがIPv6接続のみを受け入れるか、IPv6とIPv4の両方の接続を受け入れるかを決定します。このパラメータはデフォルトでオンになっています。起動時に一度だけ設定できます。
バージョン1.3.4以前では、このパラメータが省略された場合、ソケットに対してオペレーティングシステムの設定が有効になっていました。
reuseport
このパラメータ (1.9.1) は、各ワーカープロセスに対して個々のリスニングソケットを作成するよう指示します(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]
このパラメータ (1.1.11) は、リスニングソケットの「TCP keepalive」動作を設定します。このパラメータが省略された場合、ソケットに対してオペレーティングシステムの設定が有効になります。「on」に設定されている場合、ソケットに対してSO_KEEPALIVEオプションがオンになります。「off」に設定されている場合、ソケットに対してSO_KEEPALIVEオプションがオフになります。一部のオペレーティングシステムでは、TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNTソケットオプションを使用して、ソケットごとにTCP keepaliveパラメータを設定できます。そのようなシステム(現在、Linux 2.4+、NetBSD 5+、FreeBSD 9.0-STABLE)では、keepidlekeepintvlkeepcntパラメータを使用して設定できます。1つまたは2つのパラメータを省略できます。その場合、対応するソケットオプションのシステムデフォルト設定が有効になります。例えば、
so_keepalive=30m::10
アイドルタイムアウト(TCP_KEEPIDLE)を30分に設定し、プローブ間隔(TCP_KEEPINTVL)をシステムデフォルトのままにし、プローブ回数(TCP_KEEPCNT)を10プローブに設定します。

listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;

構文 location [ = | ~ | ~* | ^~ ] uri { ... }
location @名前 { ... }
デフォルト
コンテキスト serverlocation

リクエストURIに応じて設定を設定します。

マッチングは正規化されたURIに対して実行されます。「%XX」形式でエンコードされたテキストのデコード、相対パスコンポーネント「.」と「..」への参照の解決、および隣接する2つ以上のスラッシュを1つのスラッシュに圧縮することが含まれます。

locationは、プレフィックス文字列、または正規表現によって定義できます。正規表現は、先行する「~*」修飾子(大文字と小文字を区別しないマッチングの場合)、または「~」修飾子(大文字と小文字を区別するマッチングの場合)で指定されます。与えられたリクエストに一致するlocationを見つけるために、nginxは最初にプレフィックス文字列を使用して定義されたlocation(プレフィックスlocation)をチェックします。その中で、最も長い一致するプレフィックスを持つlocationが選択され、記憶されます。次に、設定ファイルに出現する順序で正規表現がチェックされます。正規表現の検索は最初のマッチで終了し、対応する設定が使用されます。正規表現とのマッチが見つからない場合は、以前に記憶されたプレフィックスlocationの設定が使用されます。

locationブロックは、以下に記載されている例外を除いてネストできます。

macOSやCygwinなどの大文字と小文字を区別しないオペレーティングシステムでは、プレフィックス文字列によるマッチングは大文字と小文字を区別しません(0.7.7)。ただし、比較は1バイトロケールに限定されます。

正規表現にはキャプチャを含めることができ(0.7.40)、後で他のディレクティブで使用できます。

最も長い一致するプレフィックスlocationに「^~」修飾子が付いている場合、正規表現はチェックされません。

また、「=」修飾子を使用すると、URIとlocationの完全一致を定義できます。完全一致が見つかった場合、検索は終了します。例えば、「/」リクエストがよく発生する場合、「location = /」を定義すると、これらのリクエストの処理速度が向上します。最初の比較の後すぐに検索が終了するためです。このようなlocationには、明らかにネストされたlocationを含めることはできません。

0.7.1から0.8.41までのバージョンでは、「=」と「^~」の修飾子がないプレフィックスlocationにリクエストが一致した場合も、検索は終了し、正規表現はチェックされませんでした。

上記の例を説明します。

location = / {
    [ configuration A ]
}

location / {
    [ configuration B ]
}

location /documents/ {
    [ configuration C ]
}

location ^~ /images/ {
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
    [ configuration E ]
}

/」リクエストは設定Aに一致し、「/index.html」リクエストは設定Bに一致し、「/documents/document.html」リクエストは設定Cに一致し、「/images/1.gif」リクエストは設定Dに一致し、「/documents/1.jpg」リクエストは設定Eに一致します。

@」プレフィックスは、名前付きlocationを定義します。このようなlocationは通常の請求処理には使用されず、代わりに請求のリダイレクトに使用されます。ネストすることはできず、ネストされたlocationを含めることはできません。

位置がスラッシュ文字で終わるプレフィックス文字列で定義されており、リクエストがproxy_passfastcgi_passuwsgi_passscgi_passmemcached_pass、またはgrpc_passのいずれかによって処理される場合、特別な処理が実行されます。この文字列と等しいURIを持つリクエストに対して、末尾のスラッシュがない場合、スラッシュを追加したリクエストURIにコード301の恒久的なリダイレクトが返されます。これが望ましくない場合は、URIとlocationの完全一致を次のように定義できます。

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

構文 log_not_found on | off;
デフォルト
log_not_found on;
コンテキスト httpserverlocation

error_logへのファイルが見つからないというエラーのログ記録を有効または無効にします。

構文 log_subrequest on | off;
デフォルト
log_subrequest off;
コンテキスト httpserverlocation

access_logへのサブリクエストのログ記録を有効または無効にします。

構文 max_ranges 数値;
デフォルト
コンテキスト httpserverlocation

このディレクティブはバージョン1.1.2で追加されました。

バイト範囲リクエストにおける許容される最大範囲数を制限します。制限を超えるリクエストは、バイト範囲が指定されていないものとして処理されます。デフォルトでは、範囲数に制限はありません。値をゼロにすると、バイト範囲のサポートが完全に無効になります。

構文 merge_slashes on | off;
デフォルト
merge_slashes on;
コンテキスト httpserver

URI内の2つ以上隣接するスラッシュを1つのスラッシュに圧縮する処理を有効または無効にします。

この圧縮は、プレフィックス文字列と正規表現の位置の正しい照合に不可欠です。圧縮しないと、「//scripts/one.php」リクエストは

location /scripts/ {
    ...
}

一致せず、静的ファイルとして処理される可能性があります。そのため、「/scripts/one.php」に変換されます。

URIにbase64でエンコードされた名前が含まれている場合、base64は内部的に「/」文字を使用するため、圧縮をoffにする必要がある場合があります。ただし、セキュリティ上の理由から、圧縮をオフにすることは避けた方が良いでしょう。

serverレベルでディレクティブが指定されている場合、デフォルトサーバーからの値を使用できます。詳細は、「仮想サーバーの選択」セクションに記載されています。

構文 msie_padding on | off;
デフォルト
msie_padding on;
コンテキスト httpserverlocation

ステータスが400を超えるMSIEクライアントへのレスポンスにコメントを追加し、レスポンスサイズを512バイトに増やす処理を有効または無効にします。

構文 msie_refresh on | off;
デフォルト
msie_refresh off;
コンテキスト httpserverlocation

MSIEクライアントに対してリダイレクトではなくリフレッシュを発行する処理を有効または無効にします。

構文 open_file_cache off;
open_file_cache max=N [inactive=時間];
デフォルト
open_file_cache off;
コンテキスト httpserverlocation

以下の情報を格納できるキャッシュを設定します。

このディレクティブには、以下のパラメータがあります。

max
キャッシュ内の要素の最大数を設定します。キャッシュオーバーフローが発生すると、最後に使用された(LRU)要素が削除されます。
inactive
この時間内にアクセスされていない場合、要素をキャッシュから削除するまでの時間を定義します。デフォルトは60秒です。
off
キャッシュを無効にします。

open_file_cache          max=1000 inactive=20s;
open_file_cache_valid    30s;
open_file_cache_min_uses 2;
open_file_cache_errors   on;

構文 open_file_cache_errors on | off;
デフォルト
open_file_cache_errors off;
コンテキスト httpserverlocation

open_file_cacheによるファイル検索エラーのキャッシュを有効または無効にします。

構文 open_file_cache_min_uses 数値;
デフォルト
open_file_cache_min_uses 1;
コンテキスト httpserverlocation

open_file_cacheディレクティブのinactiveパラメータで設定された期間中に、ファイルディスクリプタをキャッシュに開いたままにするために必要なファイルアクセスの最小数値を設定します。

構文 open_file_cache_valid 時間;
デフォルト
open_file_cache_valid 60s;
コンテキスト httpserverlocation

open_file_cache要素を検証するまでの時間を設定します。

構文 output_buffers 数値 サイズ;
デフォルト
output_buffers 2 32k;
コンテキスト httpserverlocation

ディスクからレスポンスを読み取るために使用されるバッファの数値サイズを設定します。

バージョン1.9.5より前は、デフォルト値は1 32kでした。

構文 port_in_redirect on | off;
デフォルト
port_in_redirect on;
コンテキスト httpserverlocation

nginxによって発行される絶対リダイレクトでポートを指定するかどうかを有効または無効にします。

リダイレクトにおけるプライマリサーバ名の使用は、server_name_in_redirectディレクティブによって制御されます。

構文 postpone_output サイズ;
デフォルト
postpone_output 1460;
コンテキスト httpserverlocation

可能であれば、nginxが少なくともサイズバイトのデータを送信するまで、クライアントデータの送信を延期します。値をゼロにすると、データ送信の延期が無効になります。

構文 read_ahead サイズ;
デフォルト
read_ahead 0;
コンテキスト httpserverlocation

ファイル操作時のカーネルによる事前読み込み量を設定します。

Linuxでは、posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)システムコールが使用されるため、サイズパラメータは無視されます。

FreeBSDでは、FreeBSD 9.0-CURRENT以降でサポートされているfcntl(O_READAHEAD, サイズ)システムコールが使用されます。FreeBSD 7はパッチを適用する必要があります。

構文 recursive_error_pages on | off;
デフォルト
recursive_error_pages off;
コンテキスト httpserverlocation

error_pageディレクティブを使用した複数リダイレクトの実行を有効または無効にします。このようなリダイレクトの数は制限されています。

構文 request_pool_size サイズ;
デフォルト
request_pool_size 4k;
コンテキスト httpserver

リクエストごとのメモリ割り当ての正確な調整を可能にします。このディレクティブはパフォーマンスへの影響が最小限であるため、一般的には使用すべきではありません。

構文 reset_timedout_connection on | off;
デフォルト
reset_timedout_connection off;
コンテキスト httpserverlocation

タイムアウトした接続と、非標準コード444(1.15.2)で閉じられた接続のリセットを有効または無効にします。リセットは次のように実行されます。ソケットを閉じる前に、タイムアウト値0でSO_LINGERオプションが設定されます。ソケットが閉じられると、TCP RSTがクライアントに送信され、このソケットによって占有されているすべてのメモリが解放されます。これにより、既に閉じられたソケットが、バッファがいっぱいになったFIN_WAIT1状態で長時間保持されるのを防ぐのに役立ちます。

タイムアウトしたキープアライブ接続は、通常どおり閉じられることに注意してください。

構文 resolver アドレス ... [valid=時間] [ipv4=on|off] [ipv6=on|off] [status_zone=ゾーン];
デフォルト
コンテキスト httpserverlocation

例として、アップストリームサーバのネームをアドレスに解決するために使用されるネームサーバを設定します。

resolver 127.0.0.1 [::1]:5353;

アドレスは、ドメイン名またはIPアドレスとして指定でき、オプションでポート(1.3.1、1.2.2)を指定できます。ポートを指定しない場合、ポート53が使用されます。ネームサーバはラウンドロビン方式でクエリされます。

バージョン1.1.7より前は、1つのネームサーバしか設定できませんでした。IPv6アドレスを使用してネームサーバを指定することは、バージョン1.3.1と1.2.2以降でサポートされています。

デフォルトでは、nginxは解決時にIPv4とIPv6の両方のアドレスを検索します。IPv4またはIPv6アドレスの検索が不要な場合は、ipv4=off(1.23.1)またはipv6=offパラメータを指定できます。

IPv6アドレスへの名前の解決は、バージョン1.5.8以降でサポートされています。

デフォルトでは、nginxはレスポンスのTTL値を使用して回答をキャッシュします。オプションのvalidパラメータを使用すると、それを上書きできます。

resolver 127.0.0.1 [::1]:5353 valid=30s;

バージョン1.1.9より前は、キャッシュ時間の調整は不可能で、nginxは常に5分間回答をキャッシュしていました。

DNSスプーフィングを防ぐには、適切に保護された信頼できるローカルネットワークでDNSサーバを設定することをお勧めします。

オプションのstatus_zoneパラメータ(1.17.1)は、指定されたゾーンのリクエストとレスポンスのDNSサーバ統計の収集を有効にします。このパラメータは、当社の商用サブスクリプションの一部として利用できます。

構文 resolver_timeout 時間;
デフォルト
resolver_timeout 30s;
コンテキスト httpserverlocation

例として、名前解決のタイムアウトを設定します。

resolver_timeout 5s;

構文 root パス;
デフォルト
root html;
コンテキスト httpserverlocationif in location

リクエストのルートディレクトリを設定します。たとえば、次の設定では

location /i/ {
    root /data/w3;
}

/i/top.gif」リクエストに対するレスポンスとして、/data/w3/i/top.gifファイルが送信されます。

pathの値には、$document_root$realpath_rootを除く変数を含めることができます。

ファイルへのパスは、URIをrootディレクティブの値に追加するだけで構成されます。URIを変更する必要がある場合は、aliasディレクティブを使用する必要があります。

構文 satisfy all | any;
デフォルト
satisfy all;
コンテキスト httpserverlocation

ngx_http_access_modulengx_http_auth_basic_modulengx_http_auth_request_module、またはngx_http_auth_jwt_moduleモジュールのすべて(all)または少なくとも1つ(any)がアクセスを許可する場合にアクセスを許可します。

location / {
    satisfy any;

    allow 192.168.1.0/32;
    deny  all;

    auth_basic           "closed site";
    auth_basic_user_file conf/htpasswd;
}

構文 send_lowat サイズ;
デフォルト
send_lowat 0;
コンテキスト httpserverlocation

このディレクティブがゼロ以外の値に設定されている場合、nginxはkqueueメソッドのNOTE_LOWATフラグまたはSO_SNDLOWATソケットオプションを使用して、クライアントソケットへの送信操作の数を最小限に抑えようとします。どちらの場合も、指定されたサイズが使用されます。

このディレクティブは、Linux、Solaris、およびWindowsでは無視されます。

構文 send_timeout 時間;
デフォルト
send_timeout 60s;
コンテキスト httpserverlocation

クライアントへのレスポンスの送信のタイムアウトを設定します。タイムアウトは、2つの連続した書き込み操作の間でのみ設定され、レスポンス全体の送信に対しては設定されません。この時間内にクライアントが何も受信しなかった場合、接続は閉じられます。

構文 sendfile on | off;
デフォルト
sendfile off;
コンテキスト httpserverlocationif in location

sendfile()の使用を有効または無効にします。

nginx 0.8.12とFreeBSD 5.2.1以降では、sendfile()のデータの事前ロードにaioを使用できます。

location /video/ {
    sendfile       on;
    tcp_nopush     on;
    aio            on;
}

この設定では、sendfile()SF_NODISKIOフラグを使用して呼び出され、ディスクI/Oでブロックされなくなりますが、代わりにデータがメモリにないことを報告します。その後、nginxは1バイトを読み取ることで非同期データロードを開始します。最初の読み取り時に、FreeBSDカーネルはファイルの先頭128KBをメモリにロードしますが、次の読み取りでは16KB単位でデータがロードされます。これは、read_aheadディレクティブを使用して変更できます。

バージョン1.7.11より前は、aio sendfile;で事前ロードを有効にすることができました。

構文 sendfile_max_chunk サイズ;
デフォルト
sendfile_max_chunk 2m;
コンテキスト httpserverlocation

1回のsendfile()呼び出しで転送できるデータ量を制限します。制限がないと、1つの高速な接続がワーカープロセス全体を占有する可能性があります。

バージョン1.21.4より前は、デフォルトで制限はありませんでした。

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

仮想サーバの設定を設定します。IPベース(IPアドレスに基づく)と名前ベース(「Host」リクエストヘッダーフィールドに基づく)の仮想サーバには明確な区別がありません。代わりに、listenディレクティブは、サーバへの接続を受け入れるすべてのアドレスとポートを記述し、server_nameディレクティブはすべてのサーバ名を一覧表示します。「nginxがリクエストを処理する方法」ドキュメントには、設定例が記載されています。

構文 server_name 名前 ...;
デフォルト
server_name "";
コンテキスト server

例として、仮想サーバの名前を設定します。

server {
    server_name example.com www.example.com;
}

最初の名前がプライマリサーバ名になります。

サーバ名には、名前の先頭または末尾の部分を置き換えるアスタリスク(「*」)を含めることができます。

server {
    server_name example.com *.example.com www.example.*;
}

このような名前は、ワイルドカード名と呼ばれます。

上記の名前の最初の2つは、1つにまとめることができます。

server {
    server_name .example.com;
}

サーバ名には、名前の前にチルダ(「~」)を付けることで正規表現を使用することもできます。

server {
    server_name www.example.com ~^www\d+\.example\.com$;
}

正規表現には、後で他のディレクティブで使用できるキャプチャ(0.7.40)を含めることができます。

server {
    server_name ~^(www\.)?(.+)$;

    location / {
        root /sites/$2;
    }
}

server {
    server_name _;

    location / {
        root /sites/default;
    }
}

正規表現の名前付きキャプチャは、後で他のディレクティブで使用できる変数(0.8.25)を作成します。

server {
    server_name ~^(www\.)?(?<domain>.+)$;

    location / {
        root /sites/$domain;
    }
}

server {
    server_name _;

    location / {
        root /sites/default;
    }
}

ディレクティブのパラメータが「$hostname」(0.9.4)に設定されている場合、マシンのホスト名が挿入されます。

空のサーバ名を指定することもできます(0.7.11)。

server {
    server_name www.example.com "";
}

これにより、このサーバは—デフォルトのサーバではなく—指定されたアドレス:ポートペアに対して、「Host」ヘッダーフィールドなしのリクエストを処理できます。これはデフォルトの設定です。

0.8.48より前は、マシンのホスト名がデフォルトで使用されていました。

名前で仮想サーバーを検索する場合、名前が複数の指定されたバリアントに一致する場合(例:ワイルドカード名と正規表現の両方に一致する場合)、以下の優先順位で最初に一致したバリアントが選択されます。

  1. 完全一致の名前
  2. アスタリスクで始まる最長のワイルドカード名(例:「*.example.com」)
  3. アスタリスクで終わる最長のワイルドカード名(例:「mail.*」)
  4. 最初に一致した正規表現(設定ファイルでの出現順)

サーバー名の詳細な説明は、別途用意されているサーバー名ドキュメントに記載されています。

構文 server_name_in_redirect on | off;
デフォルト
server_name_in_redirect off;
コンテキスト httpserverlocation

nginxによって発行される絶対リダイレクトにおいて、server_nameディレクティブで指定されたプライマリサーバー名の使用を有効または無効にします。プライマリサーバー名の使用が無効になっている場合、「Host」リクエストヘッダーフィールドからの名前が使用されます。このフィールドが存在しない場合は、サーバーのIPアドレスが使用されます。

リダイレクトにおけるポートの使用は、port_in_redirectディレクティブによって制御されます。

構文 server_names_hash_bucket_size size;
デフォルト
server_names_hash_bucket_size 32|64|128;
コンテキスト http

サーバー名ハッシュテーブルのバケットサイズを設定します。デフォルト値はプロセッサのキャッシュラインサイズによって異なります。ハッシュテーブルの設定に関する詳細は、別途用意されているドキュメントを参照してください。

構文 server_names_hash_max_size size;
デフォルト
server_names_hash_max_size 512;
コンテキスト http

サーバー名ハッシュテーブルの最大sizeを設定します。ハッシュテーブルの設定に関する詳細は、別途用意されているドキュメントを参照してください。

構文 server_tokens on | off | build | string;
デフォルト
server_tokens on;
コンテキスト httpserverlocation

エラーページおよび「Server」レスポンスヘッダーフィールドでのnginxバージョンの出力の有効化または無効化を行います。

buildパラメーター(1.11.10)は、nginxバージョンとともにビルド名を出力します。

さらに、バージョン1.9.13以降の商用サブスクリプションの一部として、エラーページと「Server」レスポンスヘッダーフィールドの値を、変数を使用したstringで明示的に設定できます。「Server」フィールドの出力は無効にするには、空文字列を使用します。

構文 subrequest_output_buffer_size size;
デフォルト
subrequest_output_buffer_size 4k|8k;
コンテキスト httpserverlocation

このディレクティブはバージョン1.13.10で追加されました。

サブリクエストのレスポンスボディを格納するために使用されるバッファのsizeを設定します。デフォルトでは、バッファサイズは1つのメモリページ(プラットフォームに応じて4Kまたは8K)と同じです。ただし、小さくすることもできます。

このディレクティブは、メモリに保存されたレスポンスボディを持つサブリクエストにのみ適用されます。たとえば、このようなサブリクエストはSSIによって作成されます。

構文 tcp_nodelay on | off;
デフォルト
tcp_nodelay on;
コンテキスト httpserverlocation

TCP_NODELAYオプションの使用を有効または無効にします。このオプションは、接続がキープアライブ状態に移行したときに有効になります。さらに、SSL接続、非バッファリングプロキシ、およびWebSocketプロキシでも有効になります。

構文 tcp_nopush on | off;
デフォルト
tcp_nopush off;
コンテキスト httpserverlocation

FreeBSDではTCP_NOPUSHソケットオプション、LinuxではTCP_CORKソケットオプションの使用を有効または無効にします。これらのオプションは、sendfileが使用されている場合にのみ有効になります。このオプションを有効にすると、

構文 try_files file ... uri;
try_files file ... =code;
デフォルト
コンテキスト serverlocation

指定された順序でファイルの存在を確認し、最初に検出されたファイルを使用してリクエスト処理を実行します。処理は現在のコンテキストで行われます。ファイルへのパスは、rootおよびaliasディレクティブに従ってfileパラメーターから構築されます。名前の最後にスラッシュを指定することで、ディレクトリの存在を確認することもできます(例:「$uri/」)。どのファイルも見つからなかった場合、最後のパラメーターで指定されたuriへの内部リダイレクトが行われます。例えば

location /images/ {
    try_files $uri /images/default.gif;
}

location = /images/default.gif {
    expires 30s;
}

最後のパラメーターは、以下の例のように、名前付きロケーションを指すこともできます。バージョン0.7.51以降、最後のパラメーターはcodeにすることもできます。

location / {
    try_files $uri $uri/index.html $uri.html =404;
}

Mongrelのプロキシングの例

location / {
    try_files /system/maintenance.html
              $uri $uri/index.html $uri.html
              @mongrel;
}

location @mongrel {
    proxy_pass http://mongrel;
}

Drupal/FastCGIの例

location / {
    try_files $uri $uri/ @drupal;
}

location ~ \.php$ {
    try_files $uri @drupal;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
    fastcgi_param QUERY_STRING    $args;

    ... other fastcgi_param's
}

location @drupal {
    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    fastcgi_param SCRIPT_NAME     /index.php;
    fastcgi_param QUERY_STRING    q=$uri&$args;

    ... other fastcgi_param's
}

次の例では、

location / {
    try_files $uri $uri/ @drupal;
}

try_filesディレクティブは次のものと同等です。

location / {
    error_page 404 = @drupal;
    log_not_found off;
}

そしてここでは、

location ~ \.php$ {
    try_files $uri @drupal;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;

    ...
}

try_filesは、リクエストをFastCGIサーバーに渡す前にPHPファイルの存在を確認します。

WordpressとJoomlaの例

location / {
    try_files $uri $uri/ @wordpress;
}

location ~ \.php$ {
    try_files $uri @wordpress;

    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
    ... other fastcgi_param's
}

location @wordpress {
    fastcgi_pass ...;

    fastcgi_param SCRIPT_FILENAME /path/to/index.php;
    ... other fastcgi_param's
}

構文 types { ... }
デフォルト
types {
    text/html  html;
    image/gif  gif;
    image/jpeg jpg;
}
コンテキスト httpserverlocation

ファイル名拡張子をレスポンスのMIMEタイプにマップします。拡張子は大文字と小文字を区別しません。複数の拡張子を1つのタイプにマップできます。例えば

types {
    application/octet-stream bin exe dll;
    application/octet-stream deb;
    application/octet-stream dmg;
}

十分に完全なマッピングテーブルは、nginxのconf/mime.typesファイルに配布されています。

特定のロケーションですべてのリクエストに対して「application/octet-stream」MIMEタイプを出力するには、次の設定を使用できます。

location /download/ {
    types        { }
    default_type application/octet-stream;
}

構文 types_hash_bucket_size size;
デフォルト
types_hash_bucket_size 64;
コンテキスト httpserverlocation

タイプハッシュテーブルのバケットサイズを設定します。ハッシュテーブルの設定に関する詳細は、別途用意されているドキュメントを参照してください。

バージョン1.5.13以前は、デフォルト値はプロセッサのキャッシュラインサイズによって異なっていました。

構文 types_hash_max_size size;
デフォルト
types_hash_max_size 1024;
コンテキスト httpserverlocation

タイプハッシュテーブルの最大sizeを設定します。ハッシュテーブルの設定に関する詳細は、別途用意されているドキュメントを参照してください。

構文 underscores_in_headers on | off;
デフォルト
underscores_in_headers off;
コンテキスト httpserver

クライアントリクエストヘッダーフィールドでのアンダースコアの使用を有効または無効にします。アンダースコアの使用が無効になっている場合、アンダースコアを含む名前のリクエストヘッダーフィールドは無効としてマークされ、ignore_invalid_headersディレクティブの対象となります。

serverレベルでディレクティブが指定されている場合、デフォルトサーバーからの値を使用できます。詳細は、「仮想サーバーの選択」セクションに記載されています。

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

変数ハッシュテーブルのバケットサイズを設定します。ハッシュテーブルの設定に関する詳細は、別途用意されているドキュメントを参照してください。

構文 variables_hash_max_size size;
デフォルト
variables_hash_max_size 1024;
コンテキスト http

変数ハッシュテーブルの最大sizeを設定します。ハッシュテーブルの設定に関する詳細は、別途用意されているドキュメントを参照してください。

バージョン1.5.13以前は、デフォルト値は512でした。

埋め込み変数

ngx_http_core_moduleモジュールは、Apacheサーバー変数と一致する名前の埋め込み変数をサポートしています。まず第一に、これらはクライアントリクエストヘッダーフィールドを表す変数です(例:$http_user_agent$http_cookieなど)。他にも変数があります。

$arg_name
リクエスト行の引数name
$args
リクエスト行の引数
$binary_remote_addr
バイナリ形式のクライアントアドレス。IPv4アドレスの場合は常に4バイト、IPv6アドレスの場合は常に16バイトです。
$body_bytes_sent
レスポンスヘッダーを除く、クライアントに送信されたバイト数。この変数は、Apacheモジュールのmod_log_configの「%B」パラメーターと互換性があります。
$bytes_sent
クライアントに送信されたバイト数(1.3.8、1.2.5)
$connection
接続シリアル番号(1.3.8、1.2.5)
$connection_requests
接続を通じて行われたリクエストの現在の数(1.3.8、1.2.5)
$connection_time
ミリ秒単位の精度での接続時間(秒単位)(1.19.10)
$content_length
「Content-Length」リクエストヘッダーフィールド
$content_type
「Content-Type」リクエストヘッダーフィールド
nameクッキー
$document_root
現在のリクエストに対するrootまたはaliasディレクティブの値
$document_uri
$uriと同じ
$host
次の優先順位で:リクエスト行からのホスト名、または「Host」リクエストヘッダーフィールドからのホスト名、またはリクエストに一致するサーバー名
$hostname
ホスト名
$http_name
任意のリクエストヘッダーフィールド。変数名の最後の部分は、ダッシュをアンダースコアに置き換えて小文字に変換されたフィールド名です。
$https
接続がSSLモードで動作している場合は「on」、それ以外の場合は空文字列
$is_args
リクエスト行に引数がある場合は「?」、それ以外の場合は空文字列
$limit_rate
この変数を設定すると、レスポンスレート制限が有効になります。limit_rateを参照してください。
$msec
ミリ秒単位の精度での現在の時刻(秒単位)(1.3.9、1.2.6)
$nginx_version
nginxバージョン
$pid
ワーカープロセスのPID
$pipe
リクエストがパイプライン化された場合は「p」、それ以外の場合は「.」(1.3.12、1.2.7)
$proxy_protocol_addr
PROXYプロトコルヘッダーからのクライアントアドレス(1.5.12)

listenディレクティブでproxy_protocolパラメーターを設定することで、事前にPROXYプロトコルを有効にする必要があります。

$proxy_protocol_port
PROXYプロトコルヘッダーからのクライアントポート(1.11.0)

listenディレクティブでproxy_protocolパラメーターを設定することで、事前にPROXYプロトコルを有効にする必要があります。

$proxy_protocol_server_addr
PROXYプロトコルヘッダーからのサーバーアドレス(1.17.6)

listenディレクティブでproxy_protocolパラメーターを設定することで、事前にPROXYプロトコルを有効にする必要があります。

$proxy_protocol_server_port
PROXYプロトコルヘッダーからのサーバーポート(1.17.6)

listenディレクティブでproxy_protocolパラメーターを設定することで、事前にPROXYプロトコルを有効にする必要があります。

$proxy_protocol_tlv_name
PROXYプロトコルヘッダーからのTLV(1.23.2)。nameはTLVタイプ名またはその数値にすることができます。後者の場合、値は16進数で、0xを接頭辞として付ける必要があります。
$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
SSL TLVにも、TLVタイプ名またはその数値(両方ともssl_を接頭辞として付ける)でアクセスできます。
$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21

次のTLVタイプ名がサポートされています。

  • alpn0x01) - 接続で使用される上位レイヤプロトコル
  • authority0x02) - クライアントによって渡されたホスト名値
  • unique_id0x05) - 一意の接続ID
  • netns0x30) - 名前空間の名前
  • ssl0x20) - バイナリSSL TLV構造

次のSSL TLVタイプ名がサポートされています。

  • ssl_version0x21) - クライアント接続で使用されるSSLバージョン
  • ssl_cn0x22) - SSL証明書の共通名
  • ssl_cipher0x23) - 使用された暗号の名前
  • ssl_sig_alg0x24) - 証明書の署名に使用されたアルゴリズム
  • ssl_key_alg0x25) - 公開鍵アルゴリズム

また、次の特別なSSL TLVタイプ名がサポートされています。

  • ssl_verify - クライアントSSL証明書の検証結果。クライアントが証明書を提示し、正常に検証された場合は0、それ以外の場合は0以外。

listenディレクティブでproxy_protocolパラメーターを設定することで、事前にPROXYプロトコルを有効にする必要があります。

$query_string
$argsと同じ
$realpath_root
現在のリクエストに対するrootまたはaliasディレクティブの値に対応する絶対パス名。すべてのシンボリックリンクは実際のパスに解決されます。
$remote_addr
クライアントアドレス
$remote_port
クライアントポート
$remote_user
Basic認証で提供されたユーザー名
$request
完全な元のリクエスト行
$request_body
リクエストボディ

この変数の値は、proxy_passfastcgi_passuwsgi_passscgi_passディレクティブによって処理されるロケーションで、リクエストボディがメモリバッファに読み込まれた場合に利用可能になります。

$request_body_file
リクエストボディを含む一時ファイルの名前

処理の最後に、ファイルを削除する必要があります。リクエストボディを常にファイルに書き込むには、client_body_in_file_onlyを有効にする必要があります。プロキシされたリクエストまたはFastCGI/uwsgi/SCGIサーバーへのリクエストで一時ファイルの名前が渡される場合、 proxy_pass_request_body off fastcgi_pass_request_body off uwsgi_pass_request_body off、または scgi_pass_request_body offディレクティブによって、それぞれリクエストボディの受け渡しを無効にする必要があります。

$request_completion
リクエストが完了した場合は「OK」、それ以外の場合は空文字列
$request_filename
ルートまたはエイリアスディレクティブとリクエストURIに基づいた、現在のリクエストのファイルパス
$request_id
16バイトのランダムなバイトから生成された一意のリクエスト識別子(16進数)(1.11.0)
$request_length
リクエストの長さ(リクエストライン、ヘッダー、リクエストボディを含む)(1.3.12、1.2.7)
$request_method
リクエストメソッド、通常は「GET」または「POST
$request_time
ミリ秒単位の精度を持つ秒単位のリクエスト処理時間(1.3.9、1.2.6)。クライアントから最初のバイトが読み取られてからの経過時間。
$request_uri
完全な元のリクエストURI(引数を含む)
$scheme
リクエストスキーム、「http」または「https
$sent_http_name
任意のレスポンスヘッダーフィールド。変数名の最後の部分は、ダッシュをアンダースコアに置き換えて小文字に変換されたフィールド名です。
$sent_trailer_name
レスポンスの最後に送信された任意のフィールド(1.13.2)。変数名の最後の部分は、ダッシュをアンダースコアに置き換えて小文字に変換されたフィールド名です。
$server_addr
リクエストを受け入れたサーバーのアドレス

この変数の値を計算するには、通常、システムコールが1回必要です。システムコールを回避するには、listenディレクティブでアドレスを指定し、bindパラメーターを使用する必要があります。

$server_name
リクエストを受け入れたサーバーの名前
$server_port
リクエストを受け入れたサーバーのポート
$server_protocol
リクエストプロトコル、通常は「HTTP/1.0」、「HTTP/1.1」、「HTTP/2.0」、または「HTTP/3.0
$status
レスポンスステータス(1.3.2、1.2.2)
$tcpinfo_rtt$tcpinfo_rttvar$tcpinfo_snd_cwnd$tcpinfo_rcv_space
クライアントTCP接続に関する情報。TCP_INFOソケットオプションをサポートするシステムで使用できます。
$time_iso8601
ISO 8601標準形式のローカル時間(1.3.12、1.2.7)
$time_local
共通ログ形式のローカル時間(1.3.12、1.2.7)
$uri
リクエスト内の現在のURI、正規化済み

$uriの値は、リクエスト処理中に変更される場合があります(例:内部リダイレクトを行う場合、またはインデックスファイルを使用する場合)。