Nginx – Set server_name Based on $hostname

hostnamenginx

Based on the Nginx wiki the $hostname variable is set to the machine's hostname as returned by gethostname.

I tried that and although gethostname doesn't work my Debian box it still returns the host correctly.
Then I tried to use that variable $hostname to set the server_name, but that didn't work.

Why is that and is there another way I can accomplish that?

server {
    listen   80;

    autoindex off;

    server_name  static.$hostname;
    root   /var/www/static;

    access_log  /var/log/nginx/localhost.access.log;

    location / {
        index  index.html;
    }

    error_page  404  /404.html;
    error_page  500 502 503 504  /50x.html;
}

Best Answer

Most variables in nginx only exist at runtime, not during configuration time.

For this reason, most variables cannot be used with the server_name directive. Since $hostname is a constant value, there's an explicit check for exactly $hostname in the server_name handler.

It only allows for the server_name to be set to $hostname, not static.$hostname. You may be able to patch the source to make it support that feature (ngx_http_core_module.c, look for $hostname), but you can't do it with the existing code.