V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
牛客网
imherer
V2EX  ›  程序员

关于 HTTPS 负载均衡问题

  •  
  •   imherer · 34 天前 · 1171 次点击
    这是一个创建于 34 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前做 HTTPS 都是在负载均衡这一层做的

    最近看 golang 发现 gin 框架有 HTTPS 的支持,官方代码如下:

    package main
    
    import (
    	"log"
    
    	"github.com/gin-gonic/autotls"
    	"github.com/gin-gonic/gin"
    )
    
    func main() {
    	r := gin.Default()
    
    	// Ping handler
    	r.GET("/ping", func(c *gin.Context) {
    		c.String(200, "pong")
    	})
    
    	log.Fatal(autotls.Run(r, "example1.com", "example2.com"))
    }
    

    那么问题来了,如果应用本身起来就是一个 HTTPS,像上面这样,那我负载均衡那一层应该怎么做?

    9 条回复    2020-09-27 11:45:31 +08:00
    Judoon
        1
    Judoon   34 天前
    没什么差别啊,
    负载均衡向 upstream server 转发的协议从 http 换成 https 而已
    顺带如果 upstream server 的证书是自签的就加上不验证证书的选项
    chendy
        2
    chendy   34 天前
    那么问题来了,已经有一层反代做 https 了,应用为啥还需要 https
    darrh00
        3
    darrh00   34 天前
    如果第一层到 upstream 的链路是不安全的,就应该用 https
    imherer
        4
    imherer   34 天前
    @chendy 可能是我没表述清楚。
    我的意思是应用层已经是 HTTPS 了,而且看它这个 demo 是直接绑定了域名了
    负载均衡怎么做呢? 因为域名已经绑在应用这一层了
    imherer
        5
    imherer   34 天前
    @Judoon
    @darrh00
    谢谢 我再研究研究
    suconghou
        6
    suconghou   34 天前
    这样负载均衡可以用 nginx sni proxy 来做,但一般的做法都是流量到达集群后解密,而不是交给应用层解密;在集群解密抓包 debug,路径分流,服务拆分都更方便些
    goodryb
        7
    goodryb   34 天前
    @imherer #4 负载均衡可以做 4 层 tcp 的啊, 只是纯流量转发,https 应用侧来处理就好了
    xuanbg
        8
    xuanbg   34 天前
    负载均衡不是一般都用 Nginx 的 upstream 吗?
    Judoon
        9
    Judoon   32 天前
    @imherer #4
    "我的意思是应用层已经是 HTTPS 了,而且看它这个 demo 是直接绑定了域名了
    负载均衡怎么做呢? 因为域名已经绑在应用这一层了"

    我粗看了 go-ginic 的 autotls,好像用的是 acme 来自动申请证书。他这个 demo 传域名是为了申请证书,而如果你在应用启动前又没有证书,那前面的负载均衡就做不了 7 层的,会陷入先有鸡先有蛋的问题。你可以做 4 层的负载均衡。

    如果你已经有了证书,域名的 ip 是指向到前置的负载均衡的,负载均衡再向后端转发时就必须配置 ip 端口,外加 sni 域名
    #6 说的 nginx sni proxy 大概就是如下


    proxy_pass https://1.2.3.4;
    proxy_read_timeout 60;
    proxy_ssl_name $host;
    proxy_ssl_server_name on;
    proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    proxy_ssl_session_reuse off;
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2921 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:07 · PVG 22:07 · LAX 07:07 · JFK 10:07
    ♥ Do have faith in what you're doing.