web-dev-qa-db-ja.com

それぞれに異なるSSL証明書を使用してポートとホストでプロキシするようにnginxを構成するにはどうすればよいですか?

(更新)次のようなリクエストをプロキシしたい:

https://port123.Host.com:85/any/path ==> http://server85:123/any/path
https://port567.Host.com:85/any/path ==> http://server85:567/any/path
https://port123.Host.com:86/any/path ==> http://server86:123/any/path
https://port567.Host.com:86/any/path ==> http://server86:567/any/path

これを達成することをどのように勧めますか? (私はそれが面白いアーキテクチャであることを知っています)

サーバー宣言はSSLなしで機能しますが、SSLありでは機能しません。

server {
    listen 86 ssl;
    server_name port123;
    ssl_certificate CERT123;
    ssl_...;
    localtion / { proxy_pass.... }
}

server {
    listen 86 ssl;
    server_name port567;
    ssl_certificate CERT567;
    ssl...;
    localtion / { proxy_pass.... }
}

これはnginx(シングルポートとシングルIPでのマルチSSLS)の既知の制限だと思います。しかし、簡単な回避策があるのではないかと思います。私が持っているすべてのサーバーは実際にはワイルドカード証明書を持つワイルドカードであるため、SANを使用することはできません。

1
Amir Mehler

Nginxがリッスンするポートごとにサーバーブロックを作成できます。サーバーブロック内で、ホスト:ポートの組み合わせにリダイレクトできます。これを試してください...それはあなたが尋ねたことをするはずです:

server {
  listen       85;
  listen       [::]:85;
  server_name  port123.Host.com;

  location / {
    proxy_pass         http://server85:123/;
    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;
  }
}

server {
  listen       86;
  listen       [::]:86;
  server_name  port567.Host.com

  location / {
    proxy_pass         http://server86:567/;
    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;
  }
}
2