ngx_http_fastcgi_module モジュール

設定例
ディレクティブ
     fastcgi_bind
     fastcgi_buffer_size
     fastcgi_buffering
     fastcgi_buffers
     fastcgi_busy_buffers_size
     fastcgi_cache
     fastcgi_cache_background_update
     fastcgi_cache_bypass
     fastcgi_cache_key
     fastcgi_cache_lock
     fastcgi_cache_lock_age
     fastcgi_cache_lock_timeout
     fastcgi_cache_max_range_offset
     fastcgi_cache_methods
     fastcgi_cache_min_uses
     fastcgi_cache_path
     fastcgi_cache_purge
     fastcgi_cache_revalidate
     fastcgi_cache_use_stale
     fastcgi_cache_valid
     fastcgi_catch_stderr
     fastcgi_connect_timeout
     fastcgi_force_ranges
     fastcgi_hide_header
     fastcgi_ignore_client_abort
     fastcgi_ignore_headers
     fastcgi_index
     fastcgi_intercept_errors
     fastcgi_keep_conn
     fastcgi_limit_rate
     fastcgi_max_temp_file_size
     fastcgi_next_upstream
     fastcgi_next_upstream_timeout
     fastcgi_next_upstream_tries
     fastcgi_no_cache
     fastcgi_param
     fastcgi_pass
     fastcgi_pass_header
     fastcgi_pass_request_body
     fastcgi_pass_request_headers
     fastcgi_read_timeout
     fastcgi_request_buffering
     fastcgi_send_lowat
     fastcgi_send_timeout
     fastcgi_socket_keepalive
     fastcgi_split_path_info
     fastcgi_store
     fastcgi_store_access
     fastcgi_temp_file_write_size
     fastcgi_temp_path
FastCGIサーバへ渡されるパラメータ
組み込み変数

ngx_http_fastcgi_moduleモジュールはリクエストをFastCGIサーバに渡すことを許可します。

設定例

location / {
    fastcgi_pass  localhost:9000;
    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
    fastcgi_param QUERY_STRING    $query_string;
    fastcgi_param REQUEST_METHOD  $request_method;
    fastcgi_param CONTENT_TYPE    $content_type;
    fastcgi_param CONTENT_LENGTH  $content_length;
}

ディレクティブ

構文: fastcgi_bind address [transparent] | off;
デフォルト: -
コンテキスト: http, server, location

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

FastCGIサーバへ向かって出て行く接続が、指定したローカルのIPアドレスとオプションのポートから始まるようにします (1.11.2)。パラメータの値には変数を含めることができます (1.3.12)。特別な値off (1.3.12) は上の設定レベルのfastcgi_bindディレクティブの継承の影響をキャンセルします。これによりシステムはローカルIPアドレスとポートに自動割り当てすることができます。

transparent パラメータ (1.11.0) はFastCGIサーバへ向かって出ていく接続がローカルIPアドレスでは無いようにします。例えば、クライアントの実際のIPアドレス:

fastcgi_bind $remote_addr transparent;

このパラメータが動作するためには、通常nginxのワーカープロセスを superuser 権限を使って実行する必要があります。Linux上では、transparentパラメータが指定された場合はワーカープロセスはマスタープロセスからCAP_NET_RAW機能を継承するため、必要ではありません (1.13.8)。FastCGIサーバからのネットワーク通信を捕らえるためにカーネルのルーティングテーブルを設定する必要もあります。

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

FastCGIサーバから応答の最初の部分を読み込むために使われるバッファのsizeを設定します。この部分は通常小さな応答ヘッダを含んでいます。デフォルトでは、バッファサイズはメモリページと同じサイズです。これは4Kあるいは8kです。プラットフォームに依存します。しかしながら、もっと小さくすることができます。

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

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

FastCGIサーバからの応答のバッファリングを有効または無効にします。

バッファリングが有効な場合、nginxはFastCGIサーバからできるだけ早く応答を受け取り、 fastcgi_buffer_sizefastcgi_buffers ディレクティブで設定されるバッファに保存します。全ての応答がメモリに収まらない場合、一部をディスク上のtemporary fileに保存することができます。一時ファイルへの書き込みは、fastcgi_max_temp_file_sizefastsgi_temp_file_write_size ディレクティブを使って制御することができます。

