Inconsistency in ability to use variables in nginx config

It seems like it’s possible to use variables in some configuration
directives but not in others. This works:

root /usr/www/$sitename/httpdocs;

works, while these:

access_log /var/log/www/$sitename/access.log;
proxy_cache $sitename;

do not, instead generating errors when I try to restart nginx.

Is there any documentation that explains where I can and cannot use a
variable? Or is there some syntax I should be using to indicate variable
interpolation? It would be immensely helpful if they worked in all these
contexts, because then we wouldn’t have to repeat so much across
different
site configuration files, leading to the requirement for generating them
with clunky scripts. As it is, the variables are of very limited
utility.

Posted at Nginx Forum:

On Wednesday 13 November 2013 10:25:44 miguel_hamster wrote:

It seems like it’s possible to use variables in some configuration
directives but not in others. This works:

root /usr/www/$sitename/httpdocs;

works, while these:

access_log /var/log/www/$sitename/access.log;

This should work too. See documentation: Module ngx_http_log_module

proxy_cache $sitename;

do not, instead generating errors when I try to restart nginx.

Is there any documentation that explains where I can and cannot use a
variable?

See official docs: nginx documentation
It’s usually explicitly stated if directive supports variables

Or is there some syntax I should be using to indicate variable
interpolation? It would be immensely helpful if they worked in all these
contexts, because then we wouldn’t have to repeat so much across different
site configuration files, leading to the requirement for generating them
with clunky scripts. As it is, the variables are of very limited utility.

Yes, it is. Variables in nginx are not supposed to replace template
engines
or special configuration-generation tools.

See FAQ: Is there a proper way to use nginx variables to make sections of the configuration shorter, using them as macros for making parts of configuration work as templates?

Also, some duplication in config isn’t something horrible. Nginx
configuration
is not a programming language, it utilizes another paradigm and trying
to be
declarative.

wbr, Valentin V. Bartenev