使用两个子域名 httpd 运行两个网站

使用两个子域名 httpd 运行两个网站

我有一个域名example.com,它有两个子域名:website.example.comcloud.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

您已将 设置ServerNamewww.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>

相关内容