![Apache 配置:“没有可用的监听套接字”](https://linux22.com/image/527760/Apache%20%E9%85%8D%E7%BD%AE%EF%BC%9A%E2%80%9C%E6%B2%A1%E6%9C%89%E5%8F%AF%E7%94%A8%E7%9A%84%E7%9B%91%E5%90%AC%E5%A5%97%E6%8E%A5%E5%AD%97%E2%80%9D.png)
我正在尝试配置 apache2(它是在 Enfinity Suite 内部配置的),但是配置似乎出了问题。
如果我设置:
收听 86
它说:
(OS 10048)通常只允许使用每个套接字地址(协议/网络地址/端口)一次。:make_sock:无法绑定到地址 0.0.0.0:86 没有可用的监听套接字,正在关闭
如果我设置:
监听 127.0.0.1:86
它说:
(OS 10013)试图以访问权限禁止的方式访问套接字。:make_sock:无法绑定到地址 127.0.0.1:86 没有可用的监听套接字,正在关闭
如果我将端口设置为高于 450,比如说 Listen 127.0.0.1:8080,它会显示:
(OS 10048)通常只允许使用每个套接字地址(协议/网络地址/端口)一次。:make_sock:无法绑定到地址 0.0.0.0:450 没有可用的监听套接字,正在关闭
有人可以解释一下发生了什么吗?(一些 Windows 政策?)
答案1
您的 apache 进程可能以与启动它的用户不同的有效用户身份运行。请确保启动它的用户有权创建侦听套接字(对于小于 1024 的端口,这应该只有 root 用户)。还要确保您要使用的端口尚未被占用(使用netstat -an
)。
它不知道错误消息的区别。
答案2
是的,您应该以 root 身份启动 apache,它会降低自己的权限,但它必须是 root,这样它才能绑定到小于 1024 的端口,如上所述。
您还可以在 Linux 中尝试 netstat -nap | grep LISTEN 并查找在该端口上监听的程序,-p 将告诉您哪个程序已绑定到该端口。如果不使用 Linux,还有其他工具(如 lsof)可以告诉您这些信息,只是不那么干净。
答案3
您收到的这些错误来自 Winsock。快速入门:
- 操作系统 10013: 拒绝访问
- 操作系统 10048:地址已被使用
您需要以相当于管理员的用户身份运行 Apache2 才能绑定到 1000 以下的端口,但您尝试绑定到 :8080 的尝试即使以普通用户身份也应该有效。可能是其他程序占用了该端口,而您运气不佳。您可以通过netstat -ano |find "LIST"
从 cmd 提示符运行来找出是什么程序(请注意,不是像 Linux 那样的 -anp)。这将为您提供占用该端口的进程 ID,然后您可以在任务管理器中查找该进程 ID。
一个可能性很小的原因是,您看到的是出于某种原因尝试启动 Apache2 两次。第一个实例正确地绑定到正确的端口,但第二个实例却不能,因为第一个实例卡在了该端口上。如果是这种情况,您可能会看到一些重复的日志文件,它们的时间戳非常接近。
答案4
就我而言,解决方案是按如下方式编辑 /etc/apache2/ports.conf 文件:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
NameVirtualHost *:80
Listen 80
Listen 192.168.1.11:3001
<IfModule ssl_module>
NameVirtualHost *:443
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
我希望这能帮助到大家。再见