Welcome! Log In Create A New Profile

Advanced

Re: Config directive inheritance: docs and rules (was: Config variable inheritance)

Francis Daly
April 04, 2012 12:56PM
On Wed, Apr 04, 2012 at 05:58:46PM +0400, Maxim Dounin wrote:
> On Wed, Apr 04, 2012 at 01:40:40PM +0100, Francis Daly wrote:
> > On Tue, Apr 03, 2012 at 06:20:13PM +0100, Jonathan Matthews wrote:

Hi there,

> > > Can I, for instance, assume that defining an xyx_ prefixed directive in
> > > a sub-scope will affect *only* the inheritance of other xyz_ prefixed
> > > directives?
> >
> > No. It will affect no other xyz_ prefixed directives.
>
> Not really, there are cases where it will. Examples include (not
> sure if there are others):
>
> 1) allow and deny directives of access module create an array of
> allow/deny rules, and this array is inherited as a whole;
>
> 2) recently introduced xslt_param and xslt_string_param do the
> same thing with xslt parameters.

Ah, thank you for the correction.

For the original poster: I was wrong, you *do* need to check or test each
time. So read "never" and "always" as "almost never" and "almost always".

Sorry about that.


I've done a quick analysis of the 1.1.18 codebase, to see if I can find
the current complete list (excluding 3rd party modules, of course).

The configuration directives are stored in a struct:

struct ngx_command_s {
ngx_str_t name;
ngx_uint_t type;
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
ngx_uint_t conf;
ngx_uint_t offset;
void *post;
};

"name" is the directive name; "*set" is the function to set the value
of the directive, and "offset" is the position relative to "conf" where
the value is stored.

I see 67 arrays of that struct (grep for "static ngx_command_t").

I see 449 "ngx_string" within those arrays.

110 have unique *set values.

Of the ones with non-unique *set values, the few that have the same
"offset" value are:

ngx_event_connections - worker_connections, connections; one deprecated
ngx_mail_block - mail, imap; one deprecated
ngx_conf_set_sec_slot - open_file_cache_valid, open_file_cache_retest;
one deprecated

ngx_http_core_root - root, alias: single-valued, only one at a level
ngx_http_access_rule - allow, deny; both are valid
ngx_http_xslt_param - xslt_param, xslt_string_param; both are valid.


And separate from that, the directives which have a duplicate "offset"
value of "offsetof(something)" (as in, not-0 or a predefined constant),
are:

open_file_cache_valid, open_file_cache_retest - one deprecated
satisfy, satisfy_any - one deprecated
optimize_server_names, server_name_in_redirect - one deprecated

If that's an adequate analysis, it suggests that

allow/deny and xslt_param/xslt_string_param

are the only distributed directives which don't follow the
replace-or-inherit-this-directive-only method.

> All such cases are more or less obvious though.

I wonder, is it worth having a note in the documentation for these
exceptions to the common case?

I see that there is such a note at

http://nginx.org/en/docs/http/ngx_http_xslt_module.html#xslt_param,

but not (yet) at

http://nginx.org/en/docs/http/ngx_http_access_module.html#allow

Thanks,

f
--
Francis Daly francis@daoine.org

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

Config directive inheritance: docs and rules (was: Config variable inheritance)

Jonathan Matthews April 03, 2012 01:22PM

Re: Config directive inheritance: docs and rules (was: Config variable inheritance)

Francis Daly April 04, 2012 08:42AM

Re: Config directive inheritance: docs and rules (was: Config variable inheritance)

Maxim Dounin April 04, 2012 10:00AM

Re: Config directive inheritance: docs and rules (was: Config variable inheritance)

Francis Daly April 04, 2012 12:56PM

Re: Config directive inheritance: docs and rules (was: Config variable inheritance)

Maxim Dounin April 04, 2012 02:20PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 309
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready