About the phase handlers init

Jinhua Luo luajit.io at gmail.com
Sat Sep 4 15:48:08 UTC 2021


> 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 post-access phase).

Why bypass post access phase? Why access phase is so special?

Maxim Dounin <mdounin at mdounin.ru> 于2021年9月4日周六 上午3:35写道:
>
> Hello!
>
> 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
> > NGX_HTTP_PRECONTENT_PHASE?
>
> 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
> post-access phase).
>
> > 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.
>
> --
> Maxim Dounin
> http://mdounin.ru/
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel


More information about the nginx-devel mailing list