Question about the context of map directive

Hi,

The context of map directive is http as documented on wiki.nginx.org.
This
means all the requests will go through the map filter phase.
This is not ideal when you have many virtual hosts.

For example, we’ve 50+ virtual hosts. When one of them need map
variables,
the others automatically inherited those settings because there is no
way to
limit it to server context.

If this is the situation, can someone know the internals of nginx
explain
why the map module can’t work at server level.
Thanks.

On Thu, May 05, 2011 at 02:59:21AM +0800, 杨镭 wrote:

If this is the situation, can someone know the internals of nginx explain
why the map module can’t work at server level.
Thanks.

The most nginx directives are declarative. This means that nginx
looks up a map only when it needs a variable value defined via the map.
There are directives that are really executed: “rewrite” and “if”.
Avoid them.


Igor S.

On Wed, May 04, 2011 at 11:10:00PM +0400, Igor S. wrote:

If this is the situation, can someone know the internals of nginx explain
why the map module can’t work at server level.
Thanks.

The most nginx directives are declarative. This means that nginx
looks up a map only when it needs a variable value defined via the map.
There are directives that are really executed: “rewrite” and “if”.
Avoid them.

Also “set” and “break”.


Igor S.

Hello!

On Thu, May 05, 2011 at 02:59:21AM +0800, 杨镭 wrote:

Hi,

The context of map directive is http as documented on wiki.nginx.org. This

Yes.

means all the requests will go through the map filter phase.

No. Map directive creates a variable and only does something when
(and if) the variable is accessed. There is no performance
penalty for processing requests which doesn’t use the variable.

This is not ideal when you have many virtual hosts.

For example, we’ve 50+ virtual hosts. When one of them need map variables,
the others automatically inherited those settings because there is no way to
limit it to server context.

If this is the situation, can someone know the internals of nginx explain
why the map module can’t work at server level.

Changing map module to provide data based on per-server configs is
possible, but obviously will require extra code.

Maxim D.

Hi Igor and Maxim,

Thanks for the reply!