$scheme に基づく NGINX アップストリーム

$scheme に基づく NGINX アップストリーム

HTTPトラフィックとHTTPSトラフィックの両方を提供するアップストリームがあります。問題は、NGINXが正しいアップストリームポートにトラフィックを送信できるようにするにはどうすればよいですか?

現在の構成は次のとおりです。

upstream  platfrom-dev-eu-app {
    server 52.***.***.80:443;
}
...
server {
...

    location / {
        proxy_redirect          off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass $scheme://platfrom-dev-eu-app$request_uri;
    }
}

ここで見ることができる唯一の解決策は、2つのアップストリームを追加することです。:80二つ目は:443その後、if / elseを使用してserver {}正しいものを選択します(または後でポートを設定しますproxy_pass)。例:

upstream  platfrom-dev-eu-app-ssl {
    server 52.***.***.80:443;
}

upstream  platfrom-dev-eu-app {
    server 52.***.***.80;
}
...
    if ($scheme = "http") {
         proxy_pass http://platfrom-dev-eu-app$request_uri;
    }

    if ($scheme = "https") {
        proxy_pass https://platfrom-dev-eu-app-ssl$request_uri;
    }

これが正しい解決策ですか?それとももっと適切な方法がありますか?

ベストアンサー1

単に2つのサーバーを宣言するだけでif文を避けることができます。これが私がこの種の作業に使用するパターンです。

upstream  platfrom-dev-eu-app-ssl {
    server 52.***.***.80:443;
}

upstream  platfrom-dev-eu-app {
    server 52.***.***.80;
}

server {
  listen 80;

  include "common.conf";
  proxy_pass http://platfrom-dev-eu-app$request_uri;
}

server {
  listen 443 ssl;
  # SSL configuration

  include "common.conf";
  proxy_pass https://platfrom-dev-eu-app-ssl$request_uri;
}

このcommon.confファイルを作成し、両方のサーバーに共通の構成を置きます。

信頼できる安全なネットワーク上にある場合は、リバースプロキシでSSLを終了し、プレーンテキストでのみアプリケーションサーバーと通信できます。次に、アプリケーションサーバーのSSL接続に使用されるポートにサーバーを定義し、fastcgiパラメーターをHTTPSに設定しますon

おすすめ記事