ngx_http_core_module モジュール

ディレクティブ
     absolute_redirect
     aio
     aio_write
     alias
     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_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
     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
Embedded Variables

ディレクティブ

構文: absolute_redirect on | off;
デフォルト:
absolute_redirect on;
コンテキスト: http, server, location

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

無効にされると、nginxによって発行されるリダイレクトは相対的なものになるでしょう。

server_name_in_redirectport_in_redirect ディレクティブも見てください。

構文: aio on | off | threads[=pool];
デフォルト:
aio off;
コンテキスト: http, server, location

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

FreeBSDとLinuxにおいて、非同期ファイルI/O (AIO)の利用を有効または無効にします:

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

FreeBSDでは、AIOはFreeBSD 4.3から利用することができます。FreeBSD 11.0以前は、AIOはカーネルに静的にリンクすることができます:

options VFS_AIO

あるいは、カーネルのロード可能なモジュールとして動的にロードすることもできます:

kldload aio

Linuxでは、AIOはカーネルバージョン 2.6.22から使うことができます。また、directioを有効にすることが必要で、そうでなければ読み込みはブロッキングされるでしょう:

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

Linuxでは、directio は512バイト(あるいはXFSの場合は4K)の境界に並んだブロックを読み込むためのみに使うことができます。並んでいないファイルはブロッキングモードで読み込まれます。バイト範囲のリクエストとファイルの先頭からではないFLVリクエストにも当てはまります: ファイルの先頭と終了での並んでいないデータの読み込みはブロッキングされるでしょう。

LinuxにおいてAIO と sendfile の両方が有効な場合は、AIOが directio ディレクティブで指定されているサイズ以上のファイルに使われますが、サイズ未満のファイルあるいはdirectioが無効な場合はsendfile が使われます。

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

結果的に、ファイルはマルチスレッディング(1.7.11)を使ってワーカープロセスのブロック無しに読み込みおよびsentすることができます:

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

指定されたpoolのスレッドへの読み込みおよびsend fileオペレーションは仕事からはずされます。poolの名前が省略された場合は、"default"という名前のpoolが使用されます。pool名は変数を使って設定することもできます:

aio threads=pool$disk;

デフォルトでは、マルチスレッディングは無効で、--with-threads configuration パラメータを使って有効にされる必要があります。現在のところ、マルチスレッディングは epoll, kqueue および eventport メソッドとのみ互換性があります。マルチスレッド化されたファイルのsendはLinuxのみでサポートされます。

sendfile ディレクティブも見てください。

構文: aio_write on | off;
デフォルト:
aio_write off;
コンテキスト: http, server, location

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

aio が有効にされると、ファイルの書き込みのためにそれが使われるかどうかを指定します。現在のところ、これはaio スレッド を使う場合にのみ動作し、プロキシされたサーバから受け取ったデータの一時ファイル書き込みに制限されます。

構文: alias path;
デフォルト: -
コンテキスト: 場所

指定されたlocationの置き換えを定義します。例えば、次の設定の場合

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

"/i/top.gif"のリクエストに、/data/w3/images/top.gif ファイルが送られるでしょう。

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

alias が正規表現で定義されたlocationの中で使われる場合、そのような正規表現は取り出しを含む必要があり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;
}

構文: chunked_transfer_encoding on | off;
デフォルト:
chunked_transfer_encoding on;
コンテキスト: http, server, location

HTTP/1.1ではchunked transfer encodingを無効にすることができます。標準的な要求にも関わらずchunked encoding をサポートしないソフトウェアを使う場合には便利です。

構文: client_body_buffer_size size;
デフォルト:
client_body_buffer_size 8k|16k;
コンテキスト: http, server, location

クライアントのリクエストボディを読むためのバッファサイズを設定します。リクエストボディがバッファより大きい場合には、ボディ全体または一部だけがtemporary fileに書き込まれます。デフォルトでは、バッファサイズは二つのメモリページです。これは、x86,その他の32ビットプラットフォーム,x86-64では8Kです。その他の64ビットプラットフォームでは通常16Kです。

構文: client_body_in_file_only on | clean | off;
デフォルト:
client_body_in_file_only off;
コンテキスト: http, server, location

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;
コンテキスト: http, server, location

nginxが全てのクライアントのリクエストボディを一つのバッファに保存するかどうかを決定します。関係するコピー操作の数を節約するために$request_body 変数を使うときには、このディレクティブが推奨されます。

構文: client_body_temp_path path [level1 [level2 [level3]]];
デフォルト:
client_body_temp_path client_body_temp;
コンテキスト: http, server, location

クライアントのリクエストボディを保持するテンポラリファイルを保存するディレクトリを定義します。指定されたディレクトリの下に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;
コンテキスト: http, server, location