バッファリング無効な場合は、応答を受け取るとすぐにクライアントに同期して渡されます。nginxはFastCGIサーバから全ての応答を読み込もうとはしないでしょう。nginxがサーバから同時に受け取れるデータの最大サイズは、fastsgi_buffer_size ディレクティブによって設定されます。

"X-Accel-Buffering"応答ヘッダフィールドに"yes"または"no"を渡すことで、バッファリングを有効または無効にすることができます。この機能はfastsgi_ignore_headersディレクティブを使って無効にすることができます。

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

接続ごとにFastCGIサーバからの応答を読み込むために使われるバッファのnumbersizeを設定します。デフォルトでは、バッファサイズはメモリページと同じサイズです。これは4Kあるいは8kです。プラットフォームに依存します。

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

FastCGIサーバからの応答の buffering を有効にした場合、応答がまだ全て読み込まれていない間にクライアントに応答を送るのに忙しくなりえるバッファのsize を制限します。一方で、バッファの残りが応答を読み込むために使われることがあります。もし必要であれば応答の一部分が一時ファイルにバッファされます。デフォルトでは、sizefastcgi_buffer_sizefastcgi_buffers ディレクティブで設定される二つのバッファのサイズによって制限されます。

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

キャッシュに使われる共有メモリ領域を定義します。同じ領域が幾つかの場所で使われるかも知れません。パラメータ値は変数を含むことができます (1.7.9)。off パラメータは、前の設定レベルから継承したキャッシングを無効にします。

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

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

古いキャッシュされた応答がクライアントに返され間、期限切れになったキャッシュ項目を更新するためにバックグランドのサブリクエストを開始することができます。更新されている時に古いキャッシュされた応答の使用を許可 する必要があることに注意してください。

構文: fastcgi_cache_bypass string ...;
デフォルト: -
コンテキスト: http, server, location

応答がキャッシュから取れない時の条件を設定します。stringパラメータのうちの一つでも空では無く"0"に等しくない場合は、応答はキャッシュから取り出されないでしょう:

fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
fastcgi_cache_bypass $http_pragma    $http_authorization;

fastgi_no_cache ディレクティブと一緒に使うことができます。

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

キャッシュのためのキーを定義します。例えば

fastcgi_cache_key localhost:9000$request_uri;

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

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

有効にされた場合は、リクエストをfastcgiサーバに渡すことで一度に一つのリクエストがfastcgi_cache_keyディレクティブによって識別される新しいキャッシュエレメントを生成するようにできるでしょう。同じキャッシュエレメントの他のリクエストは、fastcgi_cache_lock_timeoutディレクティブで設定された時間まで、キャッシュの中に現れるまで応答を待つか、このエレメントのキャッシュロックが開放されるのを待つかするでしょう。

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

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

もし指定されたtimeの間、新しいキャッシュ要素を作るためにFastCGIサーバへ送信された最後のリクエストが完了しない場合は、FastCGIサーバへもう一つのリクエストが渡されるかも知れません。

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

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

fastcgi_cache_lockのタイムアウトを設定します。timeが期限切れになると、リクエストはFastCGIサーバに渡されるでしょうが、応答はキャシュされないでしょう。

1.7.8以前は応答はキャッシュされました。

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

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

バイトレンジ リクエストについてバイトでオフセットを設定します。範囲がオフセットを超える場合は、レンジ リクエストはFastCGIサーバに渡され、応答はキャッシュされないでしょう。

構文: fastcgi_cache_methods GET | HEAD | POST ...;
デフォルト:
fastcgi_cache_methods GET HEAD;
コンテキスト: http, server, location

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

クライアントのリクエストメソッドがこのリスディレクティブに列挙されている場合、応答はキャッシュされるでしょう。"GET"と"HEAD"メソッドは明示的に指定するように推奨されていますが、それらは常にリストに追加されます。fastcgi_no_cacheディレクティブも見てください。

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

応答がキャッシュされてからのリクエストのnumber を設定します。

構文: fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
デフォルト: -
コンテキスト: http

キャッシュのパスとその他のパラメータを設定します。キャッシュデータはファイルに保存されます。キーとキャッシュの中のファイル名の両方とも、プロキシされたURLにMD5関数を適用した結果です。levels パラメータはキャッシュの構造のレベルを定義します : 1から3。各レベルは1または2を受け付けます。例えば、次の設定の場合

fastcgi_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

キャッシュの中のファイル名は次のようになるでしょう:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c

