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