![我无法让我的虚拟主机在 Apache 中正常工作](https://linux22.com/image/677124/%E6%88%91%E6%97%A0%E6%B3%95%E8%AE%A9%E6%88%91%E7%9A%84%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E5%9C%A8%20Apache%20%E4%B8%AD%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
虽然我知道这个主题已经在其他一些帖子中讨论过了,其中解释了如何在 Apache 中配置虚拟主机。但问题是,在寻找问题的可能答案、在 Google 上搜索并阅读 Apache 官方文档之后,我的问题仍然无法解决。
首先,我在 CentOS 7 中安装了 Apache 2.4 并运行了一个 WordPress,并且设置了以下虚拟主机:
<VirtualHost *:80>
ServerName subdomain1.domain.com
ServerAlias www.subdomain1.domain.com
DocumentRoot /some/path/to/wordpress
<Directory "/some/path/to/wordpress">
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/subdomain1-error.log"
CustomLog "logs/subdomain1-access.log" combined
LogLevel warn
</VirtualHost>
它运行正常,但后来我决定添加一个 Moodle 安装(因为服务器没有太多流量),然后如果我在 Chrome subdomain1.domain.com 或 subdomain2.domain.com 中浏览,这并不重要,Chrome 总是转到 subdomain2.domain.com(Moodle 网站)。
我在 Chrome 和 Firefox 中尝试过,结果相同。moodle 虚拟主机是:
<VirtualHost *:80>
ServerName subdomain2.domain.com
ServerAlias www.subdomain2.domain.com
DocumentRoot /some/path/to/moodle
<Directory "/some/path/to/moodle">
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/subdomain2-error.log"
CustomLog "logs/subdomain2-access.log" combined
LogLevel warn
</VirtualHost>
此外,Apache 配置文件 httpd.conf 使用指令包含这些 VirtualHosts:IncludeOptional conf.d/*.conf
该文件/etc/hosts
是:
127.0.0.1 localhost
134.122.191.221 subdomain1.domain.com
134.122.191.221 subdomain2.domain.com
我在我的 Apache Virtualhosts 配置文件中看不到任何明显的错误,所以如果有人能提示我哪里出了问题以及可能出现什么错误,我将不胜感激。
多谢。
答案1
您正在尝试设置基于名称的虚拟主机并且缺少一个重要的配置:
NameVirtualHost *:80
因此,在您的 httpd.conf 中添加上述行并重新启动 apache/httpd,它应该可以解决问题。
注意:根据Apache 2.4 文档,此指令已弃用,不再需要。
在2.3.11 之前的版本中,
NameVirtualHost
需要指示服务器特定 IP 地址和端口组合可用作基于名称的虚拟主机。在 2.3.11 及更高版本中,只要在多个虚拟主机中使用 IP 地址和端口组合,就会自动为该地址启用基于名称的虚拟主机。
但我还没有弄清楚为什么它能与上述指令一起工作。