web-dev-qa-db-ja.com

Docker nginxリバースプロキシが「502 Bad Gateway」を提供する

Nginxを備えたdockerコンテナーを他のdockerコンテナーへのリバースプロキシとして機能させようとしていますが、ベースロケーション「/」以外のロケーションで「Bad Gateway」を取得し続けています。

次のサーバーブロックがあります。

server {

  listen 80;

  location / {
    proxy_pass "http://game2048:8080";
  }

  location /game {
    proxy_pass "http://game:9999";
  }

}

http://localhostただしhttp://localhost/gameこれはブラウザで「Bad Gateway」を提供し、nginxコンテナでこれを提供します。

[error] 7#7: *6 connect() failed (111: Connection refused) 
while connecting to upstream, client: 172.17.0.1, server: , 
request: "GET /game HTTP/1.1", upstream: "http://172.17.0.4:9999/game", 
Host: "localhost"

公式のnginx Dockerイメージを使用して、独自の構成を適用します。あなたはそれをテストし、ここですべての詳細を見ることができます: https://github.com/jollege/ngprox1

何がうまくいかないのですか?

NB:これらの名前に一致するように、Dockerホストでローカルホスト名エントリを設定しました。

127.0.1.1       game2048
127.0.1.1       game
9
jollege

それを私が直した! nginx configの異なるサーバーブロックにサーバー名を設定します。ホストポートではなく、ドッカーポートを使用することを忘れないでください。

server {

  listen 80;
  server_name game2048;

  location / {
    proxy_pass "http://game2048:8080";
  }

}

server {

  listen 80;
  server_name game;

  location / {
    # Remember to refer to docker port, not Host port
    # which is 9999 in this case:
    proxy_pass "http://game:8080";
  }

}

修正を反映するためにgithubリポジトリが更新されました。古いreadmeファイルは./README.old01.mdの下にあります。

一般的に、他の人に質問を慎重に言い表すときに答えを見つけます。あなたはその気持ちを知っていますか?

12
jollege

私はこのコード行を手伝ってくれましたproxy_set_header Host $http_Host;

location / {
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Host $http_Host;
   proxy_set_header X-NginX-Proxy true;

   proxy_redirect off;
   proxy_pass http://myserver;
}

同じエラーが発生しましたが、構成に記載されているIPとポートでサービスを提供していないWebアプリケーションの場合です。

あなたはこれを持っていると言います:

location /game {
    proxy_pass "http://game:9999";
}

次に、 http:// game:9999 で期待するWebアプリケーションが実際に 'game'という名前のdockerコンテナー内から提供され、コードがポート9999でアプリケーションを提供するように設定されていることを確認します。