About the phase handlers init

Jinhua Luo luajit.io at gmail.com
Sat Sep 4 15:51:26 UTC 2021


Sorry, typo. My question is why bypass post-access phase?

Jinhua Luo <luajit.io at gmail.com> 于2021年9月4日周六 下午11:48写道:
>
> > 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