nginx可以通过SSL终止进行TCP负载平衡

时间:2016-09-09 22:38:26

标签: nginx tcp load

由于某种原因,我需要设置nginx tcp负载均衡,但是使用ssl终止。我不确定Nginx能否做到这一点。由于tcp是第4层,ssl是第5层,SSL传递绝对有效。但是SSL终止?谢谢你的建议。

1 个答案:

答案 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。