robert.bo.roth
robert.bo.roth

Reputation: 1353

Nginx variable for physical server name

I'm trying to setup response headers on my separate webservers that outputs the physical name of the machine that nginx is running on, so that I can tell which servers are serving the responses to our web clients.

Is there a variable that exists to do this already? Or do I just have to hardcode it per-server :(

Upvotes: 7

Views: 12075

Answers (3)

Luke Peterson
Luke Peterson

Reputation: 8871

You're after the $hostname common variable. Common variables are listed in the variable index.

The nginx access log documentation only shows variables that are specific to the access log:

The log format can contain common variables, and variables that exist only at the time of a log write.

Upvotes: 5

Artem Russakovskii
Artem Russakovskii

Reputation: 22013

At first I thought the answer was to use the ENV variable and pull out the hostname from there https://docs.apitools.com/blog/2014/07/02/using-environment-variables-in-nginx-conf.html. But I couldn't get it to work for some reason.

However, this works like a charm:

perl_set $server_int 'sub { use Sys::Hostname; return hostname; }';

And example usage:

add_header 'Server-Int' "$server_int";

Just have to make sure your nginx is compiled with --with-http_perl_module - just run nginx -V to make sure. And that you have Sys::Hostname installed.

Warning: I at first used hostname to return the hostname in the Perl script, but while that did return the name, it for some reason aborted the rest of the output. I don't know if it's a bug with perl_set but you've been warned - using backticks in perl_set may be deadly.

Upvotes: -1

Alexey Ten
Alexey Ten

Reputation: 14354

I guess you're looking for $hostname variable.

Upvotes: 0

Related Questions