using variables in nginx.conf with 'set'

Maxim Dounin mdounin at
Fri Oct 22 19:40:29 MSD 2010


On Fri, Oct 22, 2010 at 08:27:52AM -0400, Arthur Blake wrote:

> It seems like the set command was designed for use in a narrow set of
> circumstances.  But I think it would be a lot more useful if the variables
> it defines could be used globally with any directive.
> I am trying to use the 'set' command in order to define my own variables
> that define things that may vary by server in a main nginx.conf file so that
> a generic reusable include file can later use those variables.  It seems
> that the variables only work in certain places with certain directives.

In nginx, variables are not something which "may vary by server", it's 
something which is request-specific and evaluated at runtime.

Something which vary on per-server basis (usually referred as 
"configuration macros" here) isn't present in nginx at all.  
Consider using your favorite template engine (e.g. make + sed) or 
try server-specific includes.

> Is there a reason I can't use variables set this way more widely?  I would
> like to be able to use variables like this anywhere in the config files.
> In the example below, I define two variables with the 'set' command,
> $rootfolder and $backend.
> The $rootfolder variable doesn't work with the include directive and the

Include directives are evaluated during configuration parsing on 
server startup.  There is no request being processed, and no 

> $backend doesn't work with the proxy_pass directive.

Actually it does (since 0.6.18).  Though this requires resolver to 
be defined and implies address parsing and resolving if backend 
address given as domain name.  Additionally, it has another 
semantics than normal proxy_pass - with variables you have to 
specify full url of the resource to request (or only server, 
0.8.25+), semantics of "proxy_pass with URI" doesn't apply. 

Maxim Dounin

p.s. Just to summarise the above: you don't need variables, you 
need configuration macros.  These aren't implemented, but you are 
free to use your favorite template engine.

More information about the nginx mailing list