Welcome! Log In Create A New Profile

Advanced

Re: Проблемы с proxy connect timeout

Maxim Dounin
August 08, 2017 11:44AM
Hello!

On Tue, Aug 08, 2017 at 11:13:43AM -0400, d.sibilkov wrote:

> >Модули ngx_stream_proxy_module и ngx_http_proxy_module - это два
> >совершенно разных модуля, и каждый имеет свои собственные
> >конфигурационные директивы.
>
> Как мне тогда понять какой proxy_connect_timeout я использую и в чем
> разница?

Модуль ngx_stream_proxy_module работает исключительно в блоке
stream{}, и работает с произвольными соединениями. Модуль
ngx_http_proxy_module - в блоке http{}, и имеет дело с
http-запросами в рамках модуля http.

Разница в том, что это два совершенно разных модуля, и в общем
случае одинаковые директивы могут иметь совершенно разный смысл.
Но, конечно, мы стараемся делать так, чтобы похожие директивы вели
себя одинаково, и для proxy_connect_timeout это справедливо.

> >Для начала стоит разобраться в том, почему "упавший" бекенд
> >продолжает принимать соединения. И сделать так, чтобы не
> >продолжал.
>
> Он и не продолжает, просто сервер висит с открытым портом, если Вы
> зателнетитесь на любой открытый порт он соединение установит но данные
> никакие ходить не будут т.к. порт никто не слушает - сервис который должен
> слушать порт лежит.

В том, что бекенд упал, а порт остался открытым - и есть проблема.
В норме listen-сокет автоматически закрывается, если приложение,
его открывшее, падает. И это позволяет детектировать падение
бекенда на этапе установления соединения.

Вероятно, первопричина проблемы в том, что вы пытаетесь
использовать systemd. Который, в свою очередь, падение бекенда
увидеть не даёт. Так жить можно, но только в отсутствии нагрузки,
и когда ожидание таймауту на чтение - это нормально. Если же
такое поведение начинает доставлять проблемы, то решений тут
возможно два:

- выкинуть systemd, чтобы он не скрывал от nginx'а, что происходит
с реальным бекендом;

- решать проблему в рамках systemd, и искать в нём соответствующий
таймаут.

> >Ну и очевидно, что если у вас бекенды падают, и детектирование
> >упавшего бекенда знимает 60 секунд, уменьшать fail_timeout до 5
> >секунд несколько, как бы это сказать, расточительно. Наоборот,
> >стоит поднять до каких-либо сравнимых значений.
>
> Так вот мне и нужно чтобы это занимало не 60с (которые срабатывают по
> proxy_read_timeout) а как можно меньше.
> Я судя по всему чего-то не понимаю или мы просто о разных вещах говорим..

Чтобы детектирование проблемы занимало меньше времени, нужно
либо лечить бекенды (см. выше), либо уменьшать proxy_read_timeout.
Других вариантов, по большому счёту, нет.

Чтобы после детектирования проблемы минимизировать от неё ущерб -
надо увеличивать fail_timeout, а не уменьшать, как сделали вы.

--
Maxim Dounin
http://nginx.org/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Проблемы с proxy_connect_timeout

d.sibilkov August 07, 2017 07:30AM

Re: Проблемы с proxy connect timeout

Maxim Dounin August 07, 2017 10:42AM

Re: Проблемы с proxy connect timeout

d.sibilkov August 08, 2017 11:13AM

Re: Проблемы с proxy connect timeout

Maxim Dounin August 08, 2017 11:44AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 222
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready