当我需要将它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; } }
请注意使用$scheme
variables,重现用于连接到与后端连接的前端的scheme。
我不确定后端的SSLconfiguration。 我猜你需要在每个server_name
上使用相同的server_name
,并在前端使用相同的SSL证书。 我不知道是否可以在后端使用不同的证书,每个证书都有不同的server_name
并更改代理模块的连接proxy -> backends
SSL参数。