Apache 虚拟主机设置在重启后总是失败

Apache 虚拟主机设置在重启后总是失败

只需在 Debian 6 中设置一个 apache 网络服务器并添加以下虚拟主机:

<VirtualHost 123.45.67.89:80> 
   ServerAdmin [email protected] 
   ServerName mysite.com 
   ServerAlias www.mysite.com 
   DocumentRoot /srv/www/mysite.com/public_html 
   ErrorLog /srv/www/mysite.com/logs/error.log 
   CustomLog /srv/www/mysite.com/logs/access.log combined 
</VirtualHost>

然后我启用它(默认的 vhost 也已启用):

a2ensite mysite.com 

重新加载:

/etc/init.d/apache2 reload 

我的 /etc/hosts 如下:

127.0.0.1      localhost.localdomain   localhost 
123.45.67.89   myhost.mysite.com       myhost

然后我通过访问进行测试我的站点www.mysite.com. 至此,一切运行正常。

问题是,每次我重新启动,我就无法再访问我的网站了。不适用于我的站点www.mysite.com

经过一番摆弄和监控日志后,似乎重启后 apache 总是在查找文件/etc/apache2/htdocs. 任何配置文件中均未指定。

重启后我可以让它再次工作的唯一方法是发出/etc/init.d/apache2 重新加载

有什么建议么?

提前致谢。


[更新 1]

这是/etc/apache2/sites-enabled/

lrwxrwxrwx 1 root root 26 May  4 13:41 000-default -> ../sites-available/default
lrwxrwxrwx 1 root root 29 May  4 11:12 mysite.com -> ../sites-available/mysite.com

这是/var/log/apache2/error.log启动后立即

[Wed May 04 13:43:17 2011] [notice] caught SIGTERM, shutting down
[Wed May 04 13:43:37 2011] [notice] Apache/2.2.16 (Debian) configured -- resuming normal operations

我如何确保 apache 在启动时启动?执行:

update-rc.d apache2  defaults

将会输出:

update-rc.d: using dependency based boot sequencing

我应该尝试/etc/init.d/apache2 重新加载里面/etc/rc.local?(只是为了确保它被执行)


[更新 2]

我刚刚做了一些我认为可以解决问题的事情。我所做的就是改回:

NameVirtualHost 123.45.67.89:80

NameVirtualHost *:80

然后更改每个 vhost 文件:

<VirtualHost 123.45.67.89:80>

<VirtualHost *:80>

之后它就可以正常工作了。我尝试重新启动 2-3 次,但仍然可以正常工作。但我不知道这是否是一个好的设置。

我首先使用 IP 地址的原因是因为我的 VPS 提供商的 wiki/doc/library 是这么说的。

所以我想我现在应该结束这个话题并进行更多的测试。

多谢你们。

答案1

您能否发布以下内容:

/etc/apache2/sites-enabled/ 的内容

重启期间 /var/log/apache2/error.log 的内容(一旦您启动,在日志底部应该有启动日志。

一个非常低水平的、不能真正解决问题的解决方案就是

put /etc/init.d/apaceh2 reload inside /etc/rc.local.

最后,你确定 apache 在启动时启动了吗?运行以下命令

update-rc.d apache2  defaults

答案2

这个解决方案很有趣,nightrod。

我的猜测是,在 Apache 启动时,您的 IP 仍未设置 - 要么是因为 eth* 已关闭,要么是因为您正在使用静态 DHCP 并正在等待 DHCP 服务器的答复,等等。因此,Apache(猜测如下)不会加载 VirtualHost 定义或 NameVirtualHost 指令,因为 IP 目前未在服务器上配置,因此不可能匹配。我猜它仍然将端口绑定为 *:80,因为环回设备可用,因此它可以合理地启动。结果是,在启动 eth* 后,Apache 处于监听状态,但尚未配置 VirtualHost。

相关内容