13

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; } 

3 Answers 3

11

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.

0

You should find this works:

server_name static.*; 
2
  • This would be incredibly insecure and allow host header injection attacks to anyone who sets "static.malicioushostnamehere.com" as an example. Commented Nov 16, 2018 at 11:25
  • I have worked with use cases where this is fine, but other use cases this is incredibly insecure. Know the risks. Commented Apr 30, 2021 at 20:11
-1

To set the server name in Nginx to the virtual machine name, you can use the built-in variable $hostname.

server { listen 443 ssl; server_name $hostname; } 
2

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.