nginx做代理時(shí)如何修改querystring方法詳解
nginx配置
我們有段nginx配置是這樣的:
set $arg_from "1";
if ($host = "inner.domain") {
set $arg_from "0";
}
set $args "$args&from=$arg_from";如果請(qǐng)求來(lái)自inner.domain域名,就給querystring添加參數(shù)from=0,表明是內(nèi)網(wǎng)過(guò)來(lái)的(公網(wǎng)入口不會(huì)轉(zhuǎn)發(fā)host為inner.domain的請(qǐng)求)。這樣upstream只需要檢查from參數(shù)即可判斷請(qǐng)求來(lái)源,和域名解綁了。
但是這個(gè)配置有個(gè)bug,如果用戶(hù)請(qǐng)求時(shí)添加 from=0 參數(shù),從公網(wǎng)發(fā)請(qǐng)求,querystring變成了 from=0&from=1 ,上面的配置是追加參數(shù),而不是修改參數(shù)。那么該如何修復(fù)這個(gè)bug呢?核心是修改 $args ,很多方法也是圍繞這個(gè)展開(kāi)的,但是都不夠通用。
修改后配置
最后我也沒(méi)找到修改 $args 的好辦法,但是問(wèn)題解決了,最后的配置是這樣的:
if ($arg_from != "") {
return 401;
}
set $arg_from "1";
if ($host = "inner.domain") {
set $arg_from "0";
}
set $args "$args&from=$arg_from";既然不能修改 $args, 那就禁止用戶(hù)傳 from 參數(shù),曲線(xiàn)救國(guó)達(dá)到目的。
使用Header
說(shuō)到底,依賴(lài) querystring 里的參數(shù)不是個(gè)好主意,最好的方法是使用Header,更加通用。不會(huì)有兩個(gè)同名Header,也不用擔(dān)心和請(qǐng)求里可能會(huì)有的from參數(shù)沖突。
set $req_source 1;
if ($host = "inner.domain") {
set $req_source 0;
}
proxy_set_header X-Req-Source $req_source;這應(yīng)該算不上是一種技巧,但是它提醒我,專(zhuān)注于目的,而不是解決問(wèn)題的手段。
以上就是nginx做代理時(shí)如何修改querystring方法詳解的詳細(xì)內(nèi)容,更多關(guān)于nginx代理修改querystring的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- nginx的配置轉(zhuǎn)發(fā)到其他網(wǎng)站詳解
- Nginx如何配置根據(jù)路徑轉(zhuǎn)發(fā)詳解
- Nginx反向代理轉(zhuǎn)發(fā)tomcat的實(shí)現(xiàn)
- 使用Docker安裝Nginx并配置端口轉(zhuǎn)發(fā)問(wèn)題及解決方法
- 使用Nginx實(shí)現(xiàn)端口轉(zhuǎn)發(fā)TCP代理的實(shí)現(xiàn)示例
- Nginx 路由轉(zhuǎn)發(fā)和反向代理location配置實(shí)現(xiàn)
- Nginx轉(zhuǎn)發(fā)需求querystring轉(zhuǎn)寫(xiě)示例解析
相關(guān)文章
Nginx?處理請(qǐng)求并發(fā)控制的過(guò)程分享
Nginx?作為一款高性能的?Web?服務(wù)器和反向代理服務(wù)器,在處理請(qǐng)求的并發(fā)控制方面有著出色的表現(xiàn),這篇文章主要介紹了Nginx?處理請(qǐng)求的并發(fā)控制的過(guò)程,需要的朋友可以參考下2024-07-07
nginx部署前端post請(qǐng)求405?not?allowed問(wèn)題解決
在配置前端項(xiàng)目的時(shí)候遇到了一個(gè)post請(qǐng)求405 not allowed,簡(jiǎn)單記錄一下如何配置,這篇文章主要給大家介紹了關(guān)于nginx部署前端post請(qǐng)求405?not?allowed問(wèn)題解決方法,需要的朋友可以參考下2023-09-09
Nginx反向代理出現(xiàn)靜態(tài)文件404異常處理
本文主要介紹了Nginx反向代理出現(xiàn)靜態(tài)文件404異常處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05
Nginx內(nèi)網(wǎng)環(huán)境開(kāi)啟https雙協(xié)議的實(shí)現(xiàn)
本文主要介紹了Nginx內(nèi)網(wǎng)環(huán)境開(kāi)啟https雙協(xié)議,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Nginx防盜鏈與服務(wù)優(yōu)化配置的全過(guò)程
由于Nginx本身的一些優(yōu)點(diǎn),輕量,開(kāi)源,易用,越來(lái)越多的公司使用nginx作為自己公司的web應(yīng)用服務(wù)器,下面這篇文章主要給大家介紹了關(guān)于Nginx防盜鏈與服務(wù)優(yōu)化配置的相關(guān)資料,需要的朋友可以參考下2022-01-01

