FastCGI cache is always a MISS
So, I've setup FastCGI cache like this:
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;
}
And on top of the server{}
block I have:
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;
Problem is my PHP script (vBulletin) is always sending a Pragma & Cache-Control private
. Is there any way to ignore those headers and force FastCGI to use cache when the above rules don't apply? I'm kind of lost in this caching possibility.
Nginx interprets a bunch of headers when used as a reverse proxy to honor HTTP intermediate caches specifications. This means the following headers, if present in your app replies, will change caching behaviour as explained :
The “X-Accel-Expires” header field sets caching time of a response in seconds. The zero value disables caching for a response. If the value starts with the @ prefix, it sets an absolute time in seconds since Epoch, up to which the response may be cached.
If the header does not include the “X-Accel-Expires” field, parameters of caching may be set in the header fields “Expires” or “Cache-Control”.
If the header includes the “Set-Cookie” field, such a response will not be cached.
If the header includes the “Vary” field with the special value “*”, such a response will not be cached (1.7.7). If the header includes the “Vary” field with another value, such a response will be cached taking into account the corresponding request header fields (1.7.7).
However, nginx ships with the fastcgi_ignore_headers
directive in case you want to turn this off. So what you are looking for is : fastcgi_ignore_headers Cache-Control Pragma;
.