O padrão Nexx regex vhost termina como nome do servidor PHP

11

Eu tenho uma definição de servidor nginx com uma correspondência de expressão regular, como esta:

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 muito 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 em vez da string correspondente. Isso parece um pouco buggy para mim, e também representa um risco de segurança na medida em que está revelando detalhes desnecessários (em outras configurações eu 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. Eu não consigo ver um bom caso de uso para esse comportamento.

    
por Synchro 10.12.2014 / 16:04

2 respostas

14

Graças ao efeito rubber duck de escrever esta pergunta, encontrei uma solução.

O arquivo fastcgi_params da Nginx contém a linha:

fastcgi_param  SERVER_NAME        $server_name;

que é o que faz com que esse valor apareça em $_SERVER['SERVER_NAME'] no ambiente PHP.

Alterei isso para usar a variável $ host :

fastcgi_param  SERVER_NAME        $host;

e meu problema foi embora. Eu estaria interessado em saber se há alguma desvantagem dessa abordagem.

    
por 10.12.2014 / 16:04
1
server_name  ~^(?<subdomain>.+)\.example\.com$;
set $server_name_full $subdomain.example.com;


location ~ \.php$ {
    ...
    include fastcgi_params;
    fastcgi_param SERVER_NAME $server_name_full;
    ...
}
    
por 17.11.2015 / 10:12

Tags