キャッシュされた応答は、まず一時ファイルに書き込まれ、それからファイルがリネームされます。バージョン 0.8.9から、一時ファイルとキャッシュは異なるファイルシステムに置くことができます。しかし、この場合に注意が必要なのは、手軽なリネーム操作の代わりにファイルは二つのファイルシステムを超えてコピーされるということです。従って、どの指定されたlocationの一時ファイルに保持されるキャシュとディレクトリの両方が同じファイルシステムに配置されることが勧められます。一時ファイルのためのディレクトリはuse_temp_path パラメータに基づいて設定されます(1.7.10)。パラメータが省略あるいは値 onに設定されると、fastcgi_temp_pathディレクティブによって設定されたディレクトリが指定されたlocationに対して使われるでしょう。値が off に設定されると、一時ファイルは直接キャッシュディレクトリに配置されるでしょう。

更に、全てのアクティブなキーとデータに関する情報は共有メモリ領域に保持されます。その名前サイズkeys_zoneパラメータによって設定されます。一メガバイトの領域は約8000のキーを保持することができます。

商用許可の一部として、共有メモリ領域は拡張されたキャッシュ情報も格納し、従って同じ数のキーのためにより大きな領域サイズを指定する必要があります。例えば、1メガバイトの領域は約4000のキーを格納することができます。

inactiveパラメータによって設定された時間の間アクセスされなかったキャッシュデータは、その新しさに関係なくキャッシュから削除されます。デフォルトでは、inactiveは10分に設定されています。

特別な“cache manager”プロセスは、max_sizeパラメータで設定される最大キャッシュサイズを、ファイルシステム上でキャッシュを使ってmin_free (1.19.1) パラメータによって設定される最小空き容量を監視します。サイズを超えるか、または十分な空き領域が無い場合、最も使用頻度の低いデータが削除されます。データは、manager_filesmanager_thresholdmanager_sleepパラメータによって設定される繰り返しの中で削除されます (1.11.5)。1つの繰り返しの中では、anager_files 以下の項目が削除されます (デフォルトでは 100)。一回の繰り返しの持続期間は manager_threshold パラメータによって制限されます (デフォルトでは 200ミリ秒)。繰り返しの間は、loader_sleep パラメータ(デフォルトでは50ミリ秒)で設定される一時停止が置かれます。

その開始の1分後に、特別な"cache loader" プロセスが起動されます。それはファイルシステムに保持されている以前のキャッシュデータに関するデータをキャッシュ領域にロードします。そのロードも繰り返し行われます。一回の繰り返しではloader_files(デフォルトでは100)以下のアイテムがロードされます。その上、一回の繰り返しの持続期間は loader_thresholdパラメータ(デフォルトでは200ミリ秒)に制限されます。繰り返しの間は、loader_sleep パラメータ(デフォルトでは50ミリ秒)で設定される小休止が置かれます。

更に、次のパラメータが商用許可の一部として利用可能です:

purger=on|off
wildcard keyに一致するキャッシュエントリをキャッシュpurgerでディスクから削除するかどうかを伝えます (1.7.12)。パラメータを on (デフォルトは off)にすると、永続的に全てのキャッシュエントリを数え上げワイルドカードキーに一致するエントリを削除する"cache purger" プロセスを有効にするでしょう。
purger_files=number
繰り返しの間に走査される項目の数を設定します (1.7.12)。デフォルトでは、purger_files は10に設定されます。
purger_threshold=number
1回の繰り返しの持続時間を設定します (1.7.12)。デフォルトでは、purger_threshold は50ミリ秒に設定されます。
purger_sleep=number
繰り返しの間の休止を設定します (1.7.12)。デフォルトでは、purger_sleep は50ミリ秒に設定されます。

バージョン 1.7.3, 1.7.7 と 1.11.10 では、キャッシュヘッダのフォーマットが変わりました。以前にキャッシュされた応答は新しいnginxバージョンにアップグレードした後で無効だと見なされるでしょう。

構文: fastcgi_cache_purge string ...;
デフォルト: -
コンテキスト: http, server, location

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

キャッシュの一掃リクエストと見なされるリクエストの条件を定義します。stringパラメータのうちの一つでも空では無く"0"と等しくない場合は、cache keyに対応するキャッシュエントリが削除されます。操作が成功した結果は204(No Content)応答が返されることによって示されます。

一掃リクエストのcache keyが("*")で終わる場合は、ワイルドカードに一致する全てのキャッシュのエントリがキャッシュから削除されます。ただし、これらのエントリは、非アクティブのために削除されるか、cache purger(1.7.12)によって処理されるか、クライアントがアクセスしようとするまで、ディスクに残ります。

設定例

fastcgi_cache_path /data/nginx/cache keys_zone=cache_zone:10m;

map $request_method $purge_method {
    <s0>'purge'</s0>
    default 0;
}

server {
    ...
    location / {
        fastcgi_pass        backend;
        fastcgi_cache       cache_zone;
        fastcgi_cache_key   $uri;
        fastcgi_cache_purge $purge_method;
    }
}

この機能は商用許可の一部として利用可能です。

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

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

"If-Modified-Since"と"If-None-Match"ヘッダフィールドを持つ条件付きリクエストを使って、expireしたアイテムの再検証を有効にします。

構文: fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | http_429 | off ...;
デフォルト:
fastcgi_cache_use_stale off;
コンテキスト: http, server, location

FastCGIサーバとの通信でエラーが起きた場合に、新鮮ではない応答が使われるかどうかを決定します。ディレクティブのパラメータはfastcgi_next_upstreamディレクティブのパラメータと一致します。

もしリクエストを処理するためのFastCGIサーバが選択できない場合は、error パラメータは新鮮ではないキャッシュ応答を使うことも許可します。

更に、updatingパラメータはもしキャッシュが更新されていても新鮮ではないキャッシュ応答を使うことを許可します。これにより、キャッシュされたデータの更新時にFastCGIサーバへのアクセス数を最小限にすることができます。

応答が古くなった後で指定された秒数の間応答ヘッダの中で古くなったキャッシュされた応答の使用が有効になるかも知れません。これはディレクティブパラメータの使用よりも優先度が低いです。

新しいキャッシュの要素を作るときに、FastCGIサーバへのアクセス数を最小限にするには、 fastcgi_cache_lock ディレクティブが使われるかも知れません。

構文: fastcgi_cache_valid [code ...] time;
デフォルト: -
コンテキスト: http, server, location

異なる応答コードのためのキャシュ時間を設定します。例えば、次のディレクティブは、

fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404      1m;

応答コード200と302には10分、応答コード404には1分を設定します。

キャッシング時間だけを指定するには、

fastcgi_cache_valid 5m;

そして、200、301と302の応答だけがキャッシュされます。

更に、any パラメータで全ての応答をキャッシュするように設定することができます。

fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301      1h;
fastcgi_cache_valid any      1m;

キャッシングのパラメータは、応答ヘッダの中に直接設定するようにもできます。これはディレクティブを使ってキャッシュ時間を設定するよりも優先されます。

これらの一つ以上の応答フィールドの処理を無効にするには、fastcgi_ignore_headers ディレクティブを使います。

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

FastCGIサーバから受け取る応答のエラーストリームから検索する文字列を設定します。もしstringが見つかった場合、FastCGIサーバがinvalid responseを返したと見なします。これにより、nginxでアプリケーションエラーを処理することが可能です。例えば:

location /php/ {
    fastcgi_pass backend:9000;
    ...
    fastcgi_catch_stderr "PHP Fatal error";
    fastcgi_next_upstream error timeout invalid_header;
}

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

FastCGIサーバとの接続の確立のタイムアウトを定義します。このタイムアウトは通常75秒以上にならないことに注意が必要です。

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

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

応答の中の"Accept-Ranges"フィールドに応じてFastCGIサーバからのキャッシュおよびキャッシュされていない応答の両方において、byte-rangeのサポートを有効にします。

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

デフォルトでは、nginxはFastCGIサーバからクライアントへの"Status"と"X-Accel-..."ヘッダフィールドを通しません。fastcgi_hide_headerディレクティブは、更に通過されないフィールドを設定します。逆に、フィールドの通過が必要な場合は、fastcgi_pass_headerディレクティブを使うことができます。

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

クライアントが応答を待たずに接続を閉じたときに、FastCGIサーバとの接続を閉じるかどうかを決定します。

構文: fastcgi_ignore_headers field ...;
デフォルト: -
コンテキスト: http, server, location

FastCGIサーバからの特定の応答ヘッダフィールドの処理を無効にします。次のフィールドを無視することができます: "X-Accel-Redirect", "X-Accel-Expires", "X-Accel-Limit-Rate" (1.1.6), "X-Accel-Buffering" (1.1.6), "X-Accel-Charset" (1.1.6), "Expires", "Cache-Control", "Set-Cookie" (0.8.44)、および"Vary" (1.7.7)。