クライアントリクエストボディの読み込みのタイムアウトを定義します。タイムアウトは二つの連続する読み込み操作の期間についてセットされ、リクエストボディ全体を転送する時間ではありません。クライアントがこの期間に何も転送しなかった場合は、408(Request Time-out)エラーがクライアントに返されます。

構文: client_header_buffer_size size;
デフォルト:
client_header_buffer_size 1k;
コンテキスト: http, server

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

構文: client_header_timeout time;
デフォルト:
client_header_timeout 60s;
コンテキスト: http, server

クライアントのリクエストヘッダの読み込みのタイムアウトを定義します。この期間の間にクライアントが全てのヘッダを転送しない場合、408(Request Time-out)エラーがクライアントに返されます。

構文: client_max_body_size size;
デフォルト:
client_max_body_size 1m;
コンテキスト: http, server, location

"Content-Length"リクエストヘッダフィールドで指定されるクライアントリクエストボディの最大許容サイズを設定します。リクエストのサイズが設定された値を超えると、413(Request Entity Too Large)エラーがクライアントに返されます。ブラウザがこのエラーを正しく表示できないことを承知してください。size を0に設定すると、クライアントのリクエストボディサイズのチェックが無効になります。

構文: connection_pool_size size;
デフォルト:
connection_pool_size 256|512;
コンテキスト: http, server

接続あたりのメモリの割り当ての正確なチューニングができます。このディレクティブはパフォーマンスへの効果が最小のため、一般的に使われるべきではありません。 デフォルトでは、32-bitプラットフォーム上ではサイズは256バイトに等しく、64-bitプラットフォーム上では512バイトに等しいです。

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

構文: default_type mime-type;
デフォルト:
default_type text/plain;
コンテキスト: http, server, location

応答のデフォルトのMIMEタイプを定義します。ファイル名の拡張子からMIMEタイプへのマッピングはtypes ディレクティブを使って設定されます。

構文: directio size | off;
デフォルト:
directio off;
コンテキスト: http, server, location

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

読み込みのファイルが指定のsize.以上の場合に、O_DIRECT フラグ(FreeBSD, Linux),F_NOCACHE フラグ(Mac OS X), またはdirectio() 関数(Solaris) の利用を有効にします。指定されたリクエストに対してsendfileファイルの利用が自動的に無効にされます(0.7.5)巨大なファイルを提供する場合:

directio 4m;

あるいはLinuxでaioを使う時に有用です。

構文: directio_alignment size;
デフォルト:
directio_alignment 512;
コンテキスト: http, server, location

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

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

構文: disable_symlinks off;
disable_symlinks on | if_not_owner [from=part];
デフォルト:
disable_symlinks off;
コンテキスト: http, server, location

このディレクティブはバージョン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 は処理のオーバーヘッドが追加されます。

検索のためだけにディレクトリをオープンするのをサポートしないシステム上では、これらのパラメータを使うためにworkerプロセスはチェックする全てのディレクトリの読み込みパーミッションを持つ必要があります。

ngx_http_autoindex_module, ngx_http_random_index_modulengx_http_dav_module モジュールは現在のところこのディレクティブを無視します。

構文: error_page code ... [=[response]] uri;
デフォルト: -
コンテキスト: http, server, location, if in location

指定されたエラーで表示されるURIを定義します。uri の値には変数を含むことができます。

例:

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

This causes an internal redirect to the specified uri with the client request method changed to “GET” (for all methods other than “GET” and “HEAD”).

更に、"=response"構文を使って、応答コードを違うものに変更することができます。例えば:

taerror_page 404 =200 /empty.gif;

プロキシされているサーバあるいはFastCGI/uwsgi/SCGIサーバによってエラー応答が処理される場合で、サーバが異なる応答コード(例えば、200,302,401または404)を返すかも知れない場合、それが返すコードを使って応答することができます:

error_page 404 = /404.php;

内部的なリダイレクトの間にURIとメソッドを変更する必要が無い場合は、名前のついたlocationにエラー処理を渡すことができます。

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)のどれか一つだけに変更することができます。

これらのディレクティブは、現在のレベルにerror_page ディレクティブが無い時にのみ、上のレベルを継承します。

構文: etag on | off;
デフォルト:
etag on;
コンテキスト: http, server, location

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

静的なリソースに対して"ETag"応答ヘッダフィールドの自動生成を有効または無効にします。

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

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

構文: if_modified_since off | exact | before;
デフォルト:
if_modified_since exact;
コンテキスト: http, server, location

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

レスポンスの修正時間と"If-Modified-Since"リクエストヘッダフィールドの比較をどうするかを指定します。

off
"If-Modified-Since" リクエストヘッダフィールドは無視されます(0.7.34);
exact
正確に一致させます;
before
れすぽいんすの修正時間が"If-Modified-Since"リクエストヘッダフィールドの時間より早いか等しい

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

