에서 실행되는 서비스 (도커 레지스트리)가 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.log
I 있습니다 :
[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을 여기에 넣을 것입니다.