我正在使用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坏网关。
我犯了什么错误?
在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中获得的错误关联起来,拒绝
在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中获得的错误关联起来,拒绝
我已经解决了我的问题,通过运行我的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)
然而,这可能不能解决实际的问题,实际上可能会有偶然的副作用。
有效的解决方案,请参考约瑟夫·巴贝尔的解决方案。
另一个原因可能是;您正在通过nginx使用代理访问您的应用程序,但您没有添加gunicorn。袜子文件代理gunicorn。
需要在nginx配置中添加代理文件路径。
location / {
include proxy_params;
proxy_pass http://unix:/home/username/myproject/gunicorn.sock;
}
这是一个很好的教程,一步一步地实现这个功能
https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04#configure-nginx-to-proxy-pass-to-gunicorn
注意:如果你没有创建anyname。袜子文件你必须创建如果首先,要么使用上述或任何其他方法或教程来创建它。