Назад | Перейти на главную страницу

Кеш 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) всегда отправляет Pragma & Cache-Control private. Есть ли способ игнорировать эти заголовки и заставить FastCGI использовать кеш, когда вышеуказанные правила не применяются? Я как бы потерялся в этой возможности кеширования.

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 Cache-Control Pragma;.