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

adi*_*ggo 3 load tcp nginx

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

Dmi*_*sIr 9

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,SSL终止由后端1/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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,客户端连接到我们的nginx而没有SSL,并且此流量使用SSL加密接近后端1/2.