67

Nginx コミュニティ バージョンの TCP 負荷分散のリリースに伴い、OpenVPN と SSL パススルー データを混在させたいと考えています。Nginx がトラフィックをルーティングする方法を知る唯一の方法は、ドメイン名を使用することです。

 vpn1.app.com ─┬─► nginx at 10.0.0.1 ─┬─► vpn1  at 10.0.0.3
 vpn2.app.com ─┤                      ├─► vpn2  at 10.0.0.4
https.app.com ─┘                      └─► https at 10.0.0.5

TCP のガイドモジュールのドキュメントを確認しましたが、十分に参照されていないようです。誰かが私を正しい方向に向けることができれば、私は感謝しています。

ServerFault に関する関連質問: Can a Reverse Proxy use SNI with SSL pass through?

4

3 に答える 3

89

これは、Nginx 1.11.5 で追加されたngx_stream_ssl_preread モジュールと 1.11.2 で追加されたngx_stream_map モジュールの追加により可能になりました。

これにより、Nginx は TLS Client Hello を読み取り、使用するバックエンドを SNI 拡張に基づいて決定できます。

stream {

    map $ssl_preread_server_name $name {
        vpn1.app.com vpn1_backend;
        vpn2.app.com vpn2_backend;
        https.app.com https_backend;
        default https_default_backend;
    }

    upstream vpn1_backend {
        server 10.0.0.3:443;
    }

    upstream vpn2_backend {
        server 10.0.0.4:443;
    }

    upstream https_backend {
        server 10.0.0.5:443;
    }

    upstream https_default_backend {
        server 127.0.0.1:443;
    }

    server {
        listen 10.0.0.1:443;
        proxy_pass $name;
        ssl_preread on;
    }
}
于 2016-10-19T15:03:21.220 に答える