[django] 업스트림에 연결하는 동안 (13 : 권한 거부) : [nginx]
Nginx와 Gunicorn으로 Django 프로젝트를 구성하고 있습니다.
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 실패 (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
.
내가 뭘 잘못하고 있니?
답변
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
답변
나는이 문제에 부딪쳤다. 또 다른 해결책은 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에서도 비슷한 문제가 발생했습니다. 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
기본적으로 setsebool에 설정된 권한을 확인하고 grepp’ing의 audit.log nginx에서 얻은 오류와 거부 할 수 있습니다.
답변
현재 로그인 한 사용자 인 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의 해결책을 참조하십시오 .
답변
nginx에서 api 게이트웨이 프록시 패스에 대한 centos api url에서 “502 Bad Gateway”오류가 발생하면 다음 명령을 실행하여 문제를 해결하십시오.
sudo setsebool -P httpd_can_network_connect 1
답변
centos 서버에서 13 개의 퍼미션이 거부 된 상태에서 업스트림으로 연결-
setsebool -P httpd_can_network_connect 1
답변
나는이 문제에 부딪쳤다. HHVM과 함께 Nginx를 사용하고 있는데 아래 솔루션에서 문제가 해결되었습니다.
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"
sudo restorecon -R -v /etc/nginx/fastcgi_temp