無効な名前のヘッダフィールドを無視すべきかどうかを制御します。有効な名前は、英語の文字、数字、ハイフォン、ひょっとしたらアンダースコア(underscores_in_headersディレクティブで制御されます)の組み合わせでできています。

ディレクティブがserverレベルで指定された場合、serverがデフォルトのものであればその値だけが使われます。指定された値は同じアドレスとポートでlistenしている全てのバーチャルサーバにも適用されるでしょう。

構文: internal;
デフォルト: -
コンテキスト: 場所

与えられたlocationが内部リクエストだけに使われることを指定します。外部リクエストにはクライアントエラー 404 (Not Found) が返されます。内部リクエストとは以下のようなものです:

例:

error_page 404 /404.html;

location /404.html {
    internal;
}

間違った設定によって起こるリクエスト処理の循環を避けるために、リクエストごとに10回の内部リクエストの制限があります。制限に達すると、500エラー (Internal Server Errror)が返されます。そのような場合、エラーログに"rewrite or internal redirection cycle" メッセージが現れます。

構文: keepalive_disable none | browser ...;
デフォルト:
keepalive_disable msie6;
コンテキスト: http, server, location

ブラウザの無作法な振る舞いによるkeep-alive接続を無効にします。browser パラメータはどのブラウザが影響を受けるかを指定します。値のmsie6 は MSIEの古いバージョンでPOSTリクエストを受け付けた時にkeep-alive接続を無効にします。値のsafari は Mac OS X と Mac OS X-like オペレーティングシステムの SafariやSafari-likeブラウザでkeep-alive接続を無効にします。値のnone は全てのブラウザでkeep-alive接続を有効にします。

1.1.18以上では、safari は全てのオペレーティングシステムにおいて全てのSafari とSafari-like ブラウザが該当し、それらとのkeep-alive接続はデフォルトで無効になりました

構文: keepalive_requests number;
デフォルト:
keepalive_requests 100;
コンテキスト: http, server, location

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

一つのkeep-alive接続で提供できるリクエストの最大数を設定します。最大数に達した後は接続が閉じられます。

構文: keepalive_timeout timeout [header_timeout];
デフォルト:
keepalive_timeout 75s;
コンテキスト: http, server, location

1つめのパラメータはサーバ側で開かれたままになるkeep-aliveクライアントコネクションのタイムアウトを設定します。0の値はkeep-alive接続を無効にします。任意の二つ目のパラメータは"Keep-Alive: timeout=time" 応答ヘッダフィールドの値を設定します。二つの値は異なるかも知れません。

"Keep-Alive: timeout=time" ヘッダーフィールドはMozillaとKonquerorで認識されます。MSIEはkeep-alive接続を自分自身で約60秒で閉じます。

構文: large_client_header_buffers number size;
デフォルト:
large_client_header_buffers 4 8k;
コンテキスト: http, server

大きなクライアントリクエストヘッダを読み込むのに使われるバッファのnumbersizeの最大値を設定します。リクエストの行は一つのバッファのサイズを超過することはできません。そうでなければ 414 (Request-URI Too Large) エラーがクライアントに返されるでしょう。 client. リクエストヘッダフィールドも同様に一つのバッファサイズを越えることができません。そうでなければ 404 (Bad Request)エラーがクライアントに返されるでしょう。バッファは必要な時だけ割り当てられます。デフォルトではバッファサイズは8Kバイトです。リクエストの処理が終わると、接続はKeep-alive状態に移行し、これらのバッファは解放されます。

構文: limit_except method ... { ... }
デフォルト: -
コンテキスト: 場所

locationの中で許可されるHTTPメソッドを制限します。methodパラメータは次のうちのいずれかです: GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK あるいは PATCH. GET メソッドの許可は、HEADメソッドも許可します。他のメソッドへのアクセスはngx_http_access_modulengx_http_auth_basic_module モジュールディレクティブを使って制限することができます:

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

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

構文: limit_rate rate;
デフォルト:
limit_rate 0;
コンテキスト: http, server, location, if in location

クライアントへの応答転送のレートを制限します。rateは秒間あたりのバイトで指定されます。0の値はレートの制限を無効にします。制限はリクエストごとに設定されます。もしクライアントが同時に二つの接続を開いた場合は、全体のレートは指定された制限の二倍になるでしょう。

レートの制限は$limit_rate 変数に設定することもできます。レートを特定の条件で制限するしなければならない場合に、これは有用でしょう:

server {

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

    ...
}

レートの制限はプロキシされたサーバ応答の"X-Accel-Limit-Rate"ヘッダフィールドの中に設定することもできます。proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headersscgi_ignore_headers ディレクティブを使って、この機能を無効にすることができます。

構文: limit_rate_after size;
デフォルト:
limit_rate_after 0;
コンテキスト: http, server, location, if in location

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

