Centos

具有多個 ssl 域的 Nginx 反向代理

  • November 6, 2014

當我需要將 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一起使用。

具體來說,您將來自locationwith的請求代理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與代理模組連接。

引用自:https://serverfault.com/questions/642140