Ich habe eine Nginx-Serverdefinition mit einer Regex-Übereinstimmung wie folgt:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Das alles funktioniert gut, aber diese Domain hostet verschiedene PHP-Projekte mit Fastcgi und PHP-FPM, die folgende Werte erhalten $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Wie Sie sehen können, wird das Regex-Muster SERVER_NAME
anstelle der übereinstimmenden Zeichenfolge eingefügt. Das scheint mir ein bisschen fehlerhaft zu sein und stellt auch ein Sicherheitsrisiko dar, da es unnötige Details enthüllt (in anderen Konfigurationen stimme ich eher mit einem bestimmten Satz von Namen als mit einem Platzhalter überein).
Sie könnten sagen "Verwenden Sie HTTP_HOST anstelle von SERVER_NAME" - wenn es nur so einfach wäre - es gibt Bibliotheken, die erwarten, dass SERVER_NAME (keine Überraschung) den Namen des Servers enthält. Ich kann keinen guten Anwendungsfall für dieses Verhalten sehen.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
und in yourpage.php setzen:<?php echo $_SERVER['SERVER_NAME']; ?>
Sie werden google.comquelle