Кэш FastCGI «MISS» из-за конфликтующих заголовков в PHP-приложении?

Кэш FastCGI «MISS» из-за конфликтующих заголовков в PHP-приложении?

Я настроил кэш 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» устанавливает время кэширования ответа в секундах. Нулевое значение отключает кэширование для ответа. Если значение начинается с префикса @, оно устанавливает абсолютное время в секундах с Epoch, до которого ответ может кэшироваться.

  • Если заголовок не содержит поля «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;.

Связанный контент