路由转发(也称为请求转发或反向代理)是一个核心功能,它允许将客户端的请求转发到后端服务器。Nginx 广泛用于处理高并发的请求,并能够有效地分配流量和管理负载。以下是关于 Nginx 路由转发的一些基本理论和概念。
反向代理
通常作为反向代理服务器工作,接收来自客户端的请求,然后将这些请求转发到一个或多个后端服务器。反向代理的主要优点包括:
- 负载均衡:可以将请求分发到不同的后端服务器,以平衡负载。
- 安全性:隐藏后端服务器的真实 IP 地址,提高安全性。
- 缓存:可以缓存响应结果,从而提高性能并减轻后端的压力。
- SSL 终止:可以在 Nginx 中处理 SSL/TLS 加密,减少后端服务器的负担
定义上游
{
"nodes": [
{
"host": "resources.xxx.cn",
"port": 80,
"weight": 1
}
],
"timeout": {
"connect": 6,
"send": 6,
"read": 6
},
"type": "roundrobin",
"scheme": "http",
"pass_host": "node",
"name": "ad",
"keepalive_pool": {
"idle_timeout": 60,
"requests": 1000,
"size": 320
}
}
pass_host为
node
表示使用目标节点列表中的主机名或IP
,如果pass_host为pass
,表示与保持与客户端一致的主机名
pass_host
在 Apache APISIX 中,pass_host
是一个配置选项,用于控制如何处理请求的 Host
头部。这个选项在添加上游服务时非常重要,因为它会影响到请求转发到上游服务时的 Host
头部的值。pass_host
有两个可选值:node
和 pass
。它们之间的区别及使用场景如下:
1. pass_host: node
-
含义:当设置为
node
时,APISIX 会将请求的Host
头部设置为上游节点的主机名或 IP 地址。这意味着上游服务接收到的请求将包含其自身的地址作为Host
。 - 使用场景:
- 当后端服务需要知道实际请求是来自哪个客户端,并且希望根据不同的主机名进行处理时,可以使用
pass_host: node
。 - 适用于后端服务需要基于
Host
头部进行路由或处理的场景。例如,当使用多个域名指向同一后端服务,后端可能会根据Host
头部来决定返回的内容或执行的逻辑。
2. pass_host: pass
-
含义:当设置为
pass
时,APISIX 会将原始请求的Host
头部直接传递给上游服务。这意味着上游服务将看到客户端请求的Host
值,而不是上游节点的地址。 - 使用场景:
- 当你希望上游服务能够识别并处理原始请求的
Host
时,可以使用pass_host: pass
。这对于某些应用程序来说非常重要,例如需要根据不同的域名返回不同内容的微服务架构。 - 适用于需要保持请求上下文的场景,比如 API 网关将请求转发至多个后端服务,这些服务需要根据请求的
Host
来做进一步处理。
总结
-
pass_host: node
:将Host
设置为上游节点的地址,适合需要基于上游节点进行处理的场景,本例使用的是node
。 -
pass_host: pass
:保留原始请求的Host
,适合需要根据客户端请求的Host
进行处理的场景。
定义路由规则
- 下面规则是通用的,表示以/adc开头的URL,被替换为/green/red开头的URL
- 注意:一个转发规则,添加一个路由,如果多种转发策略,需要为一个服务(上游)添加多个路由,
regex_uri
最多只有两个元素,第1个是路径策略正则,第2个是转发模板
{
"uri": "/adc/index.html",
"name": "ad",
"methods": [
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"HEAD",
"OPTIONS",
"CONNECT",
"TRACE",
"PURGE"
],
"plugins": {
"proxy-rewrite": {
"uri": "/green/red/index.html" # 如果是正则转发,可以配置regex_uri数组
}
},
"upstream_id": "544230536902607619",
"status": 1
}
添加apisix中添加路由转发
这种方法会反向关联到mse的路由列表中
- 在apisix的路由配置中,添加指定域名的转发策略,转发前缀与上面的
/adc
保持一致
- 当你在apisix的网络-路由中添加了对接的域名转发策略之后,在mse网关上,通过
路由
模块,也可以看到之前添加的转发策略
在MSE中添加路由转发
- 为你的目标服务在mse中添加服务,如apisix-gateway这个服务
- 在mse中添加路由,指定真实域名,转发策略,上游服务等,发布路由后可正常工作
作者:仓储大叔,张占岭,
荣誉:微软MVP