Назад | Перейти на главную страницу

nginx предотвращает кеширование для прокси / fast_cgi при ответе 5xx

У меня есть 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 в качестве параметров? Это определенно означает повторное предположение о серверной части, чтобы в любом случае это могло иметь непредвиденные последствия.