所以,我已经设置FastCGIcaching像这样:
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使用caching时,上述规则不适用? 我有点迷失在这种caching的可能性。
当Nginx作为一个反向代理服务器来处理HTTP中间caching规范时,Nginx解释了一堆头文件。 这意味着如果您的应用程序回复中存在以下标题,则会按照说明更改caching行为:
“X-Accel-Expires”标题字段以秒为单位设置响应的caching时间。 零值会禁用响应的caching。 如果该值以@前缀开头,则它设置自Epoch以来的绝对时间(以秒为单位),响应可以被caching到该时间。
如果标题不包括“X-Accel-Expires”字段,则可以在标题字段“Expires”或“Cache-Control”中设置caching参数。
如果头部包含“Set-Cookie”字段,则不会caching这样的响应。
如果头部包含具有特殊值“*”的“Vary”字段,则这种响应不会被caching(1.7.7)。 如果头部包含带有另一个值的“Vary”字段,则考虑到相应的请求头字段(1.7.7),这样的响应将被caching。
但是,如果您想closures此function,nginx将附带fastcgi_ignore_headers指令。 所以你要找的是: fastcgi_ignore_headers Cache-Control Pragma; 。