nginx的参数转发

通过header参数来转发不同域名

最近有遇到,需要通过判断前端输入的参数不同,来转发这次请求到不同底层服务上去,这里通过设置一个header参数来判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
underscores_in_headers on;
location /api/gateway {
if ($request_method = OPTIONS ) {
return 204;
}
set $xhost $host;
if ($http_gwenv = 'rd') {
set $xhost "xxx1.domain.com";
proxy_pass http://xxx1.domain.com;
}
if ($http_gwenv = 'mid') {
set $xhost "xxx2.domain.com";
proxy_pass http://xxx2.domain.com;
}
proxy_set_header Host $xhost
  1. underscores_in_headers on nginx是支持读取非nginx标准的用户自定义header的,但是需要在http或者server下开启header的下划线支持
  2. proxy_set_header不能直接作用于if语句块中,这里通过设置一个变量,然后在外面来解决
  3. nginx的语法中,也没有if…else…的语法,直接使用单个if语句块即可
  4. 获取自定义的header参数,在server中应该是$server_xxx,在http中使用$http_xxx来获取参数,并且都是小写