I’m currently porting Apache module to nginx and need to have
preconnection and postconnection hook for custom code.
In apache it is ap_hook_pre_connection and apr_pool_cleanup_register
calls.
I think I’ve finally understood. There is global structure
ngx_event_actions
with add_conn/del_conn handlers which supposed to do what I want. There
is
only one issue (probably a bug) with add_conn handler. In version 1.2.2
with
epoll usage handler add_conn never called. You should use add handler
instead and check incoming parameters (event = NGX_READ_EVENT, flags =
NGX_CLEAR_REQUEST). Hope it helps someone.
On Mon, Aug 20, 2012 at 06:25:09AM -0400, ConnorMcLaud wrote:
I think I’ve finally understood. There is global structure ngx_event_actions
with add_conn/del_conn handlers which supposed to do what I want. There is
only one issue (probably a bug) with add_conn handler. In version 1.2.2 with
epoll usage handler add_conn never called. You should use add handler
instead and check incoming parameters (event = NGX_READ_EVENT, flags =
NGX_CLEAR_REQUEST). Hope it helps someone.
The add_conn/del_conn handlers isn’t what you want to touch from
your module, it’s handlers for event modules to register
connections in an event handling machinery. These hooks are
called not only for client connections, but e.g. for nginx own
internal connections as well, and for listening sockets also.
Moreover, nginx core is aware of aspects of various event methods
supported and might not call add_conn/del_conn even if the are
set. The issue with epoll you’ve hit is just one of the cases.
Right now there is no good way to hook new accepted connections
unless you are writing your own core module which creates
listening sockets by itself. Most recent point for correct hooks
available as of now for http modules is NGX_HTTP_POST_READ_PHASE.