я бегу nginx
как обратный прокси на 3 разных хостах. DNS преобразует production.example.com в IP-адреса всех трех хостов. Таким образом, у меня есть своего рода балансировка нагрузки и откат, если один хост недоступен.
На каждом хосте работает несколько контейнеров докеров. Некоторые из них работают на всех трех хостах, некоторые только на двух или даже только на одном хосте.
Использование nginx
с proxy_pass
Я перенаправляю все запросы на внутреннее имя контейнера (я использую 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;
}