Балансировщик нагрузки nginx продолжает подключать неактивные прокси - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь продемонстрировать возможности балансировки нагрузки nginx. Моя конфигурация nginx следующая

.
.

    upstream myapp1 {
        server 127.0.0.1:3001 max_fails=1 fail_timeout=60s;
        server 127.0.0.1:3002 max_fails=1 fail_timeout=60s;
        server 127.0.0.1:3003 max_fails=1 fail_timeout=60s;
    }

А потом в разделе сервера

.
.
        location /myapp1 {
            proxy_pass http://myapp1;
            proxy_connect_timeout 10s;
        }

.
.

При такой конфигурации Nginx действительно передает данные со всех трех серверов в циклическом режиме. Но когда один из серверов отключен, например, слушая 3003, nginx все еще пытается подключиться к нему несколько раз даже после получения от него таймаута подключения. Самое удивительное, что это занимает 60 секунд, после чего данные поступают с одного из активных серверов.

Вот содержимое файла error.log (которое имеет смысл, но оно появляется только через 60 секунд после попытки подключения клиента)

2018/09/02 21:54:28 [error] 12704#6588: *865 upstream timed out (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /myapp1 HTTP/1.1", upstream: "http://[::1]:3003/myapp1", host: "localhost"

Я пытался поместить разные значения для proxy_connect_timeout в разделах http, server и location, но это поведение не меняется.

Как заставить nginx вести себя следующим образом

  1. Когда сервер отключен, и nginx понимает это, встречая тайм-аут от прокси, он должен пометить его как неактивный в течение 60 с сконфигурировано.
  2. Proxy_connect_timeout должен вступить в силу и nginx не должно ждать более 10 секунд для восходящего соединения.

nginx версия 1.15.3 для Windows 10.

...