無効にされない場合、これらのヘッダフィールドの処理には次の影響があります:

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

$fastcgi_script_name 変数の値の中のスラッシュで終わるURIの後に追加されるファイル名を設定します。例えば、この設定の場合

fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;

"/page.php"リクエストは、SCRIPT_FILENAMEパラメータは "/home/www/scripts/php/page.php"と等しく、/"リクエストは"/home/www/scripts/php/index.php"に等しくなるでしょう。

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

FastCGIサーバの300以上の応答コードが、クライアントへ渡されるべきかまたは遮断されるべきか、そしてerror_page ディレクティブで処理するためにnginxにリダイレクトすべきかを決定します。

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

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

デフォルトでは、FastCGIサーバは応答を送信してすぐに接続を閉じるでしょう。しかし、このディレクティブがonに設定されると、nginxはFastCGIサーバに接続を開いたままにするように指示します。これは、特にFastCGIサーバにkeepalive接続を機能させるために必要です。

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

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

FastCGIサーバから応答を読み込む時のスピードを制限します。rateは秒間あたりのバイトで指定されます。0の値はレートの制限を無効にします。制限はリクエストごとに設定されます。もしnginxがFastCGIサーバに同時に二つの接続を開いた場合は、全体のレートは指定された制限の二倍になるでしょう。この制限はFastCGIサーバからの応答のbufferingが有効な場合にのみ動作します。

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

FastCGIサーバからの応答のbuffering が有効な場合で、応答の全体が fastcgi_buffer_sizefastcgi_buffers ディレクティブで設定されるバッファに収まらない場合に、応答の一部を一時ファイルに保存することができます。このディレクティブは一時ファイルのsize最大値を設定します。一時ファイルに一度に書き込まれるデータのサイズは、fastcgi_temp_file_write_sizeディレクティブで設定されます。

0の値は、一時ファイルの応答のバッファリングを無効にします。

この制限はディスク上に cached あるいは stored される応答については適用されないでしょう。

構文: fastcgi_next_upstream error | timeout | invalid_header | http_500 | http_503 | http_403 | http_404 | http_429 | non_idempotent | off ...;
デフォルト:
fastcgi_next_upstream error timeout;
コンテキスト: http, server, location

どの場合にリクエストが次のサーバに渡されるべきかを指定します:

エラー
サーバへの接続の確立時、あるいはサーバにリクエストを渡す時、あるいは応答ヘッダーを読み込む時にエラーが起きた場合;
timeout
サーバへの接続の確立時、あるいはサーバにリクエストを渡す時、あるいは応答ヘッダーを読み込む時にタイムアウトが起きた場合;
invalid_header
サーバが空あるいは無効な応答を返した場合;
http_500
サーバがコード500の応答を返した場合;
http_503
サーバがコード503を返した場合;
http_403
サーバがコード403を返した場合;
http_404
サーバがコード404の応答を返した場合;
http_429
サーバがコード429の応答を返した場合 (1.11.13);
non_idempotent
もしリクエストがupstream サーバに送信された場合は、通常 non-idempotent メソッド (POST, LOCK, PATCH) のリクエストは次のサーバに渡されません(1.9.13); このオプションを有効にすると明示的にそのようなリクエストの再試行を行うことができます。
off
リクエストを次のサーバに渡すのを無効化する。

まだクライアントに何も送っていない時にのみ、リクエストを次のサーバに渡す事ができるということを、心に留めておいてください。応答の転送中にエラーまたはタイムアウトが起きると、この修復は不可能です。

このディレクティブは何をサーバとの通信の失敗と見なすかについても定義します。error, timeoutinvalid_header は、ディレクティブの中で指定されていなくても常に失敗と見なされます。http_500, http_503http_429 がディレクティブの中で指定されている時のみ、失敗と見なされます。http_403http_404 の場合は、失敗と見なされません。

次のサーバへリクエストを渡すことを 試行回数 および 時間で制限することができます。

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

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

次のサーバに渡すことができるリクエストの間隔を制限します。0 の値はこの制限を無効にします。

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

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

次のサーバにリクエストが渡すときに、可能な試行回数を制限します。0 の値はこの制限を無効にします。

構文: fastcgi_no_cache string ...;
デフォルト: -
コンテキスト: http, server, location