クライアントへの初期設定量以上の応答転送を制限する値を設定します。

例:

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

構文: lingering_close off | on | always;
デフォルト:
lingering_close on;
コンテキスト: http, server, location

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

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

デフォルト値"on" は、クライアントがもっとデータを送ってくるかも知れないというヒューリスティックサジェスチョンの場合のみ、完全に接続を閉じる前にnginxに追加データを待機 して処理するように指示します。

値"always"は無条件にnginxに追加のクライアントデータを待って処理させます。

値"off"はそれ以上のデータを待たずに直ちに接続を閉じるように指示します。この挙動はプロトコルに違反するものであり、通常の状況では使うべきものではありません。

構文: lingering_time time;
デフォルト:
lingering_time 30s;
コンテキスト: http, server, location

lingering_close の効果がある場合には、このディレクティブはクライアントからの追加のデータを処理(読み込んで無視する)する間の最大時間を指定します。その後、更にデータがあったとしても接続は閉じられるでしょう。

構文: lingering_timeout time;
デフォルト:
lingering_timeout 5s;
コンテキスト: http, server, location

lingering_close の効果がある場合には、このディレクティブはクライアントのデータの到着を待つ最大時間を指定します。データがこの時間内に到着しない場合は、接続が閉じられるでしょう。そうでなければ、データは読み込まれて破棄され、nginxは再び更なるデータを待ち始めます。"wait-read-ignore" サイクルは繰り返されますが、lingering_timeディレクティブで指定されるより長くはありません。

構文: listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
デフォルト:
listen *:80 | *:8000;
コンテキスト: server

サーバがリクエストを受け付ける、IPに対してはaddressport、あるいはUNIX-domainソケットに対してはpathaddressportの両方、あるいはaddressだけ、あるいはport だけを指定することができます。addressはhostnameからも知れません。例えば:

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-domain ソケット (0.8.21) は"unix:"プリフィックスで指定されます:

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

address だけが渡された場合、ポート80が使われます。

ディレクティブが存在しない場合は、もしスーパーユーザ権限で実行されていれば*:80を、そうでなければ*:8000が使われます。

default_serverパラメータがある場合は、指定されたaddress:port ペアについてデフォルトのサーバになるでしょう。どのディレクティブにもdefault_serverパラメータが無い場合は、address:portペアがある最初のサーバがこのペアについてのデフォルトのサーバになるでしょう。

バージョン0.8.21からこのパラメータは簡潔にdefaultという名前になりました。

ssl パラメータ (0.7.14)は、このポートで受け付ける全ての接続がSSLモードで動作しなければならないことを指定することができます。HTTPとHTTPSリクエストの両方を扱うサーバのために、もっとコンパクトな設定をすることができます。

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

spdy パラメータ(1.3.15-1.9.4)は、このポートのSPDY接続の受付をすることができます。通常これが動作するにはssl パラメータも指定される必要がありますが、nginxはSSL無しのSPDY接続を受け付けるように設定することもできます。

proxy_protocolパラメータ(1.5.12)は、このポートの全ての接続の受付がPROXY protocolを使わなければならないように指定することができます。

listenディレクティブはソケットに関するシステムコールに特有の幾つかの追加パラメータを指定することができます。このパラメータはどのlistenディレクティブでも指定することができますが、 渡されたaddress:port ペアは一度だけ指定することができます。

バージョン0.8.21から、default と一緒にlistenディレクティブの中でだけ指定できるようになりました。

