Сценарий такой: у меня есть обратный прокси-сервер nginx перед двумя серверами приложений, которые являются резервными копиями друг друга, я хочу, чтобы nginx сначала перенаправлял все пользовательские запросы на первый сервер приложений, и если первый сервер приложений выйдет из строя, я хочу, чтобы nginx перенаправлял все пользовательские запросы на второй сервер приложений с этого момента, пока второй сервер приложений не выйдет из строя, и nginx должен вернуться к пересылке всех пользовательских запросов на первый сервер приложений, и так далее и тому подобное. Конечно, если оба сервера приложений выйдут из строя, то nginx вернет ошибку.
Я посмотрел на настройки, такие как upstream load balance и proxy_next_upstream settings, но, похоже, это не совсем то, что я ищу. Есть идеи, как настроить nginx для моего сценария? Спасибо.
решение1
upstream
Для достижения этой цели вам понадобится использовать конфигурацию nginx .
upstream mybackend {
# first app server
server 192.168.0.1;
# second app server
server 192.168.0.2 backup;
}
server {
...
location / {
proxy_pass http://mybackend;
}
}
Ключевым здесь является backup
параметр, который сообщает nginx, что нужно использовать этот узел только в том случае, если основные узлы (т. е. узлы без тегов backup
) недоступны.
Полныйдокументация здесь.
решение2
После дополнительных поисков я решил использовать OpenResty (https://openresty.org/) для моих нужд, в частности LuaUpstreamNginxModulehttps://github.com/openresty/lua-upstream-nginx-moduleи с некоторыми пользовательскими скриптами Lua, похоже, это работает идеально для моего сценария.