J'ai une définition de serveur nginx avec une correspondance regex, comme ceci:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Cela fonctionne bien, cependant, ce domaine héberge divers projets PHP utilisant fastcgi et PHP-FPM, qui reçoivent des valeurs comme celle-ci dans $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Comme vous pouvez le voir, le modèle d'expression régulière est placé dans SERVER_NAME
plutôt que la chaîne qui lui correspond. Cela me semble un peu bogué et représente également un risque pour la sécurité car il révèle des détails inutiles (dans d'autres configurations, je fais correspondre un ensemble de noms spécifique plutôt qu'un caractère générique).
Vous pourriez dire "utilisez HTTP_HOST au lieu de SERVER_NAME" - si seulement c'était aussi simple - il existe des bibliothèques qui s'attendent à ce que SERVER_NAME contienne (sans surprise) le nom du serveur. Je ne peux pas vraiment voir un bon cas d'utilisation pour ce comportement.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
et dans yourpage.php put:<?php echo $_SERVER['SERVER_NAME']; ?>
Vous verrez google.comla source