Я использую nginx
как обратный прокси на 3 разных хостах. DNS преобразует production.example.com в IP-адреса всех трех хостов. Таким образом, у меня есть своего рода балансировка нагрузки и откат, если один хост недоступен.
На каждом хосте работает несколько докер-контейнеров. Некоторые из них работают на всех трех хостах, некоторые только на двух или даже только на одном.
Используя nginx
proxy_pass
, я перенаправляю все запросы в контейнер » s внутреннее имя (я использую Rancher, поэтому каждый контейнер доступен через container_name.stack_name через внутренний DNS).
Время от времени контейнер недоступен или не отвечает, поэтому nginx
возвращает ошибку 502.
Есть ли какой-либо способ для этого автоматического отката? К сожалению, nginx
игнорирует все другие разрешенные адреса для внутреннего имени контейнера Docker и, таким образом, не пересылает запрос на другой адрес.
Вы должны использовать директиву proxy_next_upstream
Указывает, в каких случаях запрос должен быть передан на следующий сервер
location / {
proxy_pass http://backends;
proxy_next_upstream error timeout http_502;
}