Re: Upstream force to close+client keep alive (API Си)
Maxim Dounin
mdounin на mdounin.ru
Ср Сен 28 14:14:56 UTC 2016
Hello!
On Wed, Sep 28, 2016 at 09:32:36AM -0400, rba wrote:
> Здравствуйте, помогите разобраться как корректно закрыть соединения с
> бэкендом в апстриме оставив живое соединения с клиентом(keep alive).
>
> Если делаю просто что-то типа ngx_http_finalize_request(r, NGX_HTTP_CREATED)
> то соединение с клиентом остается открыто, но
> - не обрабатывает новые запросы,
> - не вызывается upstream->finalize_request,
> - спустя некоторое время начинает дёргать upstream read/write heandler.
>
> Если еще добавить ngx_http_finalize_request(r, NGX_OK)
> - с клиентом разрывается, хотя я его не освобождал
> - происходит вызов upstream->finalize_request
>
> При ngx_free_connection на соединения апстрима вообще ад начинается...
Если вы пишете модуль работы с upstream-серверами для своего
протокола, то вы не должны звать ни ngx_http_finalize_request(),
ни тем более ngx_free_connection() сами. Ваша задача сводится к
тому, чтобы правильно сформировать запрос, и распарсить ответ.
Посмотрите на src/http/modules/ngx_http_memcached_module.c, там
достаточно простой пример реализации модуля работы с конкретным
протоколом.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru