> 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 <[email protected]> 于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 > [email protected] > http://mailman.nginx.org/mailman/listinfo/nginx-devel _______________________________________________ nginx-devel mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx-devel
