Nginx

如何避免使用 fastcgi_cache 的 url?

  • August 4, 2018

如何避免使用 fastcgi_cache 的 url?

不需要記憶體列表,例如

projectdomain.com/a
projectdomain.com/b
projectdomain.com/c/d

vi /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;

 ...

vi /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;
 }
}

為避免記憶體請求,您應該一起使用fastcgi_no_cachefastcgi_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;

引用自:https://serverfault.com/questions/734716