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';
}
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 ~^(.+)$;
}