I see, thanks for the explanation.
On Tue, Jan 14, 2014 at 8:27 PM, Ruslan Ermilov <r...@nginx.com> wrote: > On Tue, Jan 14, 2014 at 06:54:44PM +0530, Fasih wrote: > > Thanks! Could you please explain why this is done? > > Modules register their handlers (at different phases > of request processing) one by one, by adding an element > into the corresponding array of handlers. The order > in which modules do this is somewhat important. > > For example, let's take a look at three standard "index" > modules: autoindex, index, and random_index. They are > listed in auto/modules in the above mentioned sequence, > and thus register their handlers in this sequence too. > Their handlers are called in a reverse sequence, so it's > either random index, or an index file, or an automatically > generated directory listing, in this order. > > There are also 3rd party modules that are added to the > list of modules at the end, and consequently register > their handlers after the standard modules. Now imagine > you wrote a custom my_index module. By processing > handlers in a reverse order we give better chance for > the 3rd party module to run. If we did the opposite, > then nginx would check the "index.html" file existence > (the index module) before even calling your handler. > > > On Tue, Jan 14, 2014 at 4:41 PM, Maxim Dounin <mdou...@mdounin.ru> > wrote: > > > > > Hello! > > > > > > On Tue, Jan 14, 2014 at 04:15:32PM +0530, Fasih wrote: > > > > > > > Hi > > > > > > > > I have a custom plugin that handles rewrite (NGX_HTTP_REWRITE_PHASE). > > > There > > > > is another plugin compiled before my plugin that also handles rewrite > > > > (HttpLuaModule). I was expecting to see that my module would rewrite > > > after > > > > lua is done, however that is not the case. Some debugging showed that > > > > whereas my module pushed into the > > > > cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers after lua, the > > > > cmcf.phase_engine.handlers had lua *after* my module. The culprit > seems > > > to > > > > be the following: > > > > > > > > static ngx_int_t > > > > ngx_http_init_phase_handlers(ngx_conf_t *cf, > ngx_http_core_main_conf_t > > > > *cmcf) > > > > { > > > > .. > > > > ph = cmcf->phase_engine.handlers; > > > > .. > > > > n += cmcf->phases[i].handlers.nelts; > > > > > > > > for (j = cmcf->phases[i].handlers.nelts - 1; j >=0; j--) { > > > > ph->checker = checker; > > > > ph->handler = h[j]; > > > > ph->next = n; > > > > ph++; > > > > } > > > > } > > > > > > > > The order is inverted here (h[j] before h[j-1]). Is this intentional > or a > > > > bug? > > > > > > It's intentional. > > > > > > -- > > > Maxim Dounin > > > http://nginx.org/ > > > > > > _______________________________________________ > > > nginx-devel mailing list > > > nginx-devel@nginx.org > > > http://mailman.nginx.org/mailman/listinfo/nginx-devel > > > > > > -- > Ruslan Ermilov > > _______________________________________________ > nginx-devel mailing list > nginx-devel@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel >
_______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel