> Linux服务器 > nginx >

nginx通过自定义header属性来转发不同的服务

背景:
因为后台代码变动较大,代码上线后不能支持原有的ios APP软件。然而App Store审核的时间又较长,等新代码上线后,App Store不能下载最新的ios包,导致客户不能正常访问(原有的ios包又不能继续支持)。
 
解决办法:
ios开发人员自定义请求头(这里自定义为newapp)
 
通过配置nginx 匹配请求头newapp 来转发到预发布环境(预发布为最新代码),审核通过后将nginx配置去掉即可。
核心:客户端自定义的http header,在nginx的配置文件里能直接读取到。
条件:header必须用减号“-”分隔单词,nginx里面会转换为对应的下划线“_”连接的小写单词。
 
修改nginx配置:
server {  
        listen 8008;  
        charset utf-8;  
        underscores_in_headers on;  
location / {  
alias d:/httpdemo/;  
index index.html;  
#测试header转发  
if ($http_newapp = "130****8074") {  
proxy_pass http://yfb_xx; 
}  
    }  
    } 
 

 
参数配置说明:
underscores_in_headers on:nginx是支持读取非nginx标准的用户自定义header的,但是需要在http或者server下开启header的下划线支持:
比如我们自定义header为newapp,获取该header时需要这样:$http_newapp(一律采用小写,而且前面多了个http_)
如果需要把自定义header传递到下一个nginx:
1.如果是在nginx中自定义采用proxy_set_header X_CUSTOM_HEADER $http_host;
2.如果是在用户请求时自定义的header,例如curl –head -H “X_CUSTOM_HEADER: foo” http://domain.com/api/test,则需要通过proxy_pass_header X_CUSTOM_HEADER来传递
 


(责任编辑:IT)