setfib=number
このパラメータ(0.8.44) はlistenソケットのための関連ルーティングテーブル、FIB(SO_SETFIBオプション)を設定します。これは今のところFreeBSDでだけ動作します。
fastopen=number
listenソケットのための"TCP Fast Open"を有効にし、3ウェイハンドシェイクがまだ完了していない接続のキューの最大の長さを制限します。
サーバが same SYN packet with dataの受信を1回以上処理できない場合には、この機能を有効にしないでください。
backlog=number
ペンディング接続のキューのための最大長を制限しているlisten()コールの中でbacklogパラメータを設定します。デフォルトでは、 backlog はFreeBSD、DragonFly BSD および Mac OS Xでは -1、その他のプラットフォームでは511に設定されています。
rcvbuf=size
listenソケットのための受信バッファサイズ(SO_RCVBUF オプション)を設定します。
sndbuf=size
listenソケットのための送信バッファサイズ(SO_SNDBUF オプション)を設定します。
accept_filter=filter
やってくる接続をaccept()に渡す前にフィルタをするlistenソケットのために、受信フィルタ(SO_ACCEPTFILTERオプション)の名前を設定します。これはFreeBSDとNetBSD 5.0+でだけ動作します。可能な値はdatareadyhttpreadyです。
繰り延べ
LInuxでの繰り延べaccept()(TCP_DEFER_ACCEPT ソケットオプション)について説明します。
bind
指定されたaddress:portペアに個別のbind()コールをします。もしポートが同じでアドレスが違うlistenディレクティブが幾つかあり、そのlisten ディレクティブの一つが指定された指定されたポートで全てのアドレス(*:port)でlistenする場合、nginxは*:portbind()するため、これは有用です。この場合接続を受け付けるためのアドレスを決定するために、getsockname()システムコールがされることに注意しなければなりません。setfib, backlog, rcvbuf, sndbuf, accept_filter, deferred, ipv6only または so_keepalive パラメータが使われた場合、渡されたaddress:port ペアは個々に常に bind() コールが行われます。
ipv6only=on|off
このパラメータ(0.7.42)は(IPV6_V6ONLY ソケットオプションを経由して)、ワイルドカードアドレス[::]でlistenしている IPv6ソケットがIPv6接続だけを受け付けるかIPv6とIPv4接続の両方を受け付けるかどうかを決定します。このパラメータはデフォルトでonです。開始時に一度だけ設定することができます。
バージョン1.3.4から、もしこのパラメータが省略された場合、オペレーティングシステムの設定がそのソケットに対して有効になります。
reuseport
このパラメータ (1.9.1) はカーネルが入ってくる接続をワーカープロセス間に分散させることで、各ワーカープロセスに(SO_REUSEPORT ソケットオプションを使って)個々のlistenソケットを生成するように指示します。これは現在のところLinux 3.9+とDragonFly BSDでのみ動作します。
このオプションの不適切な使用はセキュリティの巻き添えを持ちます。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
このパラメータ(1.1.11)は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プルーブに設定されます。

例:

listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;

構文: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
デフォルト: -
コンテキスト: server, location

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

"%XX"形式にエンコードされたテキストがデコードされ、相対パスコンポーネント"."と".."の参照が解決され、二つ以上の隣接したスラッシュが一つのスラッシュに圧縮された後に、正規化されたURIに対してマッチングが実行されます。

locationはプリフィック文字または正規表現のどちらかで定義されるでしょう。正規表現は先行する"~*"修飾子(大文字小文字を区別しないマッチング)、または"~"修飾子(大文字小文字を区別するマッチング)によって指定されます。指定されたリクエストに合致するlocationを見つけるために、nginxはまずプリフィックス文字列(プリフィックスlocation)を使って定義されるlcoationを調べます。それらの中で、一番長くマッチするプリフィックスのlocationが選択され記憶されます。それから、設定ファイルの中に現れる順番で正規表現が調べられます。正規表現の検索は一番最初にマッチした時点で終了し、対応する設定が使われます。正規表現にマッチするのものが無かった場合、前に記憶されたプリフィックスlocationの設定が使われます。

下記に言及する幾つかの例外と共にlocation ブロックは入れ子にすることができます。

Mac OS X と Cygwinのような大文字小文字の区別が無いオペレーティングシステムでは、プリフィックス文字のマッチングは大文字小文字を区別しません(0.7.7)。しかし、比較は一バイトごとに限られます。

