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

에서 실행되는 서비스 (도커 레지스트리)가 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"

어떤 생각?



답변

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

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

# setsebool -P httpd_can_network_connect true

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


답변

오류 메시지를 기반으로 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을 여기에 넣을 것입니다.


답변