(ubuntu)nginx:[emerg]bind()到0.0.0.0:80失败(13:权限被拒绝)

(ubuntu)nginx:[emerg]bind()到0.0.0.0:80失败(13:权限被拒绝),nginx,bind,Nginx,Bind,我需要帮助找出此权限被拒绝错误的根本原因。nginx需要什么权限?为什么这么复杂?套接字API bind()到小于1024的端口(如标题中提到的80)需要根访问 这是“ 另一种更简单的方法是以root用户身份运行nginx。如果在运行“nginx-t”后看到此消息,则您不必以root用户身份运行premission“sudo nginx-t”如果您使用的端口大于1024且具有root权限,但仍然存在此问题,这可能是由SELinux引起的: 检查segange端口中的这个端口,比如8024 sud

我需要帮助找出此权限被拒绝错误的根本原因。nginx需要什么权限?为什么这么复杂?

套接字API bind()到小于1024的端口(如标题中提到的80)需要根访问

这是“


另一种更简单的方法是以root用户身份运行nginx。

如果在运行“nginx-t”后看到此消息,则您不必以root用户身份运行premission“sudo nginx-t”

如果您使用的端口大于1024且具有root权限,但仍然存在此问题,这可能是由
SELinux
引起的:

检查segange端口中的这个端口,比如8024

sudo semanage port -l | grep http_port_t
sudo semanage port -a -t http_port_t  -p tcp 8024
如果端口列表中不存在8024,请将其添加到segange端口中

sudo semanage port -l | grep http_port_t
sudo semanage port -a -t http_port_t  -p tcp 8024
###2017年12月22日更新

有时您的SELinux已禁用,您需要先执行它。通过以下方式检查SELinux的状态:

$sestatus


更多步骤可以阅读这篇精彩的文章:

nginx需要root访问。请使用

SudoNginx


下一步加上密码,最好的解决方案是:

1) 将用户添加到sudoers(我的用户是prod)

2) 在circus(process manager)中,在nginx可执行文件之前追加sudo,我的如下所示:

[watcher:nginx]
cmd = sudo /usr/sbin/nginx
args = -c /home/t/Projects/x_b_11/etc/nginx.conf -p /home/t/Projects/x_b_11
3) 最后将行添加到文件/etc/sudoers中(我的用户是prod)。此行避免了错误(sudo:不存在tty,也没有指定askpass程序)。可能需要重新启动会话(重新启动)。享受


是塞利努克斯。请看我的回答:使用
sudo
运行应用程序似乎是个坏主意。我真的很好奇sudo nginx是否安全。我不知道它是否安全。但是,非root用户应该需要sudo权限才能启动nginx。您可以参考下面的链接了解如何保护nginx。否,nginx不需要root访问。但是任何想要使用0-1024之间端口的东西都需要root访问,他的nginx被配置为监听端口80。尝试侦听端口80的任何内容都需要根访问权限。将nginx重新配置为监听端口1025,不需要根访问。