About the phase handlers init
mdounin at mdounin.ru
Fri Sep 3 19:34:48 UTC 2021
On Fri, Sep 03, 2021 at 12:08:32PM +0800, Jinhua Luo wrote:
> In the function ngx_http_init_phase_handlers, I found two places hard
> to understand.
> a) The n variable is as known as the next phase handler index. In the
> switch case NGX_HTTP_ACCESS_PHASE, it invokes n++, which seems to be
> redundant and wrong, While in switch case NGX_HTTP_POST_ACCESS_PHASE,
> it lacks n++. Think about that if the number of modules registers as
> NGX_HTTP_ACCESS_PHASE is 0, then the next index is 1 more than the
> correct number. Of course, the current codes have at least one
> NGX_HTTP_POST_ACCESS_PHASE module: ngx_http_access_module, but it
> contains the codes to jump to the next phase handler, then the jump
> target is bypass NGX_HTTP_POST_ACCESS_PHASE and to
The NGX_HTTP_POST_ACCESS_PHASE is a special phase which is only
used when there are modules in the NGX_HTTP_ACCESS_PHASE, and only
contains a single phase handler, ngx_http_core_post_access_phase().
The post-access phase does not need to be present at all when there
are no modules in the access phase. Further, when access phase
checker decides to skip the access phase when access is allowed by
a handler, and needs to switch to the next phase - it does not
need to switch to post-access phase, but rather to the phase after
it. Hence n++ in the access phase case (and not in the
> b) Does the handler runs in reverse order of registration order?
> for (j = cmcf->phases[i].handlers.nelts - 1; j >= 0; j--)
Yes. In particular, this ensures that addon modules are called
first, before the built-in modules.
More information about the nginx-devel