VirtualHost no Apache entrega página errada para o navegador (mas não para curl)

1

Eu tento hospedar sites diferentes no mesmo servidor Apache (Apache 2.4 rodando no Ubuntu 16.04) usando diferentes hosts virtuais. No entanto, ao tentar abrir domain-two.tld , o servidor entrega a página da Web de domain-one.tld . Comportamento semelhante é descrito em este e que uma pergunta. De acordo com meus arquivos de configuração, as respostas dessas duas perguntas já devem ser implementadas.

Os hosts virtuais são definidos da seguinte forma:

<VirtualHost *:80>
    ServerName domain-one.tld
    ServerAlias www.domain-one.tld
    DocumentRoot /var/www/html/domain_one
</VirtualHost>

e

<VirtualHost *:80>
    ServerName domain-two.tld
    ServerAlias www.domain-two.tld
    DocumentRoot /var/www/html/domain_two
</VirtualHost>

Os dois arquivos de configuração estão localizados em sites-available e são ligados simbolicamente em sites-enabled usando a2ensite , levando à seguinte árvore de diretórios:

sites-enabled/
|-- domain_one.conf -> ../sites-available/domain_one.conf
'-- domain_two.conf -> ../sites-available/domain_two.conf

Após os arquivos de configuração terem sido ativados, reiniciei o apache para recarregar seus arquivos de configuração em systemctl restart apache2 . Para testar as duas configurações, adicionei alguns hosts adicionais ao arquivo /etc/hosts

127.0.0.1       localhost
127.0.0.1       domain-one.tld
127.0.0.1       www.domain-one.tld
127.0.0.1       domain-two.tld
127.0.0.1       www.domain-two.tld
# some further IPs down here

e acessou os dois sites localmente usando o curl.

Isso retorna os documentos corretos conforme desejado. No entanto, acessar os dois sites por meio de um navegador de um cliente remoto O Apache oferece apenas domain_one (não foi possível testar por domain-two.tld devido a razões técnicas, o cache está desativado no navegador).

De onde vem esse comportamento estranho? Como eu poderia diminuir isso?

Atualização devido ao comentário do @kubanczyk:

  • Pergunta: O que é retornado às solicitações curl remotas, em vez da solicitação curl local contra localhost ?
  • Resposta: Corrigir o conteúdo da página.

Para pvz-sphere.de que é domain_one :

$ curl -v http://www.pvz-sphere.de      # which is domain_one
* Rebuilt URL to: http://www.pvz-sphere.de/
*   Trying 217.160.122.225...
* TCP_NODELAY set
* Connected to www.pvz-sphere.de (217.160.122.225) port 80 (#0)
> GET / HTTP/1.1
> Host: www.pvz-sphere.de
> User-Agent: curl/7.60.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 905
< Connection: keep-alive
< Keep-Alive: timeout=15
< Date: Wed, 06 Jun 2018 15:45:32 GMT
< Server: Apache
< 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<html>
<head>
<title>SPhERe - Symposium on Pharmaceutical Engineering Research</title>
<meta name="keywords" content="SPhERe, ICTV, TU Braunschweig, PVZ, Zentrum für Pharmaverfahrenstechnik, Institut für Chemische und Thermische Verfahrenstechnik" />
<meta name="description" content="Symposium on Pharmaceutical Engineering Research" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<frameset rows="100%">
<frame src="http://ictv.rz.tu-bs.de/SPhERe/"title="SPhERe - Symposium on Pharmaceutical Engineering Research" frameborder="0" noresize="noresize"/>
<noframes>
<body>
<h1>SPhERe - Symposium on Pharmaceutical Engineering Research</h1>
<p><a href="http://ictv.rz.tu-bs.de/SPhERe/">http://pvz-sphere.de/</a></p>
</body>
</noframes>
</frameset>
</html>
* Connection #0 to host www.pvz-sphere.de left intact

Para teresa-projekt.de , que é domain_two :

$ curl -v http://www.teresa-projekt.de    # which is domain_two
* Rebuilt URL to: http://www.teresa-projekt.de/
*   Trying 217.160.233.207...
* TCP_NODELAY set
* Connected to www.teresa-projekt.de (217.160.233.207) port 80 (#0)
> GET / HTTP/1.1
> Host: www.teresa-projekt.de
> User-Agent: curl/7.60.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Keep-Alive: timeout=15
< Date: Wed, 06 Jun 2018 15:38:17 GMT
< Server: Apache
< 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<html>
<head>
<title>Teresa-Projekt</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<frameset rows="100%">
<frame src="http://ictv.rz.tu-bs.de"title="Teresa-Projekt" frameborder="0" noresize="noresize"/>
<noframes>
<body>
<h1>Teresa-Projekt</h1>
<p><a href="http://ictv.rz.tu-bs.de">http://teresa-projekt.de/</a></p>
</body>
</noframes>
</frameset>
</html>
* Connection #0 to host www.teresa-projekt.de left intact
    
por albert 06.06.2018 / 17:26

1 resposta

0

Depois de dar uma olhada nos cabeçalhos de solicitação e resposta, bem como nos diferentes arquivos de log (depois de ativar o log forense), descobri que o redirecionamento de domínio era do tipo iframe redirection em vez de HTTP redirect ) e as entradas de DNS estavam com defeito. Essas entradas de DNS com falha e o redirecionamento fizeram com que o Apache entregasse o padrão VirtualHost , já que nenhum dos ServerNames ou ServerAlias fornecidos correspondeu aos domínios solicitados.

    
por 01.07.2018 / 18:23