Hello Maxim
Thanks for your response. Here is a related query.
Say in module 1 I have a
typedef struct {
int flag;
ngx_str somestring;
} module1;
flag gets initialized with the following code
{ ngx_string("module1_directive"),
NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(module1,configured),
NULL },
somestring gets iniitialized with a handler written in the module (i.e not ngx_conf_set_flag_slot or any inbuilt handler).
In the post configuration, I see that flag is not properly set but somestring is. Flag is properly set during request processing though.
Are the values set during processing of a directive in location struct guaranteed to be set by the time post configuration is executed?
When is the time that one can check for the values set during configuration. I need to test these values to ensure that they are sane when nginx is executed with -t option
Thanks
Hello!
On Tue, Jun 10, 2014 at 02:09:13AM +0800, Rv Rv wrote:
> How do we access the configuration of a an unrelated module in a
> given module. This may be required for example to check if the
> directives pertaining to module 2 were specified in location for
> a particular server that has directives for module 1 in its
> configuration.
I don't think it's something you should do at postconfiguration -
location structure is complex and not easily accessible. There
are location configuration merge callbacks where you are expected
to work with location configs and, in particular, can use
ngx_http_conf_get_module_loc_conf() macro to access a
configuration of other modules (note though, that order of modules
may be important in this case).
[...]
> I did not find any documentation on how the configuration is stored within nginx using these structs?
It's under src/, in C language.
I would rather say it's not a part of the API, and you'd better
avoid using it directly.
--
Maxim Dounin
http://nginx.org/
------------------------------
On Monday, 9 June 2014 11:39 PM, Rv Rv <rvrv7575 at yahoo.com> wrote:
How do we access the configuration of a an unrelated module in a given module. This may be required for example to check if the directives pertaining to module 2 were specified in location for a particular server that has directives for module 1 in its configuration.
From what I understand, code similar to this can be used
/* Get http main configuration */
cmcf = ctx->main_conf[ngx_http_core_module.ctx_index];
/* Get the list of servers */
cscfp = cmcf->servers.elts;
/* Iterate through the list */
for (s = 0; s < cmcf->servers.nelts; s++) {
/* Problem : how to get the configuration of module 2*/
cscfp[s]->ctx->loc_conf[module2.ctx_index];-------------> does not yield the correct location struct of module 2
I did not find any documentation on how the configuration is stored within nginx using these structs
typedef struct {
.............
/* server ctx */ ngx_http_conf_ctx_t *ctx; ............
} ngx_http_core_srv_conf_t;
typedef struct {
void **main_conf;
void **srv_conf;
void **loc_conf;
} ngx_http_conf_ctx_t;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20140612/8c6fd6a1/attachment.html>