Apache 2.4虚拟主机被忽略

时间:2014-09-16 12:47:10

标签: apache virtualhost ubuntu-14.04 apache2.4

我正在使用Ubuntu 14.0设置新的Web服务器,在the instructions here之后创建虚拟主机,但是我的单个附加虚拟主机总是加载默认站点(/ var / www / html)。 / p>

这是我的vhost配置(我已经用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时,我获得了默认站点。我究竟做错了什么?如何让此虚拟主机加载正确的目录?

编辑:解决方案是缺少&#34; sudo&#34;在重启命令(https://stackoverflow.com/a/23713299/225682)中。

6 个答案:

答案 0 :(得分:0)

你需要在编辑vhost后重启我们服务器的apache,你还需要添加enable vhost。 启用:

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

重新启动服务器:

sudo service apache2 restart

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

答案 1 :(得分:0)

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

NameVirtualHost *:80

答案 2 :(得分:0)

最后在https://stackoverflow.com/a/23713299/225682找到答案。

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

答案 3 :(得分: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

答案 4 :(得分: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记录。

答案 5 :(得分:-1)

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

apachectl restart