I am trying to optimize my nginx configs, so it would be possible to set one variable, and all location paths would update automatically. I have four lines in question:

server_name php.domain.com;
root /srv/web/vhosts/php/web;
error_log /srv/web/vhosts/php/logs/error.log;
access_log /srv/web/vhosts/php/logs/access.log;

What I would like to achieve is to set one variable (in this case 'php') and include it to config.

set $variable "php";
server_name $variable.domain.com;
root /srv/web/vhosts/$variable/web;
error_log /srv/web/vhosts/$variable/logs/error.log;
access_log /srv/web/vhosts/$variable/logs/access.log;

However it seams that nginx ignores variables in this config. Am I doing something wrong or it is not possible to use variable in location paths?


Variables can't be declared anywhere nor be used in any directive.

As the documentation of set directive is :

Syntax:   set $variable value;
Default:  —
Context:  server, location, if

The immediate consequence is that you can't use custom variables in an http block.

Update : after a discussion and experiments with AlexeyTen in this chatroom.

  • access_log can contain variables with restrictions. Among them, the lack of buffering and the fact that the leading slash must not be declared in a variable.
  • error_log won't work with variables at all.
  • root directive can contains variables.
  • server_name directive only allows strict $hostname value as a variable-like notation.
  • 1
    access_log/error_log work with variables, but with some limitations. server_name can't contain variables. – Alexey Ten Nov 17 '14 at 11:38
  • @AlexeyTen Re-read my answer. It doesn't work with custom variables. Server name can contain built-in variable like $hostname. Updated the answer to clarify that behaviour. – Xavier Lucas Nov 17 '14 at 12:10
  • 5
    Well, $hostname is the only allowed variable. github.com/nginx/nginx/blob/… Actually, it's more like a magic constant, not a real variable – Alexey Ten Nov 17 '14 at 12:12
  • 1
    Let us continue this discussion in chat. – Alexey Ten Nov 17 '14 at 12:18
  • 3
    This is maybe the best researched SF answer ever. Thanks to both of you /Cc @AlexeyTen – kaiser Feb 15 '16 at 16:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.