Ich habe den FastCGI-Cache wie folgt eingerichtet:
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;
}
Und oben auf dem server{}
Block habe ich:
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;
Das Problem ist, dass mein PHP-Skript (vBulletin) immer ein Pragma & Cache-Control sendet private
. Gibt es eine Möglichkeit, diese Header zu ignorieren und FastCGI zu zwingen, den Cache zu verwenden, wenn die oben genannten Regeln nicht gelten? Ich bin mit dieser Caching-Möglichkeit irgendwie überfordert.
Antwort1
Nginx interpretiert eine Reihe von Headern, wenn es als Reverse-Proxy verwendet wird, um die Spezifikationen für HTTP-Zwischencaches zu berücksichtigen. Dies bedeutet, dass die folgenden Header, wenn sie in den Antworten Ihrer App vorhanden sind, das Caching-Verhalten wie erläutert ändern:
Das Header-Feld „X-Accel-Expires“ legt die Caching-Zeit einer Antwort in Sekunden fest. Der Wert Null deaktiviert das Caching für eine Antwort. Wenn der Wert mit dem Präfix @ beginnt, legt er eine absolute Zeit in Sekunden seit Epoche fest, bis zu der die Antwort zwischengespeichert werden kann.
Wenn der Header das Feld „X-Accel-Expires“ nicht enthält, können Parameter für die Zwischenspeicherung in den Header-Feldern „Expires“ oder „Cache-Control“ festgelegt werden.
Wenn der Header das Feld „Set-Cookie“ enthält, wird eine solche Antwort nicht zwischengespeichert.
Wenn der Header das Feld „Vary“ mit dem Sonderwert „*“ enthält, wird eine solche Antwort nicht zwischengespeichert (1.7.7). Wenn der Header das Feld „Vary“ mit einem anderen Wert enthält, wird eine solche Antwort unter Berücksichtigung der entsprechenden Felder des Anforderungsheaders zwischengespeichert (1.7.7).
Allerdings wird nginx mit demfastcgi_ignore_headers
Direktive, falls Sie dies ausschalten möchten. Sie suchen also nach: fastcgi_ignore_headers Cache-Control Pragma;
.