プロキシ(nginx)に不正なゲートウェイエラーが表示される


18

で実行されるサービス(dockerレジストリ)がありport 5000、http要求をから8080にリダイレクトするnginxをインストールしました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"

何か案が?


私の場合、プロキシを使用していたサービスは、使用中に死亡しました(そして、私はそれを認識していませんでした)。1秒でアクセスし、次の1秒で悪いゲートウェイになりました。サービスを再起動する必要がありました。
マイケルプラウツ

回答:


57

Linuxボックスであると想定しているため、接続を許可するポリシーがないため、SELinuxが接続を妨げている可能性があります。

ただ実行できるはずです

# setsebool -P httpd_can_network_connect true

その後、nginxを再起動します。


Selinuxが無効になり、サービスfirewalld
hellb0y77

2
あなただけの固定私のあなたがhellb0y77の問題を解決していない場合でも、問題は。SE_LINUXが再び攻撃します!
ウェスリーバール

1
それも私にとってはうまくいきました。誰が実際に何をしているのか、さらに情報がありますか?知らないのは嫌だ!
-martinedwards

CentOs 7に賛成し、取り組みました。これにより、どのようなセキュリティ問題が発生する可能性があるかを質問できますか。通常、ローカルトラフィックを許可する一連のiptablesルールを実行します。これが何をもたらすか疑問に思う。
エデンコルビン

1
@edencorbinは、httpdモジュールがネットワークに接続できるようにします。
ウォーレン

5

エラーメッセージに基づいて、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をそこに配置すると想定しています。


動作せず、設定127.0.0.1:5000server_name localhostserver_name registry.mydomain.comregistry.mydomain.com/ etc / hostsにホスト名を持つ同じLAN内の別のサーバーから)と両方を
試しました

[crit] 16839#0: *5 connect() to 127.0.0.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://127.0.0.1:5000/", host: "localhost:8080"localhostを使用したregistry.mydomain.comを[crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080"
起動します。– hellb0y77
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.