1つの外部IPアドレスを使用して、https経由で複数のアプリケーションを提供する必要があります。
SSL証明書は、リバースプロキシで管理しないでください。アプリケーションサーバーにインストールされます。
SNIを使用し、エンドポイントで終了するためにSSLを渡すようにリバースプロキシを構成できますか?
これはNginxやApacheのようなものを使用して可能ですか?構成はどのように見えますか?
1つの外部IPアドレスを使用して、https経由で複数のアプリケーションを提供する必要があります。
SSL証明書は、リバースプロキシで管理しないでください。アプリケーションサーバーにインストールされます。
SNIを使用し、エンドポイントで終了するためにSSLを渡すようにリバースプロキシを構成できますか?
これはNginxやApacheのようなものを使用して可能ですか?構成はどのように見えますか?
回答:
これはHaproxyで可能です。TCPプロキシをセットアップしてSNIを抽出し、SNIに基づいてルーティングを行うことができます。以下に例を示します。
backend be.app1
mode tcp
no option checkcache
no option httpclose
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
tcp-request content reject
use-server server1 if { req.ssl_sni -m beg app1. }
server server1 server1:8443 check id 1 weight 0
SSL helloを取得するまでリクエストを遅らせることが不可欠です。そうしないと、haproxyはSNIヘッダーを受信する前に接続を試行します。
現在の構成では、SNIごとに実行しているサーバーは1つだけで、ランダムな要求を受信したくないため、重み0のサーバーを使用しています。おそらくこれで遊ぶより良い方法を見つけることができます。
これがお役に立てば幸いです。
sniproxyを使用できます:https : //github.com/dlundquist/sniproxy
設定例:
listener 0.0.0.0:443 {
protocol tls
table TableHTTPS
fallback 127.0.0.1:8443
}
listener 0.0.0.0:80 {
protocol http
table TableHTTP
fallback 127.0.0.1:8080
}
table TableHTTPS {
domain1.com backend1:443
domain2.org backend2:443
}
table TableHTTP {
domain1.com backend1:80
domain2.org backend2:80
}
2019年に予定されているTLS 1.3でも、これは確かに可能です!多くのWebサーバーまたは特殊なリバースプロキシは、すぐにこの機能を提供します。
これはNginxの設定例です。これは、リバースプロキシを必要とするセットアップで非常に一般的な選択肢です。
stream {
map $ssl_preread_server_name $selected_upstream {
example.org upstream_1;
example.net upstream_2;
example.com upstream_3;
default upstream_4;
}
upstream upstream_1 { server 10.0.0.1:443; }
upstream upstream_2 { server 10.0.0.2:443; }
upstream upstream_3 { server 10.0.0.3:443; }
upstream upstream_4 { server 10.0.0.4:443; }
server {
listen 10.0.0.5:443;
proxy_pass $selected_upstream;
ssl_preread on;
}
}
関連nginxのモジュールがあるstream_core
とstream_ssl_preread
。マニュアル: