Назад | Перейти на главную страницу

VirtualHost в Apache предоставляет неправильную страницу для браузера (но не для curl)

Я пытаюсь разместить разные веб-сайты на одном сервере Apache (Apache 2.4, работающий на Ubuntu 16.04), используя разные виртуальные хосты. Однако при попытке открыть domain-two.tld сервер предоставляет веб-страницу domain-one.tld. Подобное поведение описано в этот и который вопрос. Согласно моим файлам конфигурации, ответы на эти два вопроса уже должны быть реализованы.

Виртуальные хосты определяются следующим образом:

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

и

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

Оба файла конфигурации находятся в sites-available и привязаны к sites-enabled используя a2ensite ведущий к следующему дереву каталогов:

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

После включения файлов конфигурации я перезапустил apache, чтобы перезагрузить его файлы конфигурации с помощью systemctl restart apache2. Чтобы протестировать обе конфигурации, я добавил несколько дополнительных хостов в /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

и получил доступ к обоим веб-сайтам локально с помощью curl.

Это вернет правильные документы по желанию. Однако доступ к обоим сайтам через браузер с удаленного клиента Apache предоставляет domain_one только (не удалось проверить domain-two.tld по техническим причинам в браузере отключен кеш).

Откуда такое странное поведение? Как я мог сузить круг вопросов?


Обновление из-за комментария @ kubanczyk:

Для pvz-sphere.de который 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

Для teresa-projekt.de который 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

После того, как я просмотрел заголовки запроса и ответа, а также различные файлы журналов (после включения криминалистического ведения журнала), я обнаружил, что перенаправление домена (было типа iframe redirection вместо того HTTP redirect) и записи DNS были ошибочными. Эти ошибочные записи DNS и перенаправление сделали Apache доставку по умолчанию VirtualHost поскольку ни один из данных ServerNamesили ServerAlias соответствует запрашиваемым доменам.