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

当我进入gunicorn端口时。在Nginx服务器中,我在错误日志文件中得到以下错误;

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坏网关。

我犯了什么错误?


当前回答

我也有同样的问题。我尝试了运行以下命令的@joebarbere解决方案,解决了这个问题,但我担心安全性

setsebool -P httpd_can_network_relay 1

然后我想到了下面的解决方案

https://serverfault.com/questions/634294/nodejs-nginx-error-13-permission-denied-while-connecting-to-upstream

我使用了非标准端口,SELinux阻塞了端口。 使用以下命令检查端口是否被允许

sudo semanage port --list | grep 4343

并将端口添加到允许列表中

sudo semanage port --add --type http_port_t --proto tcp 4343

我重新启动了nginx服务,然后url就可以访问了。我觉得这样更安全。

其他回答

我也遇到过这个问题。我使用Nginx与HHVM,下面的解决方案修复了我的问题:

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

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

我也遇到过这个问题。另一个解决方案是将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

在Centos 7上也有类似的问题。当我试着使用索林开出的溶液时,我开始循环运动。首先,我的权限{写}被拒绝了。然后,当我解决了,我有一个权限{连接}拒绝。然后回到权限{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 denied 如上所述。

所以我一次解决了一个问题,一次切换一个旗帜。

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

基本上你可以检查setsebool上的权限设置,并将其与grepp'ing' audit.log nginx中获得的错误关联起来,拒绝

我也有同样的问题。我尝试了运行以下命令的@joebarbere解决方案,解决了这个问题,但我担心安全性

setsebool -P httpd_can_network_relay 1

然后我想到了下面的解决方案

https://serverfault.com/questions/634294/nodejs-nginx-error-13-permission-denied-while-connecting-to-upstream

我使用了非标准端口,SELinux阻塞了端口。 使用以下命令检查端口是否被允许

sudo semanage port --list | grep 4343

并将端口添加到允许列表中

sudo semanage port --add --type http_port_t --proto tcp 4343

我重新启动了nginx服务,然后url就可以访问了。我觉得这样更安全。

检查/etc/nginx/nginx.conf中的用户 将所有权变更为用户。

sudo chown -R nginx:nginx /var/lib/nginx