nginxでのFastCGIリクエストのキャッシュ

おはよう、ハブル!



この記事では、FastCGI要求をキャッシュするためのnginx構成の例を示します。 必要に応じて、一部はDDoSからhabraeffectから保護し、オプションとして、高負荷のサーバーの寿命を延ばすために使用できます。



「http」セクションでは、fastcgi_cacheキャッシュゾーンを宣言します。キャッシュは/ tmp / nginxフォルダーに2レベルのネストで保存され、最大サイズは256 MB、キーキャッシュは16 MBです(1日以上使用されていないオブジェクトは自動的に削除されます):

fastcgi_cache_path / tmp / nginx / levels = 1:2 keys_zone = fastcgi_cache:16m max_size = 256m inactive = 1d;


次に、「サーバー」セクションで、対応する場所を編集します。

場所〜\ .php $ {
             #PHPの標準構成
             fastcgi_pass unix:/tmp/php-fcgi.sock;
             fastcgi_index index.php;
             fastcgi_param SCRIPT_FILENAME / usr / local / www / somedir / $ fastcgi_script_name;
             fastcgi_paramsを含めます。
             fastcgi_param DOCUMENT_ROOT / usr / local / www / somedir /;
            
             fastcgi_pass_header cookie;  #cookieを適切な変数に渡す必要があります。たとえば、phpsessidという名前のcookieは変数に格納されます$ cookie_phpsessid

             fastcgi_ignore_headers Cache-Control Expires Set-Cookie;  #FastCGIサーバーから受信したキャッシュヘッダーを無視する

             fastcgi_cache_key "$ server_addr:$ server_port $ request_uri | $ cookie_phpsessid";  #一意のキーを形成します。 この場合、$ cookie_phpsessidでユーザーを区別します

             fastcgi_cache fastcgi_cache;  #上記で宣言したfastcgi_cacheキャッシュゾーンを使用する必要があると言います

             fastcgi_temp_path / tmp / nginx / temp 1 2;  #一時ファイルを保存するフォルダーを指定する

             fastcgi_cache_use_stale更新エラータイムアウトinvalid_header http_500;  #エラーが発生した場合、キャッシュオプションを使用します(廃止された場合でも)

             fastcgi_cache_valid 10s;  #回答200、301、302のキャッシュライフタイム

             #fastcgi_cache_valid any 10s;  #この方法で回答をキャッシュできます
             }


構成は、nginxバージョン> = 0.7.60でテストされました(=> 0.8.1で動作するはずですが、テストされていません)。



ドキュメント: モジュールディレクティブngx_http_fastcgi_moduleChangelog



upd: Cache-ControlヘッダーとExpiresヘッダーを無視しない場合、nginxはそれらのコンテンツに従って動作します(原則として論理的です)。



upd / 2011年1月28日:Set-Cookieパラメータがfastcgi_ignore_headersに追加されました(nginx / 0.8.44以降)



upd / 02/07/2011:検索クローラーの分離を実装する必要があります。 無視された場合、Cookieが発行から破棄される可能性があります



All Articles