私は次のようにFastCGIキャッシュを設定しました:
location ~ \.php(/.*)?$ {
fastcgi_cache RWI;
fastcgi_cache_valid 200 60m;
set $nocache 0;
if ($request_method = POST)
{
set $nocache 1;
}
if ($http_cookie ~ (rwi_userid*|rwi_password*)) {
set $nocache 1;
}
if ($request_uri ~* "/(vb/admincp/)") {
set $nocache 1;
}
fastcgi_no_cache $nocache;
fastcgi_cache_bypass $nocache;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass "unix:/var/www/vhosts/system/{domain}/php-fpm.sock";
include /etc/nginx/fastcgi.conf;
}
そしてブロックの上には次のserver{}
ものがあります:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=RWI:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache $upstream_cache_status;
問題は、私の PHP スクリプト (vBulletin) が常に Pragma & Cache-Control を送信していることですprivate
。上記のルールが適用されない場合に、これらのヘッダーを無視して FastCGI にキャッシュを使用させる方法はありますか? このキャッシュの可能性については、よくわかりません。
答え1
Nginx は、リバース プロキシとして使用される場合、HTTP 中間キャッシュ仕様を尊重するために一連のヘッダーを解釈します。つまり、アプリの応答に次のヘッダーが存在する場合、説明されているようにキャッシュ動作が変更されます。
「X-Accel-Expires」ヘッダー フィールドは、応答のキャッシュ時間を秒単位で設定します。値が 0 の場合、応答のキャッシュは無効になります。値が @ プレフィックスで始まる場合、応答がキャッシュされる Epoch からの絶対時間を秒単位で設定します。
ヘッダーに「X-Accel-Expires」フィールドが含まれていない場合、キャッシュのパラメータはヘッダーフィールド「Expires」または「Cache-Control」で設定できます。
ヘッダーに「Set-Cookie」フィールドが含まれている場合、そのような応答はキャッシュされません。
ヘッダーに特別な値「*」を持つ「Vary」フィールドが含まれている場合、そのような応答はキャッシュされません (1.7.7)。ヘッダーに別の値を持つ「Vary」フィールドが含まれている場合、そのような応答は対応するリクエストヘッダーフィールドを考慮してキャッシュされます (1.7.7)。
しかし、nginxにはfastcgi_ignore_headers
これをオフにしたい場合は、ディレクティブを使用します。つまり、探しているものは次のとおりですfastcgi_ignore_headers Cache-Control Pragma;
。