1、前言
有这样的需求,需要请求头里的header来判断我们应该访问线下服务器,还是灰度,或者线上服务器,下面记录一下
2、网关nginx配置
注:
1、$http_ 取请求头的值的用法,需要nginx 版本1.10.x+ 支持
2、underscores_in_headers 默认值为off。默认会把header中参数的 "_" 下划线去掉,所以后台服务器后就获取不到带"_"线的参数名
3、如果请求头是 ufe-version: "gray",$http_ufe_version 也能取到值。(所以,如果你不打开 underscores_in_headers ,那么,只需要前端在请求的时候,把header 写成 ufe-version ,而不是 ufe_version)
upstream online { server 172.20.125.78:1001; } upstream gray { server 172.20.125.76:1001; } server { listen 1001; server_name localhost; root /opt; index index.html; charset utf-8; underscores_in_headers on; location / { if ($http_ufe_version = "gray") { proxy_pass http://gray; # 注意,这里末尾不能加 "/" ,否则会报语法错误,如果想要丢弃匹配字符串,自己去目标服务器做这个处理即可 break; } proxy_pass http://online; } }
那么,在访问目标url的时候,请求头加上 ufe_version = "gray" 或者 ufe-version="gray" 即可访问到灰度服务器