nginx:没有权限绑定端口 8090,但它绑定到 80 和 8080

nginx:没有权限绑定端口 8090,但它绑定到 80 和 8080

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

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

/var/log/nginx/error.log

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

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

user  nginx;

此外,用户 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>;
    ...
}

我只有一个服务于端口 443 的监听器。

当我以非 root 身份启动其他服务(例如SimpleHTTPServer端口 8090 等)时,一切正常:

$ 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 -

通常,权限被拒绝的原因有哪些?

系统是 Fedora 18 ngnix 是原版 Fedora 1.2.9

答案1

这很可能与 SELinux 有关

semanage port -l | grep http_port_t
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

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

semanage port -a -t http_port_t  -p tcp 8090

将把端口 8090 添加到列表中。

相关内容