Я настроил кэш 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;
.