Existe uma maneira de definir um host virtual Apache 2 com um ServerName parcial

Existe uma maneira de definir um host virtual Apache 2 com um ServerName parcial

Eu tenho uma ferramenta que gera blocos de configuração do Apache 2. Eu gostaria que o que ele gera fosse independente de qualquer que seja o ServerName real, mas sem a necessidade de realmente executar/analisar a configuração do Apache da máquina de destino.

Em outras palavras, o que eu preciso é algo assim:

<VirtualHost *>
   ServerName foobar    // <-- no top level domain
   ...
</VirtualHost>

Parece que, ao ler os documentos, o campo ServerName deve sempre ser o nome de domínio totalmente qualificado e, portanto, inerentemente, um bloco vhost não pode ser gravado sem conhecer o FQDN do servidor de destino. Isso é verdade ou há alguma solução alternativa?

Responder1

Sim, ServerNamedeve ser uma identificação real do servidor, mas também pode ser um endereço IP. ServerAliaspor outro lado, pode conter curingas. Documentaçãomenciona isso.

Mas também diz que não é obrigatório

Se nenhum ServerName for especificado, o servidor tentará deduzir o nome de host visível do cliente solicitando primeiro ao sistema operacional o nome de host do sistema e, se isso falhar, executando uma pesquisa reversa em um endereço IP presente no sistema.

Responder2

Nem umServerNamenem umServerAliassão diretivas obrigatórias em um bloco VirtualHost.

Você pode simplesmente omiti-los.

O manual explica quando você faz isso:

Se não ServerNamefor especificado, o servidor tenta deduzir o nome de host visível do cliente, primeiro solicitando ao sistema operacional o nome de host do sistema e, se isso falhar, executando uma pesquisa reversa em um endereço IP presente no sistema.

que pode ser exatamente o que você precisa.

Adicionalmente,na práticaessas diretivas também aceitarão quase qualquer string...
Uma única palavra, como localhostou teste, examplefuncionará, assim como coisas que se parecem mais com FQDN, mas que não são nomes DNS realmente funcionais, como there.is.no.tld.named.serverfault.Usar algo assim pode resultar em um aviso de inicialização em o log de erros (que você pode evitar adicionando essa string a /etc/hosts) e pode resultar em uma situação em que o Apache httd não consegue distinguir seu bloco VirtualHost de quaisquer outros presentes e suas configurações não terão efeito.https://httpd.apache.org/docs/2.4/vhosts/details.html

informação relacionada