我有一个域名example.com
,它有两个子域名:website.example.com
和cloud.example.com
。我为它们两个都设置了 A 记录,并将其设置为我的服务器的 IP 地址。
我的服务器是带有 centos7 的 VPS,/var/www/html/
每个域名都有以下两个目录:
/var/www/html/website.example.com/
包含所有 wordpress 文件/var/www/html/cloud/
包含 ownCloud 的所有文件。
我增强了我的 httpd.conf 以包含:
Listen 80
Listen 81
# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/html/website.example.com
ServerName www.website.example.com
</VirtualHost>
NameVirtualHost *:81
<VirtualHost *:81>
DocumentRoot /var/www/html/cloud
ServerName www.cloud.example.com
</VirtualHost>
现在,当我重新启动 httpd 并运行 wget 时,我收到以下响应:
my.vps.ip.address
-> WordPress 网站的响应my.vps.ip.address:80
-> WordPress 网站的响应my.vps.ip.address:81
-> 云站点的响应website.example.com
-> WordPress 网站的响应cloud.example.com
-> 来自 wordpress 网站的回应。
这会导致浏览器体验 -> 当我website.example.com
在浏览器中输入时,我进入了我的 wordpress 网站。但是当我输入时,cloud.example.com
我也会进入我的 wordpress 网站,而不是 owncloud 网站。
我错过了什么?
答案1
您已将 设置ServerName
为www.cloud.example.com
,但尝试使用 进行访问cloud.example.com
。您还忘记了端口 81。
将其设置为cloud.example.com
或添加ServerAlias cloud.example.com
。
您无需在其他端口上设置cloud.example.com
。Apache 完全有能力处理同一端口上的不同 VirtualHosts。只需将其保留在端口 80 上即可。
它看起来应该是这样的:
Listen 80
# Listen 81
# Just stay on port 80, don't make it more complicated for the clients
# Listen for virtual host requests on all IP addresses
# NameVirtualHost *:80
# This is not needed anymore with Apache 2.4
<VirtualHost *:80>
DocumentRoot /var/www/html/website.example.com
ServerName website.example.com
ServerAlias www.website.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/cloud
ServerName cloud.example.com
</VirtualHost>