port 5000
で実行するサービス(dockerレジストリ)があります。nginxをインストールして、httpリクエストを8080
から5000
にリダイレクトします。 localhost:5000
へのカールを作成すると機能しますが、localhost:8080
へのカールを作成するとBad gatewayエラーが発生します。
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"
何か案が?
私はそのLinuxボックスを想定しているため、接続を許可するポリシーがないため、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をそこに配置するとします。