Caddy & GRPC 端口复用配置

2022-09-28 14:37:24 浏览数 (1)

前言

最近自己摸一个小玩具,开始尝试 GRPC 和 Gateway,于是顺道体验了一下端口复用。

正文

本专案的具体细节:

层级

软件 / 包

1

Caddy

2

cmux

3

GPRC & Getaway

后端先启动 GPRC 服务,随后 Gateway 连接 GRPC 提供 json 格式的接口,由程序内 cmux 包将流入的流量根据类型进行分流,分别传给 GRPC 和 Gateway,最后由 Caddy 根据连接类型进行反向代理。

cmux包

cmux的关键部分:(具体使用请参照官方文档)

代码语言:javascript复制
tcpMux := cmux.New(foo)
grpcL := tcpMux.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc"))
httpL := tcpMux.Match(cmux.HTTP1Fast())

Caddy配置:

代码语言:javascript复制
foo.bar.cn {
    @grpc {
        header Content-Type *grpc* # 你也可以使用其他方式匹配 GRPC 的请求
    }
    reverse_proxy @grpc h2c://127.0.0.1:8888 # 遇到 GPRC 请求使用专门的反代方式
    reverse_proxy 127.0.0.1:8888
}

同理你也可以参照上面的配置方式配置负载均衡等操作,因为我的专案中 cmux 使多种流量聚合在了同一个端口上,所以我需要这么配置。

rpc

0 人点赞