프록시 (nginx)에 잘못된 게이트웨이 오류가 표시됨


18

에서 실행되는 서비스 (도커 레지스트리)가 port 5000있는데 http 요청을에서 (으) 8080로 리디렉션하기 위해 nginx를 설치 했습니다 5000. 내가 한 경우에 컬 localhost:5000이 작동하지만이에 컬을 할 때 localhost:8080내가 얻을 잘못된 게이트웨이 오류가 발생했습니다.

nginx 설정 파일 :

upstream docker-registry {
 server localhost:5000;
}

server {
 listen 8080;
 server_name registry.mydomain.com;

 proxy_set_header Host       $http_host; 
 proxy_set_header X-Real-IP  $remote_addr; 
 client_max_body_size 0; 
 chunked_transfer_encoding on;

 location / {

     proxy_pass http://docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }

}

에서 /var/log/nginx/error.logI 있습니다 :

[crit] 15595#0: *1 connect() to [::1]:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain.com, request: "GET / HTTP/1.1", upstream: "http://[::1]:5000/", host: "localhost:8080"

어떤 생각?


제 경우에는 프록시를 사용하는 중 서비스가 중단되었습니다. 1 초 동안 액세스했고 다음 초에 잘못된 게이트웨이가 생겼습니다. 서비스를 다시 시작해야했습니다.
Michael Plautz

답변:


57

나는 리눅스 상자라고 가정하므로 연결을 허용하는 정책이 없기 때문에 SELinux가 연결을 막을 가능성이 높습니다.

당신은 그냥 실행할 수 있어야합니다

# setsebool -P httpd_can_network_connect true

그런 다음 nginx를 다시 시작하십시오.


Selinux도 비활성화되었으며 서비스도 방화벽으로
처리됨

2
당신은 고정 된 당신이 hellb0y77의 해결되지 않은 경우에도 문제. SE_LINUX가 다시 공격합니다!
웨슬리 버

1
저에게도 효과가있었습니다. 누구든지 실제로 수행중인 작업에 대한 추가 정보가 있습니까? 몰라요!
martinedwards 2016 년

centOs 7에서 찬성하고 작업 한 결과 보안 문제가 무엇인지 물어볼 수 있습니다. 일반적으로 로컬 트래픽을 허용하는 iptables 규칙 세트를 실행합니다. 이것이 어떤 영향을 미치는지 궁금합니다.
edencorbin

1
@edencorbin httpd 모듈이 네트워크에 연결될 수 있도록합니다.
Warren

5

오류 메시지를 기반으로 localhost : 5000이 ipv6 주소로 확인되는지 궁금합니다. 127.0.0.1:5000으로 변경해 볼 수 있습니다

편집 : proxy_pass 줄에서 URL의 일부가 누락되었을 수 있습니까? $ request_uri를 추가하여 다음과 같이하십시오.

proxy_pass http://docker-registry/$request_uri;

또는 아마도 :

proxy_pass http://docker-registry$request_uri;

어느 것이 가장 정확한지 확실하지 않습니다.

고려해야 할 또 다른 사항. 구성은 다음을 나타냅니다.

server_name registry.mydomain.com;

따라서 localhost : 8080이 일치하지 않을 수 있습니다. 테스트를 위해 다음과 같이 변경할 수 있습니다.

server_name registry.mydomain.com localhost;

그러면 localhost : 8080과 도메인이 일치합니다. registry.mydomain.com은 예제 일 뿐이며 실제 서버 FQDN을 여기에 넣을 것입니다.


하지 작업, 세트 127.0.0.1:5000와 난 단지와 함께 시도 server_name localhost하고 server_name registry.mydomain.com(호스트 이름으로 동일한 LAN에있는 다른 서버에서 시도 registry.mydomain.com에서 / etc / hosts 파일), 모두, 아무것도하지만 ... 같은 오류
hellb0y77

[crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain,com request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080"로컬 호스트가있는 Whit registry.mydomain.com :[crit] 16839#0: *5 connect() to 127.0.0.1:5000 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:5000/", host: "localhost:8080"
hellb0y77
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.