프록시(nginx)에 잘못된 게이트웨이 오류가 표시됩니다.

프록시(nginx)에 잘못된 게이트웨이 오류가 표시됩니다.

.NET 에서 port 5000http 요청을 리디렉션하기 위해 nginx를 설치한 서비스(docker 레지스트리)가 실행 중입니다 . 컬을 하면 효과가 있지만 컬을 하면80805000localhost:5000localhost: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.log다음을 가지고 있습니다 :

[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

나는 그것이 Linux 상자라고 가정하고 있으므로 연결을 허용하는 정책이 없기 때문에 SELinux가 연결을 차단할 가능성이 높습니다.

당신은 달릴 수 있어야합니다

# setsebool -P httpd_can_network_connect true

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

답변2

오류 메시지에 따르면 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을 넣을 수 있는 예일 뿐이라고 가정합니다.

관련 정보