nginx:无权限绑定端口 8090 但它绑定到 80 和 8080

fra*_*ans 49 permissions nginx fedora port

我正在努力解决一些与权限相关的奇怪行为:当我配置 nginx 以侦听端口 8080 时,一切都按预期工作,但是当我使用任何其他端口时,我会得到类似的结果

2014/01/10 09:20:02 [emerg] 30181#0: bind() to 0.0.0.0:8090 failed (13: Permission denied)
Run Code Online (Sandbox Code Playgroud)

/var/log/nginx/error.log

我不知道从哪里看,所以我真的不知道配置的哪些部分可能很有趣。

在 nginx.conf 中,nginx 被配置为作为 nginx 运行:

user  nginx;
Run Code Online (Sandbox Code Playgroud)

用户 nginx 也在另一个组“git”中

在站点配置中,我试着这样听:

server {
    listen 8090; #does not work
    #listen 8080; #works
    #listen 9090; #does not work
    #listen 9090 default; #does not work neighter
    #listen 80; #works!
    server_name <some IP>;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我只有一个监听端口 443。

当我启动一些其他服务时,例如SimpleHTTPServer端口 8090 等,作为非 root 一切正常:

$ python -m SimpleHTTPServer 8090
Serving HTTP on 0.0.0.0 port 8090 ...
localhost.localdomain - - [10/Jan/2014 09:34:19] "GET / HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)

通常拒绝权限的原因是什么?

系统是 Fedora 18 ngnix 是股票 fedora 1.2.9

use*_*517 77

这很可能与 SELinux 有关

semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
Run Code Online (Sandbox Code Playgroud)

从上面的输出中可以看出,SELinux 处于强制模式,http 只允许绑定到列出的端口。解决方案是将要绑定的端口添加到列表中

semanage port -a -t http_port_t  -p tcp 8090
Run Code Online (Sandbox Code Playgroud)

将端口 8090 添加到列表中。