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

Как я могу гарантировать, что Nginx никогда не кэширует определенные статусы ошибок?

Я заметил, что в моем экземпляре прокси-сервера Nginx кэшируется около 406 статусов, и я хочу быть уверен, что это больше не повторится.

Я обнаружил, что одна из возможных причин заключается в том, что кто-то установил proxy_cache_valid any на несколько минут, которые пришлось удалить. На данный момент я понимаю, что по умолчанию ничего не кэшируется, а затем, если есть proxy_cache_valid, который используется, а затем, если есть какие-либо заголовки cache-control или expire, они переопределят этот параметр.

Поэтому, если я правильно понимаю, я ожидал, что ошибки по умолчанию не будут кэшироваться, но если заголовок HTTP переопределяет их, то их можно кэшировать. Одним из решений было бы вообще игнорировать эти заголовки HTTP. Итак, первый вопрос: прав ли я в этом понимании.

Предполагая, что все это правда, в моей ситуации я хочу сохранить заголовки управления кешем на этом сервере, поэтому я не хочу просто игнорировать их. Однако я обеспокоен тем, что восходящий поток может установить их даже при статусах ошибок. Я ищу решение, которое позволит мне быть уверенным, что такие статусы, как 500, 503 и т. Д., Никогда не кешируются.

Вот что я думаю о текущем решении:

http {
    map $upstream_status $never_cache {
        200 0; # Want to receive from cache as in proxy_cache_valid
        301 0; # Want to receive from cache as in proxy_cache_valid
        404 0; # Want to receive from cache as in proxy_cache_valid
        500 0; # Want stale content from proxy_cache_use_stale
        502 0; # Want stale content from proxy_cache_use_stale
        503 0; # Want stale content from proxy_cache_use_stale
        504 0; # Want stale content from proxy_cache_use_stale
        default 1; # Everything else should never be cached
    }

    proxy_cache_valid 200 301 404 10m;
    #proxy_cache_valid any 0s # No active line for this as it's default
    proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;

    proxy_no_cache $never_cache;

    ...
}

Это разумные настройки, и будет ли оно делать то, что я ожидаю? Есть ли лучший способ добиться этого? Мне не удалось найти много документации по этому поводу, поэтому я думаю, что мне не хватает чего-то довольно большого.