だから、私はこのように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)が常にプラグマとキャッシュ制御private
を送信していることです。上記の場合、これらのヘッダーを無視してFastCGIにキャッシュを使用させる方法はありますか?ルールは適用されませんか?私はこのキャッシュの可能性にちょっと迷っています。
Nginxは、HTTP中間キャッシュ仕様を順守するためのリバースプロキシとして使用される場合、一連のヘッダーを解釈します。これは、次のヘッダーがアプリの返信に存在する場合、説明したようにキャッシュの動作を変更することを意味します。
「X-Accel-Expires」ヘッダーフィールドは、応答のキャッシュ時間を秒単位で設定します。ゼロの値は、応答のキャッシュを無効にします。値が@プレフィックスで始まる場合、エポックからの絶対時間を秒単位で設定します。この時間までは、応答がキャッシュされます。
ヘッダーに「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;
。