[django] 업스트림에 연결하는 동안 (13 : 권한 거부) : [nginx]

Nginx와 Gunicorn으로 Django 프로젝트를 구성하고 있습니다.

gunicorn mysite.wsgi:application --bind=127.0.0.1:8001Nginx 서버의 포트 에 액세스하는 동안 오류 로그 파일에 다음과 같은 오류가 발생합니다.

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