Cache FastCGI é sempre um MISS

3

Então, eu configurei o cache FastCGI assim:

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;
}

E além do bloco server{} , tenho:

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;

O problema é que meu script PHP (vBulletin) está sempre enviando um Pragma & Cache-Control private . Existe alguma maneira de ignorar esses cabeçalhos e forçar o FastCGI a usar o cache quando as regras acima não se aplicam? Estou meio que perdido nessa possibilidade de cache.

    
por Joran Den Houting 01.05.2015 / 16:05

1 resposta

7

O Nginx interpreta um monte de cabeçalhos quando usado como um proxy reverso para honrar as especificações de caches intermediários HTTP. Isso significa que os seguintes cabeçalhos, se presentes nas respostas do seu aplicativo, alterarão o comportamento do cache, conforme explicado:

  • 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).

No entanto, o nginx vem com a diretiva fastcgi_ignore_headers caso você queira transformar isso fora. Então, o que você está procurando é: fastcgi_ignore_headers Cache-Control Pragma; .

    
por 02.05.2015 / 08:43