具有多個 ssl 域的 Nginx 反向代理
當我需要將 Nginx 配置為基於源伺服器但在一個埠上的多個位置的反向代理時,我遇到了 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
但現在我只能訪問配置中的第一個站點 2。當我更改訂單時,站點 3 正在工作。所有伺服器中的位置配置都可以。
我的
default.conf
我有以下配置。伺服器1
server { listen 80; server_name server1.domain.com; access_log off; error_log off; # some locations }
伺服器2
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 }
伺服器3
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;
謝謝
您設置了 3 個伺服器,分別監聽發往 的請求
server[123].domain.com
。當對未知域的請求啟動時,nginx 會使用預設域為其提供服務。預設情況下,nginx 使用第一個定義的,除非您在其中一個伺服器的指令
default_server
上明確指定另一個帶有標誌的。listen
這就是為什麼您的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 證書,並在前端使用相同的 SSL 證書。我不知道您是否可以在後端使用不同的證書,每個證書都有不同的server_name
並更改 SSL 參數以proxy -> backends
與代理模組連接。