动态proxy_pass
1. 功能说明
动态proxy_pass功能,可以通过动态API接口,更新proxy_pass指令中配置的upstream名。
该功能主要为了满足以下场景:
- location中通过proxy_pass 指令,配置了静态的upstream 名。但在业务需要时,能动态切换upstream 名,而不需要重新重启服务的情况。例如:从测试环境,向正式环境切换时。
- 相比proxy_pass 变量方式,有更好的性能。
2. 依赖模块
动态proxy_pass功能依赖模块:
load_module modules/njt_http_dyn_proxy_pass_module.so;
3.配置说明
Syntax: | proxy_pass URL; |
---|---|
Default: | — |
Context: | http location, if in location, limit_except stream server |
URL = schema + name + args
schema: http,https
name: ip,域名,upstream 名字, 变量,套接字
args: (参数,变量)
示例:
upstream 名(http 或 https) proxy_pass http://backend1$request_uri
使用限制:
- Location 必须事先,配置了proxy_pass 指令。
- upstream 名,要在配置文件,预先定义好(有zone 的server 列表也可以空)。
- 不能修改 schema,只能修改upstream 名,ip, 域名,参数。
- If limit_except指令中配置proxy_pass暂不支持
4. 调用样例
4.1 API说明
查询接口:
GET http://IP+port/api/v1/config/proxy_pass
修改接口:
PUT http://IP+port/api/v1/config/proxy_pass
4.2 查询当前配置的proxy_pass
通过curl进行查询
curl -X GET http://127.0.0.1:5054/api/v1/config/proxy_pass
返回
{
"servers": [
{
"listens": [
"0.0.0.0:5888"
],
"serverNames": [
"localhost"
],
"locations": [
{
"location": "/",
"proxy_pass": "http://backend1"
},
{
"location": "/proxy_pass",
"proxy_pass": "http://backend2"
}
]
},
{
"listens": [
"0.0.0.0:5889"
],
"serverNames": [
""
],
"locations": [
{
"location": "/",
"proxy_pass": ""
}
]
},
{
"listens": [
"0.0.0.0:5890"
],
"serverNames": [
""
],
"locations": [
{
"location": "/",
"proxy_pass": ""
}
]
}
]
}
4.3 动态修改schema值为http的proxy_pass
curl -X PUT http://127.0.0.1:5054/api/v1/config/proxy_pass -d '{
"servers": [
{
"listens": [
"0.0.0.0:5888"
],
"serverNames": [
"localhost"
],
"locations": [
{
"location": "/",
"proxy_pass": "http://backend2"
},
{
"location": "/proxy_pass",
"proxy_pass": "http://backend1"
}
]
}
]
}'
返回
{"code":0,"msg":"success."}
4.5 动态修改schema值为https的proxy_pass
curl -X PUT http://127.0.0.1:5054/api/v1/config/proxy_pass -d '{
"servers": [
{
"listens": [
"0.0.0.0:5888"
],
"serverNames": [
"localhost"
],
"locations": [
{
"location": "/",
"proxy_pass": "https://backend2"
},
{
"location": "/proxy_pass",
"proxy_pass": "https://backend1"
}
]
}
]
}'
返回
{"code":0,"msg":"success."}
4.4 修改proxy_pass从upstream名变更为upstream名+变量
curl -X PUT http://127.0.0.1:5054/api/v1/config/proxy_pass -d '{
"servers": [
{
"listens": [
"0.0.0.0:5888"
],
"serverNames": [
"localhost"
],
"locations": [
{
"location": "/",
"proxy_pass": "https://backend2"
},
{
"location": "/proxy_pass",
"proxy_pass": "https://backend1$request_uri"
}
]
}
]
}'
返回
{"code":0,"msg":"success."}