(13:权限被拒绝)连接上游:
我正在用nginx和gunicornconfigurationdjango项目。 当我访问我的端口gunicorn mysite.wsgi:application --bind=127.0.0.1:8001
在nginx服务器我在我的错误日志文件中得到以下错误。
2014/05/30 11:59:42 [crit] 4075#0: *6 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "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
。
我在做什么错误?
Fedora 20,Nginx,Node.js和Ghost(博客)都有类似的问题。 事实certificate,我的问题是由于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
我也遇到了这个问题。 另一种解决scheme是切换SELinux的布尔值为httpdnetworking连接on
(Nginx使用httpd标签)。
setsebool httpd_can_network_connect on
要使更改保持使用-P标志。
setsebool httpd_can_network_connect on -P
您可以看到所有可用的httpd使用的SELinux布尔表
getsebool -a | grep httpd
我已经通过运行我的nginx作为我现在的工作用户mulagala
来解决我的问题。默认情况下,用户在我的nginx.conf
文件中是nginx
。我们可以在nginx.conf
文件的顶部find该行。
user nginx;
将其更改为您当前的工作用户名称
user mulagala;
在Centos 7上有类似的问题。当我尝试应用Sorin规定的解决scheme时,我开始循环移动。 首先,我有一个许可{写}拒绝。 然后当我解决了,我有一个许可{connectto}被拒绝。 然后再回到权限{写入}拒绝。
以上@Sid回答上面的使用getsebool -a | grep httpd
检查标志 getsebool -a | grep httpd
和切换他们我发现,除了httpd_can_network_connectclosures。 http_anon_write也被closures导致权限被拒绝写入和权限被拒绝{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
基本上你可以检查在setsebool上设置的权限,并将其与grepp'ing'audit.log nginx获得的错误相关联,否认
我也遇到了这个问题。 我使用HHVM的Nginx,下面的解决scheme解决了我的问题:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?" sudo restorecon -R -v /etc/nginx/fastcgi_temp
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx sudo semodule -i mynginx.pp