我尝试使用不同的虚拟主机在同一台 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-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 在本地访问这两个网站。
这将返回所需的正确文档。但是,从远程客户端通过浏览器访问这两个站点domain_one
仅能实现 Apache 功能(由于技术原因,无法测试domain-two.tld
,浏览器中的缓存已停用)。
这种奇怪的行为从何而来?我该如何缩小范围?
根据@kubanczyk 的评论进行更新:
curl
问题:对远程请求而不是本地curl
请求返回什么localhost
?- 答案:更正页面内容。
为了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
答案1
在查看了请求和响应标头以及不同的日志文件(启用取证日志记录后)后,我发现域重定向(类型为iframe redirection
而不是HTTP redirect
)和 DNS 条目均存在错误。这些错误的 DNS 条目和重定向使 Apache 提供默认设置,VirtualHost
因为没有一个给定的ServerNames
或ServerAlias
匹配请求的域。