Nginx

FastCGI 記憶體總是一個 MISS

  • May 2, 2015

所以,我已經像這樣設置了 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 使用記憶體?我有點迷失在這種記憶體的可能性中。

Nginx 在用作反向代理以遵守 HTTP 中間記憶體規範時會解釋一堆標頭。這意味著以下標頭(如果您的應用回復中存在)將按照說明更改記憶體行為:

  • “X-Accel-Expires”標頭欄位設置響應的記憶體時間(以秒為單位)。零值禁用響應記憶體。如果該值以 @ 前綴開頭,則它設置自 Epoch 以來的絕對時間(以秒為單位),直到可以記憶體響應。
  • 如果頭部不包含“X-Accel-Expires”欄位,可以在頭部欄位“Expires”或“Cache-Control”中設置記憶體參數。
  • 如果標頭包含“Set-Cookie”欄位,則不會記憶體此類響應。
  • 如果標頭包含具有特殊值“*”的“Vary”欄位,則不會記憶體此類響應(1.7.7)。如果標頭包含具有另一個值的“Vary”欄位,則將考慮相應的請求標頭欄位(1.7.7)記憶體此類響應。

fastcgi_ignore_headers但是,如果您想關閉它,nginx 會附帶該指令。所以你要找的是:fastcgi_ignore_headers Cache-Control Pragma;

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