Is there a wait to get at a module's main conf inside the loc conf's init?

Maxim Dounin mdounin at
Thu Aug 17 12:39:30 UTC 2017


On Thu, Aug 17, 2017 at 02:34:20AM -0400, ptcell wrote:

> Maxim Dounin Wrote:
> -------------------------------------------------------
> > 
> > Try ngx_http_conf_get_module_main_conf().
> > 
> > (Doing so in the create_loc_conf callback is probably pointless 
> > though, as main conf contents can be changed later.)
> On a related note, is there a way to get the my module's main/srv/loc conf_t
> instances from the cycle instance passed to the worker process init callback
> in my module?     I see my conf objects created and put into the ctx object
> before the worker process init is called, so I think there there.

This is something generally better to avoid (because getting a 
module configuration from a cycle implies that there can be only 
one http{} block), but it is certainly possible to obtain main 
configuration via ngx_http_cycle_get_module_main_conf().  For an 
example, see ngx_http_perl_init_worker() in the perl module:

> From reading the code, I tried something like:
> #define ngx_http_cycle_get_module_main_conf(cf, module)                     
>   \
>     ((ngx_http_conf_ctx_t *)
> (cycle)->conf_ctx)->main_conf[(module).ctx_index]

It is not clear where you get this macro.  Defined it yourself?  
You certainly did it wrong.  Correct macro is defined in 
src/http/ngx_http_config.h as follows:

#define ngx_http_cycle_get_module_main_conf(cycle, module)                    \
    (cycle->conf_ctx[ngx_http_module.index] ?                                 \
        ((ngx_http_conf_ctx_t *) cycle->conf_ctx[ngx_http_module.index])      \
            ->main_conf[module.ctx_index]:                                    \

You don't need to redefine it, just use it as is.

Maxim Dounin

More information about the nginx mailing list