如何避免使用 fastcgi_cache 的 URL?
不需要缓存列表,例如
projectdomain.com/a
projectdomain.com/b
projectdomain.com/c/d
修改 /etc/nginx/nginx.conf
http {
fastcgi_cache_path /var/cache/fastcgi/projectdomain.com levels=1:2 keys_zone=projectdomain.com:10m inactive=5m;
add_header X-Fastcgi-Cache $upstream_cache_status;
...
修改 /etc/nginx/conf.d/default.conf
map $request_uri $dont_cache_uri {
default 0;
projectdomain.com/a 1;
projectdomain.com/b 1;
projectdomain.com/c/d 1;
}
server {
listen 80;
server_name projectdomain.com www.projectdomain.com;
access_log /var/log/nginx/projectdomain.com.access.log;
root /var/www/html/projectdomain.com;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$query_string;
client_max_body_size 1G;
location ~ ^/sitemap/(.*)$ {
root /var/www/html/projectdomain.com/app/Sitemap/SitemapGz;
}
location /robots.txt {
alias /var/www/html/projectdomain.com/app/robots.txt;
}
location ~ ^/(android-chrome-36x36.png|android-chrome-48x48.png|android-chrome-72x72.png|android-chrome-96x96.png|android-chrome-144x144.png|android-chrome-192x192.png|apple-touch-icon-57x57.png|apple-touch-icon-60x60.png|apple-touch-icon-72x72.png|apple-touch-icon-76x76.png|apple-touch-icon-114x114.png|apple-touch-icon-120x120.png|apple-touch-icon-144x144.png|apple-touch-icon-152x152.png|apple-touch-icon-180x180.png|apple-touch-icon-precomposed.png|apple-touch-icon.png|browserconfig.xml|favicon-16x16.png|favicon-32x32.png|favicon-96x96.png|favicon.ico|manifest.json|mstile-70x70.png|mstile-144x144.png|mstile-150x150.png|mstile-310x150.png|mstile-310x310.png|safari-pinned-tab.svg) {
root /var/www/html/projectdomain.com/app/favicons;
}
location ~ ^/(images/|javascripts/|stylesheets/|fonts) {
root /var/www/html/projectdomain.com/app/assets;
access_log off;
expires max;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
# cache
fastcgi_cache projectdomain.com;
fastcgi_cache_valid 200 60m;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_key $scheme$request_method$host$request_uri;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
fastcgi_cache_bypass $dont_cache_uri;
fastcgi_no_cache $dont_cache_uri;
}
}
答案1
为了避免缓存请求,你应该使用fastcgi_no_cache
和fastcgi_cache_bypass
一起。第一个告诉 nginx 不要缓存响应,第二个告诉 nginx 不要尝试在缓存中查找文档。
例如,为了避免缓存任何带有查询字符串的请求:
fastcgi_cache_bypass $is_args;
fastcgi_no_cache $is_args;
为了避免缓存带有名为“logged_in_user”的 cookie 的请求:
fastcgi_cache_bypass $cookie_logged_in_user;
fastcgi_no_cache $cookie_logged_in_user;
不过,为了避免缓存特定路径,你需要将其与map
,其中列出了您不想缓存的 URL。请注意,map
必须出现在每个server
块的外部和http
块的内部。
map $request_uri $dont_cache_uri {
default 0;
/a 1;
/b 1;
/c/d 1;
}
然后您就可以避免缓存以上所有内容。
fastcgi_cache_bypass $is_args $cookie_logged_in_user $dont_cache_uri;
fastcgi_no_cache $is_args $cookie_logged_in_user $dont_cache_uri;