Re: Балансировка нагрузки при недоступности backend
Maxim Dounin
mdounin на mdounin.ru
Пт Ноя 9 14:42:58 UTC 2018
Hello!
On Fri, Nov 09, 2018 at 09:11:45AM -0500, kseleznyov wrote:
> Ситуация такая: слушаем порт 80 и перекидываем запрос с него на порты 8080 и
> 8081. За каждым из этих портов стоит FCGI-бекэнд. Примерный файл
> конфигурации:
>
>
> # настройка upstream - делаем балансировку на два разных порта
> upstream http_stream {
> server 127.0.0.1:8080;
> server 127.0.0.1:8081;
> }
>
> # основная точка входа, нагрузка на которую балансируется между портами 8080
> и 8081
> server {
> listen 80 default_server;
> listen [::]:80 default_server;
> location / {
> proxy_pass http://http_stream;
> }
> }
>
> # первый бекэнд - пробрасываем на FCGI по Unix Socket
> server {
> listen 8080 default_server;
> listen [::]:8080 default_server;
>
> server_name _;
>
> location / {
> fastcgi_pass unix:/home/skostik/sockets/1.sock;
> }
> }
>
> # второй бекэнд - пробрасываем на FCGI по Unix Socket
> server {
> listen 8081 default_server;
> listen [::]:8081 default_server;
>
> server_name _;
>
> location / {
> fastcgi_pass unix:/home/skostik/sockets/2.sock;
> }
> }
>
>
> Проблема: если бекэнд не отвечает по сокету
> unix:/home/skostik/sockets/1.sock (т.е. nginx не может установить
> соединение), то nginx не делает балансировку (не перекидывает запрос на порт
> 8081), а возвращает ошибку. Можно ли настроить систему так, чтобы: если один
> бекэнд недоступен, то нужно слать исходный HTTP-запрос на другой порт.
А зачем в этой конструкции "бэкенды", которые не делают ничего
полезного? Добавьте оба unix-сокета в один upstream и сделайте на
него fastcgi_pass прямо из основного сервера - и всё будет
работать без дополнительных настроек.
Если очень хочется, чтобы nginx видел ошибки работы с
fastcgi-бэкендами именно в такой конструкции - то вам нужно в
proxy_next_upstream добавить http_502 и http_504, подробнее в
документации тут:
http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_next_upstream
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru