(13:权限被拒绝)连接到上游时:[nginx]


296

我正在使用Nginx和Gunicorn配置Django项目。

当我访问gunicorn mysite.wsgi:application --bind=127.0.0.1:8001Nginx服务器中的端口时,我的错误日志文件中出现以下错误;

2014/05/30 11:59:42 [crit] 4075#0:* 6 connect()到127.0.0.1:8001在连接到上游时失败(13:权限被拒绝),客户端:127.0.0.1,服务器:localhost,请求:“ GET / HTTP / 1.1”,上游:"http://127.0.0.1:8001/",主机:“ localhost:8080”

以下是我nginx.conf文件的内容;

server {
    listen 8080;
    server_name localhost;
    access_log  /var/log/nginx/example.log;
    error_log /var/log/nginx/example.error.log;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    }
}

在HTML页面中,我得到了502 Bad Gateway

我在做什么错?

Answers:


680

我遇到了类似的问题,使Fedora 20,Nginx,Node.js和Ghost(博客)正常工作。原来我的问题是由于SELinux造成的

这应该可以解决问题:

setsebool -P httpd_can_network_connect 1

细节

我检查了SELinux日志中的错误:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

并发现运行以下命令解决了我的问题:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

参考文献:

http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/

https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details

http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels

http://www.linuxproblems.org/wiki/Selinux


22
谢谢,我的固定问题太多,我在CentOS 7

21
谢谢。我需要yum install policycoreutils-python得到audit2allow第一。参考:centos.org/forums/viewtopic.php?
t = 5012

非常感谢,使用节点服务器可以为我工作。(Redhat 7)
BlaShadow14年

另请参阅此处。在我的情况下,我必须将nginx添加到存储wwwroot的用户组中。

1
在Fedora 23上,安装policycoreutils-python不会提供命令audit2allow。经过研究,我发现您应该安装devel软件包yum install policycoreutils-devel。参考:danwalsh.livejournal.com/61710.html
Joseph N.

182

我也遇到了这个问题。另一个解决方案是为httpd网络连接切换SELinux布尔值on(Nginx使用httpd标签)。

setsebool httpd_can_network_connect on

要保留更改,请使用-P标志。

setsebool httpd_can_network_connect on -P

您可以使用查看所有可用的httpd SELinux布尔值列表

getsebool -a | grep httpd

1
这行得通,谢谢。我是从CentOS 6.5-> 6.7更新的,它在更新过程中必须默认关闭该值,因为在更新之前它可以正常工作。简单修复。
Mike Purcell 2015年

16

在Centos 7上也有类似的问题。当我尝试应用Sorin规定的解决方案时,我开始循序渐进。首先,我有一个{write}权限被拒绝。然后,当我解决我的权限{connectto}被拒绝时。然后再次返回到权限{write}被拒绝。

在上面的@Sid答案中,使用getsebool -a | grep httpd和切换标志进行了检查之后,我发现除了httpd_can_network_connect处于关闭状态之外。http_anon_write也已关闭,导致权限被拒绝写入和权限被拒绝{connectto}

type=AVC msg=audit(1501830505.174:799183): avc:  
denied  { write } for  pid=12144 comm="nginx" name="myroject.sock" 
dev="dm-2" ino=134718735 scontext=system_u:system_r:httpd_t:s0 
tcontext=system_u:object_r:default_t:s0 tclass=sock_file

使用sudo cat /var/log/audit/audit.log获得| grep nginx | 如上所述,grep被拒绝。

因此,我一次解决了一个问题,一次切换了一个标志。

setsebool httpd_can_network_connect on -P

然后运行上述@sorin和@Joseph指定的命令

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | 
audit2allow -M mynginx
sudo semodule -i mynginx.pp

基本上,您可以检查setebool上设置的权限,并将其与从grepp'ing'audit.log nginx获得的错误相关联,拒绝


14

我已经通过以当前登录的用户mulagala的身份运行Nginx来解决了我的问题。

默认情况下,用户nginx定义在nginx.conf文件的最顶部,如下所示;

user nginx; # Default Nginx user

nginx更改为当前用户的名称-mulagala

user mulagala; # Custom Nginx user (as username of the current logged in user)

但是,这可能无法解决实际问题,并且可能实际上会产生偶然的副作用。

有关有效的解决方案,请参阅Joseph Barbere的解决方案


谢谢您帮助我完成了这一任务
霸主


2

在centos服务器上连接到upstreamnginx的13权限被拒绝-

setsebool -P httpd_can_network_connect 1


1

我也遇到了这个问题。我将Nginx与HHVM结合使用,以下解决方案解决了我的问题:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"

sudo restorecon -R -v /etc/nginx/fastcgi_temp

1
  1. 签入用户 /etc/nginx/nginx.conf
  2. 将所有权更改为用户。
sudo chown -R nginx:nginx /var/lib/nginx

现在看魔术。


0

非常感谢。我已将本指南应用于:Centos 7,AspNet Core 3.1,Nginx设置。


0

谢谢大家的回答。在对问题进行数天的故障排除后,库马尔在19年8月21日12:14的回答给了我喘息的机会,即:

connect() to 127.0.0.1:9090 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server

我应用的解决方案如下:

setsebool -P httpd_can_network_connect 1

-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
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.