带有多个ssl域的Nginx反向代理

当我需要将它configuration为基于源服务器的多个位置的反向代理时,我在Nginx中遇到问题,但在一个端口上。

例如,我有这些服务器:

server1.domain.com server2.domain.com server3.domain.com 

nginx.domain.com是Nginx反向代理服务器

我需要通过这个scheme访问:

 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 

但是现在我只能访问configuration中第一个的site2。 当我改变命令,然后是工作site3。 所有服务器的位置configuration都可以。

我的default.conf我有以下configuration。

服务器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 } 

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; 

谢谢

您设置了3个服务器,分别侦听发往server[123].domain.com请求。

当一个未知域的请求开始运行时,nginx会使用默认域进行服务。 默认情况下,nginx使用第一个定义的,除非你在其中一个服务器的listen指令中明确地指定了另一个default_server标志。 这就是为什么您的nginx.domain.com请求将始终由默认(第一个)服务器提供服务。

现在,你想要的是一个反向代理。 这不是你问nginx做什么。 您只需定义您需要添加另一个nginx服务器作为前端反向代理的后端服务器。

为此,您需要使用ngx_http_proxy_module以及ngx_http_upstream_module 。

具体而言,您可以使用proxy_pass将代理请求代理到后端服务器。

这是一个简单的反向代理服务器configuration,可能适合你:

 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; } } 

请注意使用$schemevariables,重现用于连接到与后端连接的前端的scheme。

我不确定后端的SSLconfiguration。 我猜你需要在每个server_name上使用相同的server_name ,并在前端使用相同的SSL证书。 我不知道是否可以在后端使用不同的证书,每个证书都有不同的server_name并更改代理模块的连接proxy -> backends SSL参数。