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


37

我正在努力处理一些与权限相关的奇怪行为:当我配置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”中

在site-config中,我试图这样听:

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提供服务​​。

当我SimpleHTTPServer以非root身份启动其他服务(例如端口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


首先,您需要更新到受支持的Fedora版本。第二,再试一次。如果仍然失败,请检查/var/log/audit/audit.log
迈克尔·汉普顿

2
这不是很有帮助。Fedora的18 仍支持,即使它不是Linux的许可制度从那时起没有完全改变。
frans 2014年

是的...再过四天。
迈克尔·汉普顿

Answers:


52

这很可能与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添加到列表中。


1
就是这样,谢谢!但是为什么信息很少?我猜其他人用Fedora在SELinux,太..

1
@frans:有很多信息,您只是不知道它或如何访问和使用它。如果您将SELiux设置为强制或许可模式,则所有拒绝操作都将记录到/var/log/audit.log。有可用的工具可让您过滤,理解和管理信息和SELinux策略-查看fedora seliux页面和ausearch,audit2why和audit2allow的手册
user9517支持GoFundMonica 2014年

如果可以semanage: command not found,可以使用进行安装yum install policycoreutils-python
mwfearnley

未列出http_port_t的8080,但仍然可以使用,知道为什么吗?
MaxiWheat
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.