正規表現はキャプチャ(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を含むことができません。

locationがスラッシュで終わるプリフィックス文字列で定義され、リクエストが proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass または memcached_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;
コンテキスト: http, server, location

not found fileのエラーをerror_logに記録することを有効化または無効化します。

構文: log_subrequest on | off;
デフォルト:
log_subrequest off;
コンテキスト: http, server, location

サブリクエストをaccess_logに記録することを有効化または無効化します。

構文: max_ranges number;
デフォルト: -
コンテキスト: http, server, location

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

バイトレンジ リクエストの最大レンジの数字を制限します。たとえ指定されたバイトレンジが無いとしても制限を越えるリクエストが処理されます。デフォルトではレンジの数は制限されません。値0はバイトレンジ サポートを完全に無効にします。

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

URIの隣接する二つ以上のスラッシュの一つのスラッシュへの圧縮を有効または無効にします。

圧縮はlocationのプリフィックス文字列と正規表現の正しいマッチングに不可欠なものであることに注意してください。それ無しでは"//scripts/one.php"リクエストはマッチしないでしょう。

location /scripts/ {
    ...
}

静的なファイルとして処理されるかも知れません。そして"/scripts/one.php"に変換されます。

圧縮のoffはURIがbase64-encoded名を含む場合に必要になるかも知れません。というのもbase64は"/"文字を内部的に使うからです。しかし、セキュリティの考慮のため、圧縮のoffは避けたほうが良いです。

ディレクティブがserverレベルで指定された場合、serverがデフォルトのものであればその値だけが使われます。指定された値は同じアドレスとポートでlistenしている全てのバーチャルサーバにも適用されるでしょう。

構文: msie_padding on | off;
デフォルト:
msie_padding on;
コンテキスト: http, server, location

応答サイズを512バイトに増やすために、400以上のステータスのMSIEクライアントへの応答にコメントを追加することを有効または無効にする。

構文: msie_refresh on | off;
デフォルト:
msie_refresh off;
コンテキスト: http, server, location

MSIEクライアントのためにリダイレクトの代わりにリフレッシュを起こすことを有効または無効にする。

構文: open_file_cache off;
open_file_cache max=N [inactive=time];
デフォルト:
open_file_cache off;
コンテキスト: http, server, location

保持に使うキャッシュを設定する:

ディレクティブは次のパラメータを持ちます:

max
キャッシュ内の要素の最大数を設定する; キャッシュのオーバーフロー時には最も使われいない(LRU)要素が削除されます。
inactive
指定の期間アクセスされていないエレメントがキャッシュから削除される期間を定義します; デフォルトでは 60秒です。
off
disables the cache.

例:

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;
コンテキスト: http, server, location

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

構文: open_file_cache_min_uses number;
デフォルト:
open_file_cache_min_uses 1;
コンテキスト: http, server, location

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

構文: open_file_cache_valid time;
デフォルト:
open_file_cache_valid 60s;
コンテキスト: http, server, location

open_file_cache が検証されるべき時間を設定します。

構文: output_buffers number size;
デフォルト:
output_buffers 2 32k;
コンテキスト: http, server, location

ディスクから応答を読み込むために使われるバッファのサイズ を設定します。

バージョン 1.9.5以前はデフォルト値は 132kでした。

構文: port_in_redirect on | off;
デフォルト:
port_in_redirect on;
コンテキスト: http, server, location

Enables or disables specifying the port in absolute redirects issued by nginx.

リダイレクト時の最初のサーバ名の使用は server_name_in_redirect ディレクティブによって制御されます。

構文: postpone_output size;
デフォルト:
postpone_output 1460;
コンテキスト: http, server, location

可能であればクライアントのデータの転送はnginxが送信するデータを少なくとも size バイト持つまで延期されるでしょう。値0はデータ転送の延期を無効にします。

構文: read_ahead size;
デフォルト:
read_ahead 0;
コンテキスト: http, server, location

ファイルを扱う時のカーネルのプリロードの量を設定します。

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

FreeBSDでは、fcntl(O_READAHEAD, size) システムコール、FreeBSD 9.0-CURRENTからさポートされています、が使われます。FreeBSD 7 は パッチを当てる必要があります。

構文: recursive_error_pages on | off;
デフォルト:
recursive_error_pages off;
コンテキスト: http, server, location

error_page ディレクティブを使った複数回のリダイレクトを有効または無効にします。そのようなリダイレクトの数は制限されます。

構文: request_pool_size size;
デフォルト:
request_pool_size 4k;
コンテキスト: http, server

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

構文: reset_timedout_connection on | off;
デフォルト:
reset_timedout_connection off;
コンテキスト: http, server, location

タイムアウトした接続の再設定を有効または無効にします。再設定は次のように実行されます。ソケットを閉じる前に、タイムアウト値を0にしてSO_LINGERオプションが設定されます。ソケットが閉じられた時に、TCP_RSTがクライアントに送られ、このソケットに占有されていた全てのメモリが解放されます。これにより、既に閉じられたソケットが長い間FIN_WAIT1ステートでバッファを占有することを避けることができます。

タイムアウトしたkeep-alive接続は正常に閉じられることに注意が必要です。

構文: resolver address ... [valid=time] [ipv6=on|off];
デフォルト: -
コンテキスト: http, server, location

upstreamサーバの名前をアドレス解決するために使われるネームサーバを設定します。例えば:

resolver 127.0.0.1 [::1]:5353;

アドレスはドメイン名またはIPアドレス、任意のポート(1.3.1, 1.2.2)として指定することができます。ポートが指定された場合は、ポート53が使われるでしょう。ラウンドロビンの形式で、ネームサーバが照合されます。

バージョン1.1.7より前では、一つのネームサーバだけが設定することができました。IPv6アドレスを使ったネームサーバの指定は、バージョン 1.3.1と1.2.2 からさポートされました。

デフォルトでは、nginxは名前解決の時にIPv4とIPv6アドレスの両方を調べるでしょう。IPv6アドレスの調査が望ましいものではない場合、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サーバを設定することをお勧めします。

構文: resolver_timeout time;
デフォルト:
resolver_timeout 30s;
コンテキスト: http, server, location

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

resolver_timeout 5s;

構文: root path;
デフォルト:
root html;
コンテキスト: http, server, location, if in location

リクエストのルートディレクトリを設定します。例えば、次の設定の場合

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

ファイル/data/w3/i/top.gifが"c1>/i/top.gif"リクエストの応答に送信されるでしょう。

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

ファイルへのパスは単にroot ディレクティブの値にURIを加することで組み立てられます。URIが修正される必要がある場合は、aliasディレクティブが使われるべきです。

構文: satisfy all | any;
デフォルト:
satisfy all;
コンテキスト: http, server, location

ngx_http_access_module, ngx_http_auth_basic_module, ngx_http_auth_request_module あるいは ngx_http_auth_jwt_moduleモジュールの全て (all)あるいは少なくとも一つ(any) がアクセスを許可していれば、アクセスを許可します。

例:

location / {
    satisfy any;

    allow 192.168.1.0/32;
    deny  all;

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

構文: send_lowat size;
デフォルト:
send_lowat 0;
コンテキスト: http, server, location

もしこのディレクティブがゼロ以外の値に設定された場合、kqueueメソッドのNOTE_LOWAT またはSO_SNDLOWATソケットオプションのどちらかを使って、クライアントソケットの送信オペレーションの数を最小化しようとします。どちらの場合も指定した値sizeが使われます。

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

構文: send_timeout time;
デフォルト:
send_timeout 60s;
コンテキスト: http, server, location

クライアントに応答する転送タイムアウトを設定します。タイムアウトは二つの連続する書き込み操作の間に設定され、応答全体の転送のためのものではありません。この時間内にクライアントが何も受け取らなかった場合、接続が閉じられます。

構文: sendfile on | off;
デフォルト:
sendfile off;
コンテキスト: http, server, location, if in location

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

nginx 0.8.12とFreeBSD 5.2.1から、aiosendfile()のためにpre-loadするために使うことができます:

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

この設定では、sendfile()SF_NODISKIO フラグ付きで呼び出され、disk I/Oをブロックしません。しかし代わりにデータがメモリに無いというレポートが返ります。nginxはその後 1バイト読み込むことで非同期データのロードを開始します。最初の読み込みでFreeBSDのカーネルはファイルの最初の128Kバイトをメモリにロードしますが、次の読み込みは16Kチャンクのみロードするでしょう。これは read_ahead ディレクティブを使って変更することができます。

バージョン1.7.11以前は、pre-loadは aio sendfile;を使って有効にすることができました。

構文: sendfile_max_chunk size;
デフォルト:
sendfile_max_chunk 0;
コンテキスト: http, server, location

0以外の値が設定された場合、一つのsendfile() コールで転送することができるデータの量を制限します。制限が無い場合、一つの高速な接続がworkerプロセスを完全に掴むかもしれません。

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

バーチャルサーバの設定をします。IPベース(IPアドレスに基づく)と名前ベース("Host"リクエストヘッダフィールドに基づく)バーチャルサーバとの間に明確な違いはありません。代わりに、listenディレクティブがサーバが受け付ける接続の全てのアドレスとポートを示し、server_nameディレクティブが全てのサーバ名を列挙します。設定例が"How nginx processes a request"ドキュメントで提供されています。

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

バーチャルサーバの名前を設定します。例えば:

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

最初の名前がprimaryサーバ名になります。

サーバ名には、名前の最初または最後の部分を置き換えるアスタリスク("*") を含むことができます。:

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

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

前述の名前の最初の二つは一つに結合することができます:

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 namesドキュメントで提供されています。

構文: server_name_in_redirect on | off;
デフォルト:
server_name_in_redirect off;
コンテキスト: http, server, location

nginxが発行するabsoluteリダイレクトで、server_name ディレクティブで指定されるプライマリサーバ名の使用を有効または無効にします。primary サーバ名の利用が無効の場合、"Host"リウエストヘッダフィールドの名前が使われます。このフィールドが無い場合、サーバのIPアドレスが使われます。

リダイレクトのポートの利用はport_in_redirect ディレクティブで制御されます。

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

サーバ名ハッシュテーブルのbucketサイズを設定します。デフォルトの値はプロセッサのキャッシュラインのサイズに依存します。ハッシュテーブルの設定の詳細は別個のドキュメントで提供されています。

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

サーバ名ハッシュテーブルのsizeの最大値を設定します。ハッシュテーブルの設定の詳細は別個の<a0>ドキュメント</a0>で提供されています。

構文: server_tokens on | off | string;
デフォルト:
server_tokens on;
コンテキスト: http, server, location

エラーメッセージと"Server"応答ヘッダフィールドの中でnginxのバージョンを発行することを有効または無効にします。

更に、commercial subscriptionの一部として、バージョン 1.9.13 からエラーメッセージと “Server” 応答ヘッダフィールドの値の中のシグネチャーは明示的に変数とともに string を使って設定することができます。空の文字列は “Server” フィールドの送出を無効にします。

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

TCP_NODELAYオプションの利用を有効または無効にします。接続がKeep-aliveステートで転送される場合にのみ、このオプションは有効にされます。

構文: tcp_nopush on | off;
デフォルト:
tcp_nopush off;
コンテキスト: http, server, location

FreeBSDでのTCP_NOPUSHソケットオプションあるいはLinuxでのTCP_CORK ソケットオプションを有効または無効にします。sendfile が使われる時のみオプションが有効にされます。オプションを有効にすることにより、

構文: try_files file ... uri;
try_files file ... =code;
デフォルト: -
コンテキスト: server, location

ファイルの存在を指定した順番で調べ、最初に見つけたファイルをリクエストの処理に使います; 処理は現在のコンテキストで実行されます。ファイルのパスは root and alias ディレクティブにしたあってfile パラメータから構築されます。名前の最後にスラッシュを指定することで、ディレクトリのチェックをすることができます。例えば "$uri/"。ファイルが見つからなかった場合には、最後のパラメータで指定されるuriへ内部的にリダイレクトします。例えば:

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

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

下の例で示すように最後のパラメータが名前付きのlocationを示すようにもできます。バージョン 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;
}

And here,

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;
}
コンテキスト: http, server, location

