5

我正在使用 Ubuntu 14.0 设置一个新的 Web 服务器,按照此处的说明创建虚拟主机,但是我的单个附加虚拟主机始终加载默认站点 (/var/www/html)。

这是我的虚拟主机配置(我已经用 example.com 替换了我的域,但在其他方面是相同的):

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com

  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/example/app

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我没有对安装在 Ubuntu 14 中的 Apache 2.4 配置进行任何其他更改。

编辑:在对此虚拟主机进行更改后,我正确地启用了站点并重新启动了 apache。

当我在浏览器中访问 example.com 时,我得到了默认站点。我究竟做错了什么?如何让这个虚拟主机加载正确的目录?

编辑:解决方案是重新启动命令( https://stackoverflow.com/a/23713299/225682)中缺少“sudo” 。

4

6 回答 6

0

终于在https://stackoverflow.com/a/23713299/225682找到了答案。

Apache 必须使用 sudo 重新启动,否则更改实际上没有效果。

于 2014-09-22T13:14:57.543 回答
0

编辑虚拟主机后,您需要重新启动我们的 apache 服务器,还需要添加启用虚拟主机。启用:

sudo a2ensite example.conf (name of config file inside sites-available directory)

重新启动服务器:

sudo service apache2 restart

还要检查 www 目录的权限,也许 apache 的用户无法读取该目录。

于 2014-09-16T12:56:45.477 回答
0

您是否在配置中的某处启用了虚拟主机?

NameVirtualHost *:80
于 2014-09-16T13:02:54.517 回答
0

这就是我的故事。我有全新安装:

webmaster@ubuntuserver:/srv$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial
webmaster@ubuntuserver:/srv$
webmaster@ubuntuserver:/srv$ apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2017-09-18T15:09:02
webmaster@ubuntuserver:/srv$

我使用了非常简单的虚拟主机配置:

<VirtualHost *:80>
ServerAdmin admin@testsite.com
ServerName testsite.com
ServerAlias www.testsite.com
DocumentRoot /var/www/testsite
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

尝试了许多建议,例如:

  • 目录权限设置;
  • 目录内容 chmod 到 774;
  • 防火墙设置;

最后通过添加解决:

Listen 80

到虚拟主机配置的顶部,所以它看起来像:

Listen 80
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName testsite.com
ServerAlias www.testsite.com
DocumentRoot /var/www/testsite
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

最终,虚拟主机开始响应并按预期运行。

不过有趣的是,我后来尝试重新创建问题,即使没有设置虚拟主机也能正常工作Listen 80。但是,我确信使虚拟主机响应的触发器正在Listen 80设置。

无论如何,您也可以参考 Apache 文档:

https://httpd.apache.org/docs/2.4/bind.html

于 2017-12-31T16:12:39.047 回答
0

6 年太晚了,但也许这会对某人有所帮助。在调试此类问题时,首先检查 apache 是否可以看到您的虚拟主机配置:apachectl -S

您应该在输出中看到您的虚拟主机配置:

*:80                   example.com (/etc/httpd/conf.d/example.com.conf:2)

如果您看不到它,则可能配置文件路径未包含在主配置文件中,或者文件本身缺少 .conf 扩展名。

如果您在输出中看到您的 VirtualHost,但您仍然获得默认的 VirtualHost,请检查ServerName主配置文件中的全局指令。它不应该与您的 VirtualHost ServerName 匹配。

当心 - 如果您的全局 ServerName 未设置,apache 将使用 rDNS 获取一个。因此,如果您的 IP 地址的反向 DNS 记录匹配 example.com(与您的 VirtualHost 相同),您的 VirtualHost 可能会被忽略。我相信这是一个非常常见的问题来源,我还没有在论坛上找到它。host如果您遇到此问题,请使用命令检查您的 IP 的 rDNS 记录。

于 2020-10-20T15:50:44.997 回答
-1

尝试使用 -t 选项运行 apachectl 命令,这将检查所有配置是否正确。这个虚拟主机是哪个文件。您是否重新启动了 apache 以获取这些更改?

apachectl restart
于 2014-09-16T12:53:24.897 回答