Asjdf

一只在杭电摸鱼的小火鸡

Caddy & GRPC 端口复用配置

2022-09-12 大约319字 预计阅读1分钟

# 前言

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

# 正文

本专案的具体细节:

层级 软件 / 包
1 Caddy
2 cmux
3 GPRC & Getaway

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

cmux包

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

tcpMux := cmux.New(foo)
grpcL := tcpMux.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc"))
httpL := tcpMux.Match(cmux.HTTP1Fast())

Caddy配置:

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 使多种流量聚合在了同一个端口上,所以我需要这么配置。


8小时劳动,8小时休闲,8个小时休息,下班!

闽ICP备2022001901号-1 公安网备图标闽公网安备35030302354429号

主题 atom-hugo-theme