Mam definicję serwera nginx z dopasowaniem wyrażenia regularnego, jak poniżej:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
To wszystko działa dobrze, jednak ta domena obsługuje różne projekty PHP wykorzystujące fastcgi i PHP-FPM, które otrzymują takie wartości w $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Jak widać, wzór wyrażenia regularnego jest wstawiany SERVER_NAME
zamiast pasującego łańcucha. Wydaje mi się to trochę błędne, a także stanowi zagrożenie dla bezpieczeństwa, ponieważ ujawnia niepotrzebne szczegóły (w innych konfiguracjach dopasowuję konkretny zestaw nazw zamiast znaku wieloznacznego).
Możesz powiedzieć „użyj HTTP_HOST zamiast SERVER_NAME” - gdyby tylko było to takie proste - istnieją biblioteki, które oczekują, że SERVER_NAME (bez zaskoczenia) będzie zawierał nazwę serwera. Naprawdę nie widzę dobrego przypadku użycia dla tego zachowania.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
oraz w zakładce yourpage.php:<?php echo $_SERVER['SERVER_NAME']; ?>
Zobaczysz google.comźródło