location表达式类型
- location = 表示精确匹配
- location ^~ 表示uri以指定字符或字符串开头
- location ~ 表示区分大小写的正则匹配
- location ~* 表示不区分大小写的正则匹配
- location / 通用匹配,任何请求都会匹配到
匹配的优先级顺序
( localtion = ) > ( localtion 完整url ) > ( localtion ^~ ) > ( localtion ,* ) > ( lcoaltion部分起始路径 ) > ( / )
需求
nginx反向代理某服务有两个负载,要求 某个 或者 某系列 请求 打向指定负载
- 定义upstream
#7080 7091 2负载服务
upstream gateway-all {
server 127.0.0.1:7080;
server 127.0.0.1:7081;
}
#7080服务
upstream gateway-7080 {
server 127.0.0.1:7080;
}
#7081服务
upstream gateway-7081 {
server 127.0.0.1:7081;
}
要求 /api/v1/login
请求 7080机器,/api/v1/logout
请求 7081机器,其他请求走负载,/test-gateway
是反向代理服务的上下文
- 实现一:定义不同的localtion,路由不同的uri
location /test-gateway/api/v1/login {
#指向上面的upstream
proxy_pass http://gateway-7080;
}
location /test-gateway/api/v1/logout {
#指向上面的upstream
proxy_pass http://gateway-7081;
}
location /test-gateway {
#指向上面的upstream
proxy_pass http://gateway-all;
}
- 实现二:一个localtion,路由不同的uri
location /test-gateway {
if ($request_uri ~* "/api/v1/login"){
proxy_pass http://gateway-7080;
}
if ($request_uri ~* "/api/v1/logout"){
proxy_pass http://gateway-7081;
}
proxy_pass http://gateway-all;
}
location 灵活多变,具体哪种适合自己,根据自己的业务场景来做选择