nginx Servername basierend auf $ Hostname

8

Basierend auf dem Nginx-Wiki wird die $hostnameVariable auf den Hostnamen des Computers gesetzt, der von gethostname zurückgegeben wird .

Ich habe das versucht und obwohl gethostnamemeine Debian-Box nicht funktioniert, gibt sie den Host trotzdem korrekt zurück. Dann habe ich versucht, diese Variable zu verwenden, $hostnameum das festzulegen server_name, aber das hat nicht funktioniert.

Warum ist das so und gibt es einen anderen Weg, wie ich das erreichen kann?

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

Antworten:

7

Die meisten Variablen in nginx existieren nur zur Laufzeit, nicht während der Konfigurationszeit.

Aus diesem Grund können die meisten Variablen nicht mit der server_nameDirektive verwendet werden. Da $hostnamees sich um einen konstanten Wert handelt, wird der Handler explizit genau überprüft . $hostnameserver_name

Es kann nur das server_nameeingestellt werden $hostname, nicht static.$hostname. Möglicherweise können Sie die Quelle patchen, damit sie diese Funktion unterstützt ( ngx_http_core_module.csuchen Sie nach $hostname), aber Sie können dies nicht mit dem vorhandenen Code tun.

Kolbyjack
quelle
0

Sie sollten feststellen, dass dies funktioniert:

server_name static.*;
Reich
quelle
Dies wäre unglaublich unsicher und würde jedem, der als Beispiel "static.malicioushostnamehere.com" setzt, Angriffe auf die Host-Header-Injektion ermöglichen.
MattBoothDev