ソースサーバーに基づいて複数の場所のリバースプロキシとして設定する必要があるが、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;
ありがとう
server[123].domain.com
宛てのリクエストをそれぞれリッスンする3台のサーバーをセットアップします。
不明なドメインのリクエストが開始されると、nginxはデフォルトのドメインでそれを提供します。デフォルトでは、サーバーの1つの listen
ディレクティブでdefault_server
フラグを使用して別のフラグを明示的に指定しない限り、nginxは最初に定義されたものを使用します。そのため、nginx.domain.com
リクエストは常にデフォルト(最初の)サーバーによって処理されます。
さて、あなたが望むのはリバースプロキシです。それはあなたがnginxにやるように頼んだことではありません。フロントエンドリバースプロキシとして別のnginxサーバーを追加する必要があるバックエンドサーバーを定義しただけです。
これを行うには、 ngx_http_proxy_module を ngx_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パラメータを変更できるかどうかはわかりません。