Nginx 可以使用 SSL 终止进行 TCP 负载平衡吗?
Can Nginx do TCP load balance with SSL termination?
由于某些原因,我需要设置 Nginx TCP 负载平衡,但需要 SSL 终止。我不确定 Nginx 是否可以做到这一点。由于 TCP 是第 4 层,SSL 是第 5 层,SSL 直通绝对有效。但是有 SSL 终止?
Nginx 可以作为 L3/4 流模块的平衡器:https://www.nginx.com/resources/admin-guide/tcp-load-balancing/
因为 SSL 仍然是 tcp - Nginx 可以在不终止的情况下代理 SSL 流量。
流模块也可以终止 SSL 流量,但它是可选的。
示例 1:没有 SSL 终止的 IMAP over SSL 的 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。
由于某些原因,我需要设置 Nginx TCP 负载平衡,但需要 SSL 终止。我不确定 Nginx 是否可以做到这一点。由于 TCP 是第 4 层,SSL 是第 5 层,SSL 直通绝对有效。但是有 SSL 终止?
Nginx 可以作为 L3/4 流模块的平衡器:https://www.nginx.com/resources/admin-guide/tcp-load-balancing/
因为 SSL 仍然是 tcp - Nginx 可以在不终止的情况下代理 SSL 流量。
流模块也可以终止 SSL 流量,但它是可选的。
示例 1:没有 SSL 终止的 IMAP over SSL 的 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。