由于某种原因,我需要设置nginx tcp负载均衡,但是使用ssl终止。我不确定Nginx能否做到这一点。由于tcp是第4层,ssl是第5层,SSL传递绝对有效。但是SSL终止?谢谢你的建议。
答案 0 :(得分:8)
Nginx可以作为流模块的L3 / 4平衡器:https://www.nginx.com/resources/admin-guide/tcp-load-balancing/
因为SSL仍然是tcp - Nginx可以代理SSL流量而不会终止。
此外,流模块可以终止SSL流量,但它是可选的。
示例1:没有SSL终止的基于SSL的IMAP的TCP隧道
stream {
upstream stream_backend {
server backend1.example.com:993;
server backend2.example.com:993;
}
server {
listen 993;
proxy_pass stream_backend;
}
}
在这种情况下,SSL终止由backend1 / 2处理。
示例2:使用SSL终止的IMAP的TCP隧道。
stream {
upstream stream_backend {
server backend1.example.com:443;
server backend2.example.com:443;
}
server {
listen 993 ssl;
proxy_pass stream_backend;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/certs/server.key;
}
}
在这种情况下,nginx和backend1 / 2之间的流量未加密(使用IMAP 443端口)。
示例3:接收未加密并加密
stream {
upstream stream_backend {
server backend1.example.com:993;
server backend2.example.com:993;
}
server {
listen 443;
proxy_pass stream_backend;
proxy_ssl on;
proxy_ssl_certificate /etc/ssl/certs/backend.crt;
proxy_ssl_certificate_key /etc/ssl/certs/backend.key;
}
}
因此,客户端在没有SSL的情况下连接到我们的nginx,并且使用SSL加密将此流量转发到backend1 / 2。