单IP的nginx tls直通不基于SNI?
我部署了一个nginx反向代理。我几乎没有什么服务单IP的nginx tls直通不基于SNI?,nginx,ssl,kubernetes,tls1.2,nginx-reverse-proxy,Nginx,Ssl,Kubernetes,Tls1.2,Nginx Reverse Proxy,我部署了一个nginx反向代理。我几乎没有什么服务 服务A:https服务,其自己的证书在端口8080上运行 服务B:https服务,其自己的证书在端口8080上运行 我们只有一个通过nginx和IP地址(而不是dns名称)进入应用程序的入口点。 我们想做基于路径的路由。如果请求了/servicea,我们需要将请求转发给服务A,并且证书需要是服务A的证书。服务B也是如此 探索了基于SNI的解决方案,但它基于主机名工作。如何在nginx中实现上述配置 server { listen
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
root /usr/share/nginx/html;
index index.html;
server_name localhost;
ssl_certificate /etc/nginx/ssl/tls.crt;
ssl_certificate_key /etc/nginx/ssl/tls.key;
location / {
try_files $uri $uri/ =404;
}
location /servicea/ {
proxy_pass https://servicea:8080/;
}
}
TL;你想要的是不可能的 TLS passthrough意味着nginx没有终止TLS连接,而只是传递原始数据。通过这种方式,客户端使用最终服务器执行客户端到服务器的TLS,而不是客户端到nginx+nginx到服务器
但是,在TLS通过的情况下,nginx无法看到TLS连接内部的HTTP请求,因为它是客户机到服务器加密的。由于路径仅在此HTTP请求内,nginx无法执行任何基于路径的路由。如果没有dns,是否有其他解决方案?因为只有一个入口。@Tech_Lover:为了做出决定,你需要在连接或请求方面有所不同。如果IP是相同的,域名是相同的,那么实际上没有什么不同,因此无法做出决定。如果我们将servicea证书的副本复制到nginx it self上呢。所有请求都可以在nginx终止。根据路径,我们可以返回特定的证书吗?@Tech_Lover:TLS握手包括已经发送服务器证书。HTTP请求仅在成功的TLS握手后发送,因此路径仅在服务器证书已发送后才知道。不可能再发送另一个证书。不过,现在可以根据bath将此请求路由到正确的服务器。但这对客户端是透明的,即从客户端的角度看不到任何新证书。这也不再是TLS传递,即,它是客户端到nginx和nginx到服务器的加密,而不是客户端到服务器的加密。