私は次の構成を持っています:
HAProxy -> NGinx -> バックエンド
(負荷分散にはHAProxy、SSL終端にはNGinxを使用) 設定変更不可
プロキシ プロトコルを使用してソース IP をバックエンドに渡そうとしています。SSLなしで作業すると、すべて正常に動作します。式に SSL を追加すると、SSL ハンドシェークで失敗するか、NGinx にプロキシ プロトコルをバックエンドに渡す方法がわかりません。
構成例 1:
非 ssl 接続ではプロキシ プロトコルが適切に渡されますが、ssl 接続では ssl ハンドシェイクが壊れます。
HAProxy:
listen HTTP-TCP_8090
bind :8090
server nginx nginx:8090 send-proxy
listen HTTPS-TCP_8092
bind :8092
server nginx nginx:8092 send-proxy
NGinx:
stream {
upstream some_backend {
server some_host:8090;
}
server {
listen 8090;
listen 8092 ssl;
proxy_pass some_backend;
proxy_protocol on;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSLTCP:20m;
ssl_session_timeout 4h;
ssl_handshake_timeout 30s;
}
}
サンプル構成 2:
SSL と SSL 以外の両方の接続が正常に機能しますが、どちらの場合もプロキシ プロトコル ヘッダーがバックエンドに渡されません。
HAProxy:
listen HTTP-TCP_8090
bind :8090
server nginx nginx:8090 send-proxy
listen HTTPS-TCP_8092
bind :8092
server nginx nginx:8092 send-proxy
NGinx:
stream {
upstream some_backend {
server some_host:8090;
}
server {
listen 8090 proxy_protocol;
listen 8092 proxy_protocol ssl;
proxy_pass some_backend;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSLTCP:20m;
ssl_session_timeout 4h;
ssl_handshake_timeout 30s;
}
}
SSL接続のプロキシプロトコルを認識し、ヘッダーをバックエンドに渡す構成を作成するにはどうすればよいですか?