在nginx里通过header进行分流

在nginx里通过header进行分流 

应用场景, 如想灰度部分用户到另一个服务器, 则让这些用户带上指定header, 然后在nginx里通过header判断, 进行分流 

实现思路有两种 
1. 
------------------------------ 
if (...) 
rewrite 跳到内部location 
location 里做反向代理 

要点: rewrite不支持post, 正确的说, 在post下, 只支持站内重写url, 站外的话重写url的话, 会丢掉body内容, 所以才要重定向到站到的location, 再做proxy_pass 


在控制台使用有个问题还没解决, 
请求第1次会一直没响应挂住, 第2次会正常返回便带一个warn, 
请求第3次会一直没响应挂住, 第4次会正常返回便带一个warn, 
请求第5次会一直没响应挂住, 第6次会正常返回便带一个warn 


warn信息如下: 
六月 14, 2017 9:45:22 上午 org.apache.http.client.protocol.ResponseProcessCookies processCookies 
WARNING: Cookie rejected: "[version: 0][name: JSESSIONID][value: 9E2CB0E52952B53E554CAB4743D92C01][domain: 192.168.25.217][path: /demo_7/][expiry: null]". Illegal path attribute "/demo_7/". Path of origin: "/demo_8/listheader.jsp" 




2. 
------------------------------ 
if (...) 
proxy_pass 

要点: 在if里做proxy_pass, 只能纯域名, 如http://192.168.25.217:8080; 
不能有任何uri成份, 如http://192.168.25.217:8080/abc; 
原因是 默认location /, 



第一种 
------------------------------ 
完整配置 
注意testuser_8的变化 

Java代码 

 收藏代码

  1. server {  
  2.         listen 8008;  
  3.         charset utf-8;  
  4.         underscores_in_headers on;  
  5.   
  6.         #实现虚拟目录  
  7.         #location /httpdemo/ {  
  8.         location / {  
  9.             alias d:/httpdemo/;  
  10.             index index.html;  
  11.               
  12.             #测试header转发  
  13.             if ($http_yfflag = testuser_7){  
  14.                 rewrite ^(.*)$ /demo7/$1 last;  
  15.             }  
  16.             if ($http_yfflag = testuser_8){  
  17.                 rewrite ^(.*)$ /demo8/$1 last;  
  18.                 #proxy_pass http://192.168.25.217:8080;  
  19.             }  
  20.         }  
  21.   
  22.         location /demo7/ {  
  23.             proxy_pass http://localhost:8070/demo_7/;  
  24.         }  
  25.   
  26.         location /demo8/ {  
  27.             proxy_pass http://localhost:8080/demo_8/;  
  28.         }  
  29. }  



第二种 
------------------------------ 
完整配置 

Java代码 

 收藏代码

  1. server {  
  2.         listen 8008;  
  3.         charset utf-8;  
  4.         underscores_in_headers on;  
  5.   
  6.         #实现虚拟目录  
  7.         #location /httpdemo/ {  
  8.         location / {  
  9.             alias d:/httpdemo/;  
  10.             index index.html;  
  11.               
  12.             #测试header转发  
  13.             if ($http_yfflag = testuser_7){  
  14.                 rewrite ^(.*)$ /demo7/$1 last;  
  15.             }  
  16.             if ($http_yfflag = testuser_8){  
  17.                 #rewrite ^(.*)$ /demo8/$1 last;  
  18.                 proxy_pass http://192.168.25.217:8080;  
  19.             }  
  20.         }  
  21.   
  22.         location /demo7/ {  
  23.             proxy_pass http://localhost:8070/demo_7/;  
  24.         }  
  25.   
  26.         location /demo8/ {  
  27.             proxy_pass http://localhost:8080/demo_8/;  
  28.         }  
  29. }  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值