応答がキャッシュに保存されない状況を定義します。stringパラメータのうちの一つでも空では無く"0"に等しくない場合は、応答は保存されないでしょう。

fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
fastcgi_no_cache $http_pragma    $http_authorization;

fastcgi_cache_bypass ディレクティブと一緒に使うことができます。

構文: fastcgi_param parameter value [if_not_empty];
デフォルト: -
コンテキスト: http, server, location

FastCGIサーバに渡されるべき parameter を設定します。valueにはテキスト、 変数、それらの組み合わせを含むことができます。現在のレベルにfastcgi_paramディレクティブが無い場合に限り、これらのディレクティブは上の設定レベルから引き継がれます。

次の例では、PHPのために最小限必要な設定を示します。

fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING    $query_string;

PHPではスクリプトの名前を決定するために SCRIPT_FILENAMEパラメータが使われます。そしてQUERY_STRING パラメータはリクエストパラメータを渡すために使われます。

POST リクエストを処理するスクリプトには、次の3つのパラメータが必要とされます:

fastcgi_param REQUEST_METHOD  $request_method;
fastcgi_param CONTENT_TYPE    $content_type;
fastcgi_param CONTENT_LENGTH  $content_length;

PHPが--enable-force-cgi-redirect configurationパラメータでビルドされた場合、REDIRECT_STATUS パラメータも"200"の値と一緒に渡されるべきです。

fastcgi_param REDIRECT_STATUS 200;

ディレクティブがif_not_empty (1.1.11)で指定されている場合、そのようなパラメータは値が空では無い場合のみ、サーバに渡されないでしょう:

fastcgi_param HTTPS           $https if_not_empty;

構文: fastcgi_pass address;
デフォルト: -
コンテキスト: location, if in location

FastCGIサーバのアドレスを設定します。アドレスはドメイン名またはIPアドレスと、ポートで指定することができます。

fastcgi_pass localhost:9000;

あるいは、UNIXドメインソケットパス:

fastcgi_pass unix:/tmp/fastcgi.socket;

ドメイン名が幾つかのアドレスに解決される場合は、ラウンドロビンの形式でそれら全てが使われるでしょう。更に、server groupとしてアドレスを指定することができます。

パラメータの値には変数を含めることができます。この場合、アドレスがドメイン名として指定されない場合、名前はサーバ グループと記述された中で検索され、もし見つからない場合はレゾルバを使って決定されます。

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

FastCGIサーバからクライアントへ渡すことを許可する 逆に無効にする ヘッダフィールド

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

元のリクエストボディがFastCGIサーバへ渡されるかどうかを指示します。fastcgi_pass_request_body ディレクティブも見てください。

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

元のリクエストのヘッダフィールドがFastCGIサーバへ渡されるかどうかを指示します。fastcgi_pass_request_body ディレクティブも見てください。

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

FastCGIサーバから応答を読み込む時のタイムアウトを定義します。タイムアウトは二つの連続する読み込み操作の間に設定され、応答全体の転送のためのものではありません。この時間内にFastCGIサーバが何も転送しなかった場合、接続が閉じられます。

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

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

クライアント リクエスト ボディのバッファを有効または無効にします。

バッファが有効な場合は、リクエストをFastCGIサーバに渡す前にリクエストボディの全体が読み込まれます。

バッファリングが無効な場合は、リクエストボディを受け取るとすぐにFastCGIサーバに送信されます。この場合、nginxがすでにリクエストボディの送信を開始している場合は、リクエストは次のサーバに渡すことができません。

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

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

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

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

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

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

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

FastCGIサーバへの送信接続の“TCP keepalive”の動作を設定します。デフォルトでは、オペレーティングシステムの設定はソケットに対して有効です。ディレクティブが値“on”に設定されている場合、ソケットのSO_KEEPALIVEソケットオプションがオンになります。

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

$fastcgi_path_info 変数の値を捕らえる正規表現を定義します。正規表現は二つの捕獲物を持たなければなりません: 最初の一つは$fastcgi_script_name 変数の値で、二つ目は$fastcgi_path_info変数の値です。例えば、この設定の場合

