Eu tenho uma definição de servidor nginx com uma correspondência de regex, assim:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
No entanto, como tudo funciona bem, esse domínio hospeda vários projetos PHP usando fastcgi e PHP-FPM, que recebem valores como este em $_SERVER
:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Como você pode ver, o padrão regex é colocado em SERVER_NAME
vez da string em que ele corresponde. Isso me parece um pouco problemático e também representa um risco de segurança, pois revela detalhes desnecessários (em outras configurações, estou combinando um conjunto específico de nomes em vez de um curinga).
Você pode dizer "use HTTP_HOST em vez de SERVER_NAME" - se fosse assim tão simples - existem bibliotecas que esperam que SERVER_NAME (sem surpresa) contenha o nome do servidor. Não vejo realmente um bom caso de uso para esse comportamento.
curl --header "HOST: google.com" http://yourdomain/yourpage.php
e em yourpage.php coloque:<?php echo $_SERVER['SERVER_NAME']; ?>
Você verá google.comfonte