Kong 做域名转发的核心是以 API Gateway 的方式实现 反向代理域名路由:客户端请求某个域名时,Kong 通过请求的 Host 头(HTTPS 场景下还结合 SNI)匹配到对应的 Route,再把流量转发到该 Route 所关联的 Service 对应的 上游服务。这里的“域名转发”并不是 DNS 的 NS 或 CNAME 转发,而是 Kong 在流量入口执行的主机名虚拟主机路由。

在 Kong 中,域名转发需要配置两个最核心的实体:Service 和 Route。Service 描述后端真实服务地址,例如协议、Host、Port、Path;Route 描述匹配规则,例如 hosts、paths、methods、snis。当 Route 配置 hosts=example.com 时,Kong Router 只会匹配 Host 头为 example.com 的请求,并转发给关联 Service 的上游地址。
用 Kong Admin API 创建一个后端 Service,例如将 example.com 转发到内网地址 http://10.0.0.2:8080,可以执行:
curl -i -X POST http://localhost:8001/services --data name=example-svc --data url=http://10.0.0.2:8080
接着为该 Service 创建 Route,指定域名 host 和路径规则:
curl -i -X POST http://localhost:8001/services/example-svc/routes --data name=example-route --data hosts=example.com --data paths=/
执行后,Kong 会监听所有进入的 HTTP 请求,凡是 Host 头为 example.com 的请求,都会被转发到 10.0.0.2:8080。由于设置了 paths=/,等同于匹配该域名下的所有路径。如果不想限制路径,也可以不设置 paths 参数,Kong 会默认匹配任意路径。
如果是 HTTPS 域名转发,需要先为 Kong 配置 SSL 证书,然后再把域名与 SNI 关联。证书可以通过 Admin API 上传:
curl -i -X POST http://localhost:8001/certificates -F "cert=@cert.pem" -F "key=@key.pem" --data "snis=example.com"
完成证书配置后,客户端访问 https://example.com:8443 时,Kong 会根据 SNI 找到匹配的证书完成 TLS 终止;TLS 解密之后,Kong 再根据请求 Host 头中的域名匹配 Route,实现转发。
Kong 的域名匹配支持 精确域名匹配与 通配符匹配。例如 hosts=example.com 只匹配 example.com;hosts=*.example.com 可以匹配 www.example.com、api.example.com 等子域名,但不会匹配裸域名 example.com 本身。Kong 还支持右侧通配符,例如 example.*,用于匹配 example.com、example.org 等不同顶级域。
如果同一个域名需要转发到多个后端节点,可以在 Kong 中创建 Upstream,把多个 Target 注册到 Upstream,再让 Service 指向该 Upstream。Kong 会自动对上游节点进行 负载均衡,支持 round-robin、一致性哈希等算法,并且可以配合 health checks 实现节点故障摘除。
在转发过程中,Kong 默认不会保留原始的 Host 头,而是会把上游服务的 Host 地址发送给后端。如果后端业务需要根据原始域名判断请求来源,则需要在创建 Service 或 Route 时开启 preserve_host=true,这样 Kong 就会把客户端请求中的原始 Host 头原样转发给上游服务。
实际部署时,还需要完成 DNS 解析:需要把转发域名 example.com 的 A 记录指向 Kong 网关所在的公网 IP。Kong 默认的 HTTP 代理端口是 8000,HTTPS 代理端口是 8443。生产环境通常会把 80 和 443 映射到 Kong 的 8000 和 8443,或者使用负载均衡器统一接入流量。
如果是在 Kubernetes 中使用 Kong Ingress Controller,域名转发可以通过 Ingress 资源的 host 字段实现,例如 host: example.com,并将流量转发到对应的 Kubernetes Service。Kong Ingress Controller 会自动生成 Kong 路由规则,实现与原生 Kong 相同的域名路由能力。
需要特别区分:如果你说的“域名转发”是指把一个域名通过 301/302 方式“跳转”到另一个域名,那属于重定向场景,不是 Kong 反向代理。Kong 原生更擅长的是“转发到上游服务”的反向代理;若要实现 301/302 跳转,可以在后端应用层返回 Location 跳转头,或使用 Kong 的 response-transformer、request-termination 等插件组合实现,也可以优先使用 DNS 的 CNAME 或 Web 服务器 redirect 功能。
总结来说,Kong 做域名转发的正确模式是:DNS 把域名指向 Kong → Kong 按 Host/SNI 匹配 Route → Route 绑定 Service → Service 指向 Upstream/后端服务。这样就能实现稳定、灵活、可扩展的域名级流量转发。

查看详情

查看详情