O Apache não está respeitando a diretiva ServerName para um site específico

9

Eu tenho alguns sites configurados como VirtualHosts usando o Apache que estão funcionando bem há algum tempo. Recentemente, alterei o nome do host do servidor para um dos nomes de domínio que estavam sendo veiculados e também o adicionei ao / etc / hosts apontando para o endereço IP externo do servidor.

Desde que fiz isso, acessar o domínio do meu laptop leva-me ao padrão do Apache "Funciona!" página. Se eu remover 000-default de / etc / apache2 / sites-enabled /, ele exibirá o site correto. Tentando acessar o site com o 'www'. O prefixo me leva ao site correto, independentemente de 000-default estar ou não ativado por sites.

Com base nisso, suponho que a configuração padrão esteja servindo a página padrão por causa de como configurei o nome do host ou / etc / hosts (ou ambos), mas não consigo descobrir como desabilitar isso enquanto deixando essas configurações como estão. Todas as sugestões são bem-vindas!

Editar - Minha configuração atual do VirtualHost se parece com isso:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin [email protected]

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

Para resumir: Eu tenho vários VirtualHosts configurados, e este é o único que não está funcionando corretamente. Posso acessar o http://www.domain.com , mas o http://domain.com me leva ao padrão do Apache "Funciona!" página. Se eu desativar a configuração padrão 000, ela mostra a página correta. Isso só começou a acontecer depois que eu defini o nome do host do servidor como domain.com e adicionei uma linha em / etc / hosts apontando domain.com para o endereço IP externo do servidor. Eu gostaria de deixar as coisas assim, se possível.

Edit: Eu corri apache2ctl -Sdesde que /usr/sbin/apache2 -Sme deu "apache2: nome de usuário inválido $ {APACHE_RUN_USER}". Aqui está a saída:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK
John Debs
fonte
domain.com está sendo usado no arquivo httpd.conf principal como ServerName? ou apache2ctl.conf você parece estar usando o ubuntu, portanto pode ser diferente do nome.
Prix

Respostas:

12

Perdi essa pergunta no outro dia.

Quando você tiver um contêiner <VirtualHost> sem um componente ServerName, ele usará o nome do host padrão. Como 000-default provavelmente não possui um componente ServerName e é o primeiro a ser incluído em ordem alfabética, é por isso que responde ao hostname.com e não permite que o nome do host explicitamente declarado funcione.

karmawhore
fonte
Entendo, alguma maneira de consertar isso? Quero que a configuração padrão lide com domínios não tratados, mas não quero que lide com esse domínio específico.
John Debs
atribua a ele um domínio diferente daquele usado em uma configuração ou renomeie-o para zzz-default para que seja chamado por último.
karmawhore
Ok, acho que entendi tudo agora. Eu tentei o zzz-default, mas não é o comportamento exato que eu queria. Definir ServerName example.comna configuração padrão funciona muito bem, no entanto. Obrigado!
John Debs
4

Você tem uma diretiva NameVirtualHost *: 80 em algum lugar?

Tentar:

/usr/sbin/apache2 -S

Isso mostrará como o apache está analisando o arquivo de configuração. Você tem configurações com IPs reais ou todas com *? Falta algum: 80? O Apache não gosta de misturá-los.

Você tem um ServerName domain.com ou ServerAlias ​​domain.com por padrão?

karmawhore
fonte
Sim, eu tenho isso no meu /etc/apache2/posts.conf. Acrescentarei um resumo à pergunta que, com sorte, ficará mais claro.
quer
Minha configuração 000 padrão é intocada, não possui diretivas ServerName ou ServerAlias.
quer
NameVirtualHost foi descontinuado.
Sam
0

Isso funcionou:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

quando tive um erro de digitação, NÃO funcionou (a diretiva ServerName duas vezes):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

Quando eu tive a diretiva ServerName duas vezes, ela continuou resolvendo para o primeiro site listado (não mostrado aqui).

espero que isso ajude alguém ...

Sam
fonte
0

Eu tive um problema semelhante e o corrigi definindo explicitamente um ServerName no arquivo httpd.conf principal, em vez de deixar o apache descobrir automaticamente que era. Eu assumo que o que o apache decidiu foi o mesmo que meu vhost (definido mais tarde), então o padrão "venceu", substituindo a configuração de vhost.

Acabei de definir o httpd.conf ServerName como um nome de host que a máquina possui, nunca servirei páginas da web.

sstteevvee
fonte