Apache(Linux Red Hat 4.1.x)启动失败,并显示消息:“地址已在使用中:make_sock:无法绑定到地址”。
# /etc/init.d/httpd start
Starting httpd: (98)Address already in use:
make_sock: could not bind to address 0.0.0.0:8000
no listening sockets available, shutting down
Unable to open logs
[FAILED]
已经尝试做过:
killall -9 httpd
Apache 似乎没有运行。端口 8000 是空闲的,因此没有什么可以阻止 Apache 占用它。(nginx 在 :80 上作为反向代理)
# netstat -tulpn| grep :80
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 17181/DarwinStreami
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7962/nginx.conf
也许有人会对如何解决这个问题有什么想法?
更新1:Apache 配置选项包括:
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
<IfModule prefork.c>
StartServers 1
MinSpareServers 5
MaxSpareServers 20
ServerLimit 200
MaxClients 200
MaxRequestsPerChild 2000
User apache
Group apache
DocumentRoot "/var/www/html"
NameVirtualHost *:8000
更新2:未找到 Pid:
# ls /etc/httpd/run/*.pid
/etc/httpd/run/crond.pid /etc/httpd/run/sshd.pid
/etc/httpd/run/dhclient-eth0.pid /etc/httpd/run/streamingadminserver.pid
/etc/httpd/run/haldaemon.pid /etc/httpd/run/syslogd.pid
/etc/httpd/run/messagebus.pid /etc/httpd/run/syslog-ng.pid
/etc/httpd/run/nginx.pid /etc/httpd/run/xfs.pid
更新3:重启服务器没有帮助;)
更新4: nc -l 8000
工作正常,所以问题不在于 8000 端口,而在于 Apache 本身。
更新5:“# /usr/sbin/lsof -i :8000”——无输出
答案1
您多次对同一套接字发出了 Listen 指令。使用这个指令grep -r Listen /etc/httpd/conf.d/*.conf /etc/httpd/conf/httpd.conf
来找出罪魁祸首。
错误条件
对同一 IP 地址和端口的多个 Listen 指令将导致出现 Address already in use 错误消息。
答案2
有时,当上次 Apache 停止时未删除 PID 文件时,我就会遇到这种情况。如果 PID 存在,请尝试在重新启动之前将其删除。
当我尝试使用与 apache 配置的运行帐户不同的帐户启动 apache 时,有时也会出现这种情况。