ファイル名の拡張子を応答MIMEタイプにマップする。拡張子は大文字小文字を区別しません。幾つかの拡張子は一つのタイプにマップされます。例えば:

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

nginxではconf/mime.types ファイルに十分に徹底したマッピングテーブルが配布されています。

特定のlocationで全てのリクエストに対しapplication/octet-stream"MIMEタイプを発行するには、次の設定が使われます:

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

構文: types_hash_bucket_size size;
デフォルト:
types_hash_bucket_size 64;
コンテキスト: http, server, location

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

1.5.13以前では、デフォルト値はプロセッサーのキャッシュラインのサイズに依存していました。

構文: types_hash_max_size size;
デフォルト:
types_hash_max_size 1024;
コンテキスト: http, server, location

タイプのハッシュテーブルのsizeの最大値を設定します。 ハッシュテーブルの設定の詳細は別個の<a0>ドキュメント</a0>で提供されています。

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

クライアントリクエストの中でアンダースコアの利用を有効または無効にします。アンダースコアの利用を無効にすると、アンダースコアを含むリクエストヘッダーフィールドは無効とマークされ、ignore_invalid_headersディレクティブの影響を受けるようになります。

ディレクティブがserverレベルで指定された場合、serverがデフォルトのものであればその値だけが使われます。指定された値は同じアドレスとポートでlistenしている全てのバーチャルサーバにも適用されるでしょう。

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

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

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

