我正在使用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坏网关。

我犯了什么错误?


当前回答

免责声明

在运行此操作之前,请确保您的用例没有安全隐患。

回答

我有类似的问题,让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

选项2(可能更安全)

setsebool -P httpd_can_network_relay 1

https://security.stackexchange.com/questions/152358/difference-between-selinux-booleans-httpd-can-network-relay-and-httpd-can-net

参考文献

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

其他回答

我已经解决了我的问题,通过运行我的Nginx作为我目前登录的用户,mulagala。

默认情况下,用户作为nginx被定义在nginx.conf文件的最上面部分,如下所示;

user nginx; # Default Nginx user

将nginx更改为当前用户的名称-这里,mulagala。

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

然而,这可能不能解决实际的问题,实际上可能会有偶然的副作用。

有效的解决方案,请参考约瑟夫·巴贝尔的解决方案。

免责声明

在运行此操作之前,请确保您的用例没有安全隐患。

回答

我有类似的问题,让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

选项2(可能更安全)

setsebool -P httpd_can_network_relay 1

https://security.stackexchange.com/questions/152358/difference-between-selinux-booleans-httpd-can-network-relay-and-httpd-can-net

参考文献

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

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

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

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

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

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

在centos服务器上连接到上行ginx的权限被拒绝

setsebool -P httpd_can_network_connect