web-dev-qa-db-ja.com

複数のSSLドメインを持つNginxリバースプロキシ

ソースサーバーに基づいて複数の場所のリバースプロキシとして設定する必要があるが、1つのポートにある場合、Nginxに問題があります。

たとえば、私はこれらのサーバーを持っています:

server1.domain.com

server2.domain.com

server3.domain.com

nginx.domain.comはNginxリバースプロキシサーバーです

そして、私はこのスキームによるアクセスが必要です:

nginx.domain.com/site -> server1.domain.com/site

(https) nginx.domain.com/site2 -> (https) server2.domain.com/site2

(https) nginx.domain.com/site3 -> (https) server3.domain.com/site3

しかし、今では最初に構成されたsite2にしかアクセスできません。注文を変更すると、作業サイト3になります。すべてのサーバーでの場所の構成は問題ありません。

僕の default.conf次の設定があります。

server1

server {
listen 80;
server_name  server1.domain.com;
access_log  off;
error_log off;
# some locations
}

server2

server {
listen 80;
server_name  server2.domain.com;
access_log  off;
error_log off;
# some locations
}

server {
listen 443 ssl;
server_name  server2.domain.com;

include ssl/ssl.conf;
ssl     on;
ssl_certificate      ssl/server2.domain.com.crt;
ssl_certificate_key  ssl/server2.domain.com.key;    
# some locations
}

server

server {
listen 80;
server_name  server3.domain.com;
access_log  off;
error_log off;
# some locations
}

server {
listen 443 ssl;
server_name  server3.domain.com;

ssl     on;
include ssl/ssl.conf;
ssl_certificate      ssl/server3.domain.com.crt;
ssl_certificate_key  ssl/server3.domain.com.key;
# some locations
}

ssl.conf 私が持っています

ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache    shared:SSL:10m;
ssl_session_timeout  10m;

ありがとう

1
zorbon.cz

server[123].domain.com宛てのリクエストをそれぞれリッスンする3台のサーバーをセットアップします。

不明なドメインのリクエストが開始されると、nginxはデフォルトのドメインでそれを提供します。デフォルトでは、サーバーの1つの listen ディレクティブでdefault_serverフラグを使用して別のフラグを明示的に指定しない限り、nginxは最初に定義されたものを使用します。そのため、nginx.domain.comリクエストは常にデフォルト(最初の)サーバーによって処理されます。

さて、あなたが望むのはリバースプロキシです。それはあなたがnginxにやるように頼んだことではありません。フロントエンドリバースプロキシとして別のnginxサーバーを追加する必要があるバックエンドサーバーを定義しただけです。

これを行うには、 ngx_http_proxy_modulengx_http_upstream_module と一緒に使用する必要があります。

具体的には、 location with proxy_pass からバックエンドサーバーにリクエストをプロキシします。

これがあなたのために働くかもしれない単純なリバースプロキシサーバー構成です:

server {
    listen 80;
    listen 443 ssl; # Ensure your certificate is for nginx.domain.com;
    server_name nginx.domain.com;

    location /site1 {
        proxy_pass $scheme://server1.domain.com;
    }

    location /site2 {
        proxy_pass $scheme://server2.domain.com;
    }

    location /site3 {
        proxy_pass $scheme://server3.domain.com;
    }
}

$scheme 変数の使用に注意してください。これは、バックエンドに接続してフロントエンドに接続するために使用されるスキームを再現しています。

バックエンドでのSSL構成についてよくわかりません。それぞれに同じserver_nameを使用し、フロントエンドと同じSSL証明書を使用する必要があると思います。バックエンドでそれぞれ異なるserver_nameを持つ異なる証明書を使用し、プロキシモジュールとの接続proxy -> backendsのSSLパラメータを変更できるかどうかはわかりません。

1
Bernard Rosset