Apache http服务器问题

13

我正在使用Apache版本2.2.20 (ubuntu),并尝试使用自定义httpd.conf设置,但是我遇到了以下错误消息,并希望能得到任何可以给我的指导。我是开发团队的一员,被给予了这个自定义httpd.conf文件,因此我不认为它是问题的原因(但我并不完全排除这种可能性)。

我运行命令“sudo apache2ctl -k restart”并得到以下结果:

[Fri Jul 06 11:33:34 2012] [warn] module ssl_module is already loaded, skipping
[Fri Jul 06 11:33:34 2012] [warn] module rewrite_module is already loaded, skipping
httpd not running, trying to start
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action '-k restart' failed.
The Apache error log may have more information.

如果我在我的httpd.conf文件中注释掉以下这行,我就可以消除两个警告。那我真的应该这么做吗?我去哪里可以验证这些模块是否已经在其他地方加载,而在我的conf文件中注释掉它们不会有任何影响呢?

LoadModule ssl_module modules/mod_ssl.so
LoadModule rewrite_module modules/mod_rewrite.so

至于与无法绑定到80端口相关的错误,我无法使其消失。当我运行“sudo netstat -lnp | grep :80”时,我会得到以下结果

tcp        0      0 0.0.0.0:80       0.0.0.0:*      LISTEN      6233/apache2
我知道上面的输出意味着Apache认为它正在运行,有一段时间我甚至能够在转到本地主机时看到“它可以工作!”页面,但现在当我访问那个页面时只会得到“Not Found Apache/2.2.20 (ubuntu) server at localhost port 443”错误信息。同时,我似乎无法杀死运行的Apache进程,“kill -9 6233”命令只会导致Apache的PID改变(例如从6233变成6234)。我还尝试使用“sudo etc/init.d/apache2 stop”命令,它会产生一个“* Stopping web server apache2 [ OK ]”消息,但我仍然看到Apache2进程占用端口80。
如果对这些问题有任何想法,请提供帮助。

看起来你可能已经有一个不同的Apache实例正在运行。尝试从根目录(/)搜索“apache”? - blearn
我重新启动了机器,现在端口80上没有进程在运行(至少根据“sudo netstat -lnp | grep :80”是这样)。然而Apache无法运行。我收到以下错误信息:“(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs Action '-k start' failed.” - OrwellHindenberg
我希望我在这里没有混淆问题,但是我在我的httpd.conf文件中注释掉了Listen 80和Listen 443。我运行了“apache2ctl -k start”命令。我没有收到任何消息,现在我看到apache2在端口80上运行,但是当我导航到localhost时,我仍然看到“找不到”页面。 - OrwellHindenberg
2个回答

15

看起来:模块 xxx_module 已经被加载。

回答:你正在多次加载这些模块。尝试查找并注释/删除有问题的行:

在Centos/RHEL中:

grep ssl_module -rI /etc/httpd/*   
/etc/httpd/conf/httpd.conf:LoadModule ssl_module /usr/lib64/httpd/modules/mod_ssl.so
/etc/httpd/conf.d/ssl.conf:LoadModule ssl_module modules/mod_ssl.so
在这种情况下,我在/etc/httpd/conf/httpd.conf中注释掉了一行代码,所以所有SSL内容都存储在/etc/httpd/conf.d/ssl.conf中。同样适用于rewrite_module
grep rewrite_module -rI /etc/httpd/*

在Debian/Ubuntu中:

grep ssl_module -rI /etc/apache2/*

2

我曾经遇到过类似的问题,当时我使用带有密码的SSL密钥。为了解决这个问题,我做了以下操作:

sudo pkill apache2
sudo /etc/init.d/apache2 start

我不建议从你的Apache配置文件中删除Listen *:80

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接