只需在 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。