プロキシ(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を置くことができる例にすぎないと仮定します。

関連情報