SERVER_NAME vs HTTP_HOST (Nginx + PHP)

1

Eu tenho uma configuração de servidor catchall que obtém todos os subdomínios e os aponta para o mesmo script PHP. Existem milhares de subdomínios e eles são criados dinamicamente.

O script PHP usa o HTTP_HOST para identificar o subdomínio e buscar o conteúdo do banco de dados de acordo com o subdomínio identificado.

Funciona bem, mas estou recebendo este log do Nginx:

PHP message: PHP Notice:  Undefined index: HTTP_HOST in
/usr/share/nginx/html/index.php on line 9

Eu pesquisei na web e descobri que o HTTP_HOST nem sempre pode ser definido. O manual do PHP diz:

'HTTP_HOST' = Contents of the Host: header from the current request, if there is one.

Então, pensei em usar a variável SERVER_NAME em vez de HTTP_HOST. Mas quando faço isso, SERVER_NAME não contém a parte do subdomínio. Ele sempre retornará o que eu escrevo na configuração Nginx, que é ~^(.+)$ no meu caso.

Existe uma maneira de alterar a configuração do Nginx para que o SERVER_NAME inclua os subdomínios dinâmicos? Por exemplo, para retornar algo como sub1.mydomain.com, sub2.mydomain.com e assim por diante.

Existe alguma solução para este problema?

Minha configuração atual é:

server {
    listen 80 default_server;
    server_name ~^(.+)$;
}
    
por viniciussss 11.04.2015 / 03:18

1 resposta

4

Eu abordaria essa questão assim no seu código PHP:

if (isset($_SERVER['HTTP_HOST'])) {
    $host = $_SERVER['HTTP_HOST'];
} else {
    $host = 'default.example.com';
}
    
por 11.04.2015 / 08:37