nginx做代理時如何修改querystring方法詳解
nginx配置
我們有段nginx配置是這樣的:
set $arg_from "1"; if ($host = "inner.domain") { set $arg_from "0"; } set $args "$args&from=$arg_from";
如果請求來自inner.domain域名,就給querystring添加參數(shù)from=0,表明是內(nèi)網(wǎng)過來的(公網(wǎng)入口不會轉發(fā)host為inner.domain的請求)。這樣upstream只需要檢查from參數(shù)即可判斷請求來源,和域名解綁了。
但是這個配置有個bug,如果用戶請求時添加 from=0
參數(shù),從公網(wǎng)發(fā)請求,querystring變成了 from=0&from=1
,上面的配置是追加參數(shù),而不是修改參數(shù)。那么該如何修復這個bug呢?核心是修改 $args
,很多方法也是圍繞這個展開的,但是都不夠通用。
修改后配置
最后我也沒找到修改 $args
的好辦法,但是問題解決了,最后的配置是這樣的:
if ($arg_from != "") { return 401; } set $arg_from "1"; if ($host = "inner.domain") { set $arg_from "0"; } set $args "$args&from=$arg_from";
既然不能修改 $args
, 那就禁止用戶傳 from
參數(shù),曲線救國達到目的。
使用Header
說到底,依賴 querystring
里的參數(shù)不是個好主意,最好的方法是使用Header,更加通用。不會有兩個同名Header,也不用擔心和請求里可能會有的from參數(shù)沖突。
set $req_source 1; if ($host = "inner.domain") { set $req_source 0; } proxy_set_header X-Req-Source $req_source;
這應該算不上是一種技巧,但是它提醒我,專注于目的,而不是解決問題的手段。
以上就是nginx做代理時如何修改querystring方法詳解的詳細內(nèi)容,更多關于nginx代理修改querystring的資料請關注腳本之家其它相關文章!
相關文章
Nginx中使用Lua腳本與圖片的縮略圖處理的實現(xiàn)
本文主要介紹了Nginx中使用Lua腳本與圖片的縮略圖處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Prometheus監(jiān)控實戰(zhàn)篇Nginx、Hbase操作詳解
這篇文章主要介紹了Prometheus監(jiān)控實戰(zhàn)篇Nginx、Hbase,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02nginx配置proxy_pass中url末尾帶/與不帶/的區(qū)別詳解
這篇文章主要介紹了nginx配置proxy_pass中url末尾帶/與不帶/的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11nginx?添加http_stub_status_module模塊
本文主要介紹了nginx?添加http_stub_status_module模塊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05