我正在努力解决一些奇怪的权限相关行为:当我配置 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 添加到列表中。