変数ハッシュテーブルの最大sizeを設定します。ハッシュテーブルの設定の詳細は別個の<a0>ドキュメント</a0>で提供されています。

バージョン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
応答ヘッダを含まないクライアントへ送信されるバイト数; この値はmod_log_config Apacheモジュールの"%B"パラメータと互換性があります。
$bytes_sent
クライアントに送信されるバイト数(1.3.8, 1.2.5)
$connection
接続のシリアルナンバー(1.3.8, 1.2.5)
$connection_requests
一つの接続を通して作成される現在のリクエストの数(1.3.8, 1.2.5)
$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
workerプロセスのPID
$pipe
リクエストがパイプラインされている場合は"p"、そうでなければ"."(1.3.12, 1.2.7)
$proxy_protocol_addr
PROXYプロトコルヘッダからのクライアントアドレス、そうでなければ空文字列(1.5.12)

PROXYプロトコルはlistenディレクティブのproxy_protocol パラメータの設定によって前もって有効にされていなければなりません。

$proxy_protocol_port
PROXYプロトコルヘッダからのクライアントポート、そうでなければ空文字 (1.11.0)

PROXYプロトコルはlistenディレクティブのproxy_protocol パラメータの設定によって前もって有効にされていなければなりません。

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

リクエストボディがメモリ バッファから読み込まれる場合は、proxy_pass, fastcgi_pass, uwsgi_passscgi_pass ディレクティブで処理された変数の値はlocationの中で利用可能です。

$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
現在のリクエストのファイルパスは、root または aliasディレクティブと、リクエストの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
任意の応答ヘッダフィールド; 変数名の最後の部分は、ダッシュがアンダースコアで置き換えられた小文字化されたフィールド名
$server_addr
リクエストを受け付けたサーバのアドレス

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

$server_name
リクエストを受け付けたサーバの名前
$server_port
リクエストを受け付けたサーバのポート
$server_protocol
リクエストプロトコル、通常"HTTP/1.0"、"HTTP/1.1"あるいは"HTTP/2.0"
状態
応答ステータス (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
Common Log フォーマットのローカルタイム (1.3.12, 1.2.7)
$uri
リクエスト中の現在のURI、正規化されたもの

$uriの値はリクエスト処理の間で変わるかも知れません。例えば内部リダイレクトをする時またはindexファイルを使う時。

TOP
inserted by FC2 system