Apache 中的 VirtualHost 为浏览器提供了错误的页面(但不为 curl 提供了错误的页面)

Apache 中的 VirtualHost 为浏览器提供了错误的页面(但不为 curl 提供了错误的页面)

我尝试使用不同的虚拟主机在同一台 Apache 服务器(在 Ubuntu 16.04 上运行的 Apache 2.4)上托管不同的网站。但是,尝试打开时,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-enableda2ensite

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 在本地访问这两个网站。

这将返回所需的正确文档。但是,从远程客户端通过浏览器访问这两个站点domain_one仅能实现 Apache 功能(由于技术原因,无法测试domain-two.tld,浏览器中的缓存已停用)。

这种奇怪的行为从何而来?我该如何缩小范围?


根据@kubanczyk 的评论进行更新:

  • curl问题:对远程请求而不是本地curl请求返回什么localhost
  • 答案:更正页面内容。

为了pvz-sphere.dedomain_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.dedomain_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

答案1

在查看了请求和响应标头以及不同的日志文件(启用取证日志记录后)后,我发现域重定向(类型为iframe redirection而不是HTTP redirect)和 DNS 条目均存在错误。这些错误的 DNS 条目和重定向使 Apache 提供默认设置,VirtualHost因为没有一个给定的ServerNamesServerAlias匹配请求的域。

相关内容