apache2: www vai para o servidor padrão e não sei porque

1

Estou configurando um servidor apache2 com vários hosts virtuais.

Eles estão todos trabalhando, exceto para www.mydomain.com, que vai para o virtualhost padrão, em vez do virtualhost que criei para ele.

O arquivo virtualhost (www.mydomain.com.conf) se parece com isto:

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/mydomain.com/www
    ErrorDocument 404 "/error.php"
</VirtualHost>

Se eu alterar ServerName para www2.mydomain.com , isso funciona. Se eu mudar de volta para www.mydomain.com , vai para o virtualhost padrão.

O arquivo do host virtual padrão (000-default.conf) se parece com isto:

<Virtualhost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/mydomain.com/html
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/mydomain.com/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /var/log/apache2/error.log
    LogLevel warn
    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Uma outra coisa a notar, que pode estar afetando isso, é que o nome do host do servidor (/ etc / hostname) é www.mydomain.com

O www. é um caso especial? Por que isso está acontecendo e como faço para que funcione como eu quero?

Estou usando o Ubuntu 16.04, versão do Servidor Apache2: Apache / 2.4.18 (Ubuntu)

EDIT: Confirmei que o problema era / etc / hostname ter www.mydomain.com - eu mudei para www-servidor.meu.dominio.com e agora o www virtualhost vai para o lugar certo. Eu ainda não sei porque isso acontece.

    
por Ben Holness 01.05.2016 / 23:07

2 respostas

1

Se bem me lembro, se ServerName não estiver definido, o Apache usa o nome do host do servidor como ServerName para o virtualhost padrão, você também deve ver um aviso sobre isso nos logs do Apache ou como saída quando você reiniciar o Apache.

Você também pode solucioná-lo adicionando a diretiva ServerName ao virtualhost padrão ou globalmente no Apache conf, mas acho que essa é uma prática recomendada para nomear o servidor com um nome de host dedicado como srv-something.example.com.

    
por 01.05.2016 / 23:26
0

Quanto à questão de onde o ServerName implícito veio de ,

If no ServerName is specified, the server attempts to deduce the client visible hostname by first asking the operating system for the system hostname, and if that fails, performing a reverse lookup on an IP address present on the system.

Em outros problemas, no entanto, você precisa examinar seu esquema de autorização. Parece que você não concedeu acesso ao seu novo host virtual, enquanto usa diretivas desatualizadas para o padrão.

Você deve garantir que mod_authz_core esteja habilitado e adicione isso à sua nova configuração de host virtual:

 <Directory /var/www/mydomain.com/www>
   Require all granted
 </Directory>

Além disso, todos os Order allow,deny e allow from all jazz em sua configuração padrão estão obsoletos no material do Apache 2.2 e devem ser alterados para usar o Apache 2.4 Requer diretiva .

Por segurança, o seu principal apache2.conf (ou security.conf , ou onde quer que você queira lidar com essas coisas) deve incluir:

 <Directory />
   Require all denied
 </Directory>
    
por 02.05.2016 / 01:12