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


25

我可以使用停止它

/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]

Answers:


50

关于您所得到的错误的一些说法,希望将来可以使您免于类似的情况。

在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 see中使用的默认端口,它是系统分配的端口内的端口,因此只能由root用户访问。

您以没有root特权的典型用户身份执行了start命令,从而导致执行失败。

简单来说:

您:

嗨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
    

    或您选择的任何其他端口(例如port > 1024和所选端口)未被其他进程使用。


4
真的很棒的解释!!!
Artisan

很好的解释,很好理解!
Mwirabua蒂姆2014年

很好的解释。为什么使用service首选方法?
Holloway 2014年

它们是Upstart指令,请检查此问题并回答askubuntu.com/q/19320/12218,有关更详细的信息,请参阅upstart cookbook upstart.ubuntu.com/cookbook。请记住,这些指的是服务(守护程序)处理(何时以及如何启动-停止)此问题,我的回答也解决了权限问题。
Stef K 2014年

不必要的冗长。答案不能解决问题。
雷吉2015年

7

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

  • 开始:

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

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

    sudo /etc/init.d/apache2 restart
    

重新启动计算机后,建议的所有命令似乎都正常,但重新启动过程中出现了此消息...重新启动Web服务器apache2 apache2:无法可靠地确定服务器的完全限定域名,使用127.0.1.1作为ServerName
Artisan

1
@Kongthap:这不是错误。我确信网络上充斥着对该消息的解释。
Andrea Corbellini

是的,@ AndreaCorbellini是正确的。这不是错误,因为您的IP没有任何完全合格的域名,例如mail.google.com。
2013年

4

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

semanage port -l | grep http

如果它存在于http_port_t列表中,则可以,否则按以下方式添加您的端口

semanage port -a -t http_port_t -p tcp 80

或您要分配的内容。


1

这是selinux错误,或者至少是我的情况。更改布尔值,禁用selinux或将其设置为宽松setenforce 0

布尔值更改将要求您运行getenforce -a | grep http,然后查找“允许http连接网络”。复制并替换为“开”,列表中显示“-关”


Ubuntu使用AppArmor而不是SELinux,因此您的答案与ubuntu无关。
sgx1 2014年

作为遇到此问题的centos用户,这是第一个出现stackoverflow的问题,我感谢解决此问题的帮助
Cacoon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.