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


296

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.

내가 뭘 잘못하고 있니?

답변:


680

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


22
감사합니다, 저의 문제도 해결되었습니다. CentOS 7에 있습니다.
Jahan

21
감사. 먼저 yum install policycoreutils-python가야 했어요 audit2allow참조 : centos.org/forums/viewtopic.php?t=5012
gross.jonas

고마워 노드 서버를 사용하면 효과가 있습니다. (Redhat 7)
BlaShadow

여기도 참조 하십시오 . 필자의 경우 wwwroot가 저장된 홈 디렉토리의 사용자 그룹에 nginx를 추가해야했습니다.

1
Fedora 23에서 설치 policycoreutils-python는 명령을 제공하지 않았습니다 audit2allow. 약간의 연구 끝에 devel 패키지를 설치해야한다는 것을 알았습니다 yum install policycoreutils-devel. 참조 : danwalsh.livejournal.com/61710.html
Joseph N.

182

나는이 문제에 부딪쳤다. 또 다른 해결책은 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

1
감사합니다. CentOS 6.5-> 6.7에서 업데이트했으며 업데이트 전에 제대로 작동했기 때문에 업데이트하는 동안 기본값을 해제로 설정해야합니다. 간단한 수정.
Mike Purcell

16

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에서 얻은 오류와 거부 할 수 있습니다.


14

현재 로그인 한 사용자 인 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의 해결책을 참조하십시오 .


이를 통해 저를 도왔 주셔서 감사합니다
오버로드

4

nginx에서 api 게이트웨이 프록시 패스에 대한 centos api url에서 "502 Bad Gateway"오류가 발생하면 다음 명령을 실행하여 문제를 해결하십시오.

sudo setsebool -P httpd_can_network_connect 1

2

centos 서버에서 13 개의 퍼미션이 거부 된 상태에서 업스트림으로 연결-

setsebool -P httpd_can_network_connect 1


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

1
  1. 사용자 확인 /etc/nginx/nginx.conf
  2. 사용자에게 소유권을 변경하십시오.
sudo chown -R nginx:nginx /var/lib/nginx

이제 마술을보십시오.


0

정말 고맙습니다. 이 안내서를 Centos 7, AspNet Core 3.1, Nginx 설정에 적용했습니다.


0

답변 주셔서 감사합니다. Kumar의 답변에 대한 답변은 며칠 후 내가 겪고있는 문제를 해결 한 후 며칠 동안 지속되었습니다.

connect() to 127.0.0.1:9090 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server

내가 적용 한 솔루션은 다음과 같습니다.

setsebool -P httpd_can_network_connect 1

-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.