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

Nginx как кэширующий прокси: пробуем второй апстрим, если первый возвращает 404

Для использования nginx в качестве кэширующего прокси-сервера, есть ли способ настроить 2 восходящих сервера таким образом, чтобы он всегда пробовал первый, если только тот не возвращает 404, и только в этом случае он будет пробовать второй восходящий сервер?

Я знаю о backup в блоке конфигурации восходящего потока, но он пытается использовать этот сервер только в том случае, если первый недоступен. Я говорю о том, доступен ли первый сервер, но только этот конкретный запрошенный файл возвращает 404.

Я не уверен, почему вы хотите, чтобы тайм-аут или ответ 50X был действительным, но если вы действительно хотите просто 404, тогда документы Nginx объясняют это следующим образом:

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

max_fails = число

устанавливает количество неудачных попыток связи с сервером, которые должны произойти в течение периода, установленного параметром fail_timeout, чтобы считать сервер недоступным в течение периода, также установленного параметром fail_timeout. По умолчанию количество неудачных попыток равно 1. Нулевое значение отключает учет попыток.

Вот кикер:

То, что считается неудачной попыткой, определяется директивами proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream и memcached_next_upstream.

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

Синтаксис: ошибка proxy_next_upstream | тайм-аут | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | выкл ...;

http_404 сервер вернул ответ с кодом 404;

Этот ответ на похожий пост может стать основой для вашей конфигурации:

https://stackoverflow.com/a/12878310/4995465

Да, вы можете увеличить weight одного сервера в восходящей группе и играть с proxy_next_upstream для включения или исключения кодов, переключение которых не требуется. Таким образом, сервер с большим весом будет обслуживать большую часть запросов (большинство / меньшинство зависит от веса, но некоторые запросы все равно будут обслуживаться вторым).

По-прежнему, backup это то, что нужно использовать. Я не могу представить себе причину, по которой не использовал какой-то сервер, который всегда содержит все данные.