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
。