У меня есть nginx с backend nodejs / php-fpm backend, как сказать nginx не кэшировать ответ 5xx или 4xx, даже если он соответствует параметрам кеширования.
Ответ заголовка PHP / Node.js с длительным временем кеширования через заголовки http:
HTTP/1.1 500 Internal Server Error
Date: Thu, 09 Mar 2017 09:41:03 GMT
Pragma: public
Expires: Thu, 09 Mar 2018 09:41:03 GMT
Cache-Control: public, max-age=31536000
X-Accel-Expires: Thu, 09 Mar 2018 09:41:03 GMT
Ответ будет кешироваться, даже если код состояния 500, как это предотвратить?
Конфигурация nginx:
location / {
proxy_cache_methods GET;
proxy_cache_key $request_uri;
proxy_cache cache;
proxy_cache_valid 200 1h;
proxy_cache_use_stale error timeout invalid_header updating;
proxy_cache_bypass 0;
proxy_no_cache 0;
proxy_redirect off;
proxy_pass http://node-app;
}
По умолчанию nginx будет учитывать Cache-Control
полученный от бэкэнда для собственного прокси-кеша, см., например, https://forum.nginx.org/read.php?2,268813,268814
Таким образом, кажется, что лучшим решением было бы изменить свой бэкэнд, чтобы перестать выдавать эти заголовки в случае ошибок.
Если вы действительно хотите переопределить эти 500 в nginx, возможно, используйте proxy_cache_valid с 500 и 0 в качестве параметров? Это определенно означает повторное предположение о серверной части, чтобы в любом случае это могло иметь непредвиденные последствия.