location ~ ^(.+\.php)(.*)$ {
    fastcgi_split_path_info       ^(.+\.php)(.*)$;
    fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
    fastcgi_param PATH_INFO       $fastcgi_path_info;

そして、/show.php/article/0001"リクエストは、SCRIPT_FILENAME パラメータは"/path/to/php/show.php"に等しく、PATH_INFO パラメータは"/article/0001"に等しくなるでしょう。

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

ファイルのディスクへの保存を有効にします。onパラメータはファイルをalias または rootディレクティブに対応するパスに保存します。offパラメータはファイルの保存を無効にします。更に、ファイル名は明示的に変数とともにstring を使って設定することができます:

fastcgi_store /data/www$original_uri;

ファイルの修正時間は受け取った"Last-Modified"応答ヘッダフィールドに従って設定されます。応答はまず一時ファイルに書き込まれ、それからファイルはリネームされます。バージョン0.8.9から、一時ファイルと恒久的な保存は別のファイルシステムに置くことができます。しかし、この場合に注意が必要なのは、手軽なリネーム操作の代わりにファイルは二つのファイルシステムを超えてコピーされるということです。従って、いずれの指定されたlocationの保存されたファイルと一時ファイルを保持するディレクトリの両方が、fastcgi_temp_path ディレクティブによって同じファイルシステムに配置することが薦められます。

このディレクティブは静的に変更されないファイルのローカルコピーを作成するために使うことができます。例えば:

location /images/ {
    root                 /data/www;
    error_page           404 = /fetch$uri;
}

location /fetch/ {
    internal;

    fastcgi_pass         backend:9000;
    ...

    fastcgi_store        on;
    fastcgi_store_access user:rw group:rw all:r;
    fastcgi_temp_path    /data/temp;

    alias                /data/www/;
}

構文: fastcgi_store_access users:permissions ...;
デフォルト:
fastcgi_store_access user:rw;
コンテキスト: http, server, location

新しく作成されたファイルとディレクトリにアクセスパーミッションを設定します。例えば:

fastcgi_store_access user:rw group:rw all:r;

何らかのgroup または all アクセスパーミッションが指定された場合には、userパーミッションは省略されるかも知れません:

fastcgi_store_access group:rw all:r;

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

FastCGIサーバから一時ファイルへの応答のバッファリングが有効にされた場合、一時ファイルに一度に書き込まれるデータのsizeを制限します。 デフォルトでは、sizefastcgi_buffer_sizefastcgi_buffers ディレクティブで設定される二つのバッファによって制限されます。一時ファイルの最大サイズは fastcgi_max_temp_file_sizeディレクティブによって設定されます。

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

FastCGIサーバから受け取るデータを保持する一時ファイルのディレクトリを定義します。指定されたディレクトリの下に3レベルまでのサブディレクトリ構造を使うことができます。例えば、次の設定の場合

fastcgi_temp_path /spool/nginx/fastcgi_temp 1 2;

テンポラリファイルはこのようになります:

/spool/nginx/fastcgi_temp/7/45/00000123457

fastcgi_cache_pathディレクティブのuse_temp_path パラメータも見てください。

<a86>FastCGIサーバに渡されるパラメータ</a86><br87>

HTTPリクエストヘッダフィールドはFastCGIサーバにパラメータとして渡されます。FastCGIサーバとして動いているアプリケーションやスクリプトの中で、これらのパラメータは通常は環境変数として利用可能です。例えば、"User-Agent"ヘッダフィールドはHTTP_USER_AGENTパラメータとして渡されます。HTTPリクエストヘッダフィールドに加えて、任意のパラメータをfastcgi_param ディレクティブを使って渡すことができます。

埋め込み変数

ngx_http_fastcgi_module モジュールはfastcgi_paramディレクティブを使ってパラメータを設定するために使える埋め込み変数をサポートします。

$fastcgi_script_name
リクエストURI、またはもしURIがスラッシュで終わる場合はfastcgi_index ディレクティブで設定されたindexファイルを追加したリクエストURIこの変数は、PHPでのスクリプト名を決定するSCRIPT_FILENAMEPATH_TRANSLATEDパラメータを設定するために使うことができます。 例えば、次のディレクティブを持つ"/info/"リクエストについて
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
SCRIPT_FILENAMEパラメータは"/home/www/scripts/php/info/index.php"に等しいでしょう。

fastcgi_split_path_info ディレクティブを使っている場合は、$fastcgi_script_name変数はディレクティブによって設定される最初の捕獲物の値に等しいでしょう。

$fastcgi_path_info
fastcgi_split_path_info ディレクティブによって設定される二つ目の捕獲物の値です。この変数はPATH_INFO パラメータを設定するために使うことができます。

TOP
inserted by FC2 system