我已經像這樣設定了 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」頭字段設定回應的快取時間(以秒為單位)。零值會禁用回應的快取。如果該值以@前綴開頭,則它會設定自紀元以來的絕對時間(以秒為單位),在此時間之前可以快取回應。
如果頭部不包含「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;
。