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來傳遞