Nginx

nginx“fastcgi_cache_valid 404”不工作

  • December 13, 2016

我正在用 nginx 做簡單的記憶體。它適用於 200 個響應,但 404 個響應由於某種原因沒有“命中”記憶體邏輯,我不明白為什麼。

我所說的“沒有命中記憶體邏輯”是基於我的add_header X-Cached. 如果是 404 響應,則根本不會出現此標頭。

404 響應:

< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Mon, 05 Dec 2016 09:54:34 GMT
< Content-Type: application/json
< Content-Length: 55
< Connection: keep-alive
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache

200 回复:

< HTTP/1.1 200 OK
< Server: nginx
< Date: Mon, 05 Dec 2016 09:54:56 GMT
< Content-Type: application/json
< Content-Length: 1186
< Connection: keep-alive
< Set-Cookie: PHPSESSID=5hq364dphuo8ka26sbcadiak74; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate
< Pragma: no-cache
< X-Cached: MISS

相關的nginx配置:

location / {
   try_files $uri /index.php$is_args$args;
}

location ~ \.php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/run/php/php7.0-fpm.sock;

   fastcgi_cache_key $request_uri?$is_args$args;
   fastcgi_cache CACHENAME;
   fastcgi_cache_valid 200 90d;
   fastcgi_cache_valid 404 365d;
   fastcgi_cache_use_stale updating error timeout invalid_header http_404 http_500;

   fastcgi_cache_methods GET HEAD;
   fastcgi_ignore_headers Cache-Control Set-Cookie Expires X-Accel-Expires Vary;

   add_header X-Cached $upstream_cache_status;
}

我的應用程序是一個 REST API,所以 404 的響應只是說路由返回了錯誤的響應。我希望記憶體此響應。

我究竟做錯了什麼?感謝您的任何想法!

Alexey 提到我的指令缺少always標誌。add_header

add_header*如果響應程式碼等於 200、201、204、206、301、302、303、304 或 307,*則將指定欄位添加到響應標頭。

當我的應用程序響應 404 時,它仍然正確地訪問了 nginx 的記憶體,但結果從未發送 add_header。

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