为什么启动 Apache2 时会出现“权限被拒绝:make_sock:无法绑定到地址”的错误信息?

为什么启动 Apache2 时会出现“权限被拒绝:make_sock:无法绑定到地址”的错误信息?

我可以用它停止

/etc/init.d/apache2 stop

但是当我想使用以下命令重新启动它时:

/etc/init.d/apache2 start

我收到此错误:

Starting web server apache2                                                  /usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

答案1

关于您所遇到的错误的一些话,希望可以帮助您避免将来遇到类似的情况。

在 Linux 中,0 到 1024 之间的端口是为系统保留的。这意味着,要使用某个端口,您必须具有更改(访问)基本系统设置的权限。root 用户具有此类权限,并且实际上可以使用 0 - 1024 范围内的端口。

在您的问题中,正如您所看到的,系统通过 Apache2 响应指出了问题的根源([...]无法绑定到地址等等80):

(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

当 Apache2 http 守护程序启动时,它会尝试绑定 80 端口,因为它是 HTTP 中使用的默认端口,这是系统分配端口内的端口,因此只有 root 才能访问。

您以没有 root 权限的普通用户身份执行了启动命令,导致执行失败。

简单来说:

你:

你好,Apache2。我是 Kongthap,我告诉你开始 ( /etc/init.d/apache2 start)

Apache2:

好的。我正在启动(启动 Web 服务器 apache2)

系统,请给我80端口来使用并监听连接。

系统:

好的。请稍等片刻检查...

啊...抱歉,Apache2,但我不能让你在 80 端口运行,这是供个人使用的。

并且您没有正确的权限来绑定它。(Operation not permitted

Apache2:

哦,Kongthap,我启动失败,系统不允许我这样做((13)Permission denied:[...]

结论

解决这个问题主要有两种方案:

  1. 使用 root 权限运行 Apache2 HTTP 守护程序sudo

    sudo service apache2 start
    

    或者:

    sudo /etc/init.d/apache2 start
    
  2. 将默认端口从 更改80为大于 的端口1024,例如200025009000等。在这种情况下运行的典型端口是8080

    sudo vi /etc/apache2/ports.conf
    

    查找,如果没有,则添加:

    Listen 8080
    

    或您选择的任何其他端口,例如端口> 1024,并且所选端口是不是被另一个进程使用。

答案2

以下是启动/停止/重新启动 apache 服务器的命令:

  • 开始:

    sudo /etc/init.d/apache2 start
    
  • 停止:

    sudo /etc/init.d/apache2 stop
    
  • 重启:

    sudo /etc/init.d/apache2 restart
    

答案3

通过发出命令检查 selinux 端口上下文

semanage port -l | grep http

如果它存在于 http_port_t 列表中,那么就可以了,否则通过以下方式添加你的端口

semanage port -a -t http_port_t -p tcp 80

或者您想要分配的内容。

答案4

这是 selinux 错误,至少我的情况是这样的。要么更改布尔值,要么禁用 selinux,要么使用 将其设置为宽容setenforce 0

布尔值更改需要您运行getenforce -a | grep http,并查找“允许 http 连接网络”。复制它并将列表中显示“--off”的位置替换为“on”

相关内容