apisix四层路由
所属:网络层,转发的是 TCP 或 UDP 连接本身,不解析应用层协议内容。
可用于 MySQL、Redis、MQTT、DNS 等非 HTTP 协议服务。
不关心 HTTP 方法、路径、Header,只看 IP、端口、SNI 等。
可以使用TLS / SNI 路由
TLS / SNI 路由是指:在传输层(L4)使用 TLS 握手时的 SNI 字段(Server Name Indication) 来进行多租户或域名级别的流量分发,而不需要解密 TLS 内容。该机制常用于 加密 TCP 流量的透明转发。
{ "id": "mysql-a", "server_port": 9443, "sni": "mysql.a.com", // 👈 匹配握手中的 SNI "upstream": { "type": "roundrobin", "nodes": { "10.0.0.1:3306": 1 } } }
config.yaml模板:
config.yaml
四层路由配置:TCP/UDP 代理监听器
stream_proxy:
tcp:
# 非 TLS(纯 TCP)监听端口
- addr: 9100 # APISIX 将在该端口接收 TCP 请求
# - addr: 9200 # 如需监听多个端口,可继续添加
# 启用 TLS(可用于基于 SNI 的 TCP 路由)
- addr: 9443
tls: true # 启用 TLS,可结合路由中的 `sni` 字段使用
udp:
- addr: 5300 # 可选:监听 UDP 协议,如 DNS 转发等
注册模板:
{
"id": "mysql-tcp-proxy", // 可自定义的唯一 ID
"server_port": 9100, // APISIX 监听端口,client 连这个端口
"protocol": "tcp", // 协议:"tcp" 或 "udp"
"sni": "mysql.example.com", // 可选,TLS SNI 匹配(需启用 tls)
"remote_addr": "192.168.1.100", // 可选,来源 IP 限制(也支持 CIDR)
"upstream": {
"type": "roundrobin",
"nodes": {
"192.168.10.100:3306": 1 // 后端服务地址和端口
}
}
}
请求地址:
POST http://{APISIX_ADMIN_API}:9180/apisix/admin/stream_routes

浙公网安备 33010602011771号