Eu tenho uma definição de servidor nginx com uma correspondência regex, assim:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Isso tudo funciona bem, no entanto, este 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 que correspondeu. Isso parece um pouco complicado para mim e também representa um risco de segurança, pois revela detalhes desnecessários (em outras configurações, estou correspondendo a um conjunto específico de nomes em vez de um curinga).
Você pode dizer "use HTTP_HOST em vez de SERVER_NAME" - se fosse tão simples - existem bibliotecas que esperam que SERVER_NAME (sem surpresa) contenha o nome do servidor. Não consigo ver um bom caso de uso para esse comportamento.
Graças ao efeito de pato de borracha ao escrever esta pergunta, encontrei uma solução.
O arquivo de estoque do Nginx
fastcgi_params
contém a linha:que é o que faz com que esse valor apareça no
$_SERVER['SERVER_NAME']
ambiente PHP.Eu mudei isso para usar a variável $host :
e meu problema foi embora. Eu estaria interessado em saber se há alguma desvantagem dessa abordagem.