.NET 에서 port 5000
http 요청을 리디렉션하기 위해 nginx를 설치한 서비스(docker 레지스트리)가 실행 중입니다 . 컬을 하면 효과가 있지만 컬을 하면8080
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.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을 넣을 수 있는 예일 뿐이라고 가정합니다.