Кэш FastCGI всегда является МИСС

Так, я имею, устанавливают кэш 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 использовать кэш, когда вышеупомянутые правила не применяются? Я отчасти потерян в этой возможности кэширования.

4
задан 1 May 2015 в 17:05
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缓存控制实用程序;

8
ответ дан 3 December 2019 в 02:50

Теги

Похожие вопросы