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" 헤더 필드는 응답 캐싱 시간을 초 단위로 설정합니다. 0 값은 응답 캐싱을 비활성화합니다. 값이 @ 접두사로 시작하는 경우 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;
.