nginx を使用してリバース プロキシを設定する方法は?

nginx を使用してリバース プロキシを設定する方法は?

私はDockerコンテナのホスト名を取得しようとしていますが、リバースプロキシしか使えないのでそのために、私は nginx の助けを借りてまさにそれを実現しようとしています。

1 つの Docker コンテナは、ポート 8080 をローカルホストに公開する Web サービスです。

したがって、次の方法で Web サーバーにアクセスできます。

http://localhost:8080

代わりに、以下を使用したいと思います。

http://webservice.local

そこで私は/etc/hosts

127.0.0.1 webservice.local

次に、nginx をインストールし、以下を追加しました/etc/nginx/sites-available/default:

server {
     listen 80 default_server;
     listen [::]:80 default_server ipv6only=on;

     root /usr/share/nginx/html;
     index index.html index.htm;

     # Make site accessible from http://localhost/
     server_name localhost;

     location / {
             # First attempt to serve request as file, then
             # as directory, then fall back to displaying a 404.
             try_files $uri $uri/ =404;
             # Uncomment to enable naxsi on this location
             # include /etc/nginx/naxsi.rules
     }


     location webservice.local {
         proxy_pass http://localhost:8080
     }

nginx をリロードした後、ブラウザで ERR_CONNECTION_REFUSED開こうとすると次のエラーが表示されます。http://webservice.local

何が間違っていたのでしょうか? リバース プロキシを適切に設定するにはどうすればよいでしょうか?

答え1

これが正しい構文かどうかはわかりません。次のように試してください:

upstream myupstream {
    server 127.0.0.1:8080 fail_timeout=2s;
    keepalive 32;
}

location / {
     proxy_pass http://myupstream;
     proxy_redirect http://myupstream/ /;
}

このような感じ。

しかし、ポート 8080 を 80 にリダイレクトしたいだけなら、socat のようなネットワーク ユーティリティを使用しないのはなぜでしょうか?

次に、各アップストリームに対して nginx に仮想ホストを追加し、それらの仮想ホストを DNS または /etc/hosts に追加して、すべて localhost に解決する必要があります。

または、アップストリームを回避して、次のように仮想ホストを使用することもできます。

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

関連情報