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添加參數from=0,表明是內網過來的(公網入口不會轉發(fā)host為inner.domain的請求)。這樣upstream只需要檢查from參數即可判斷請求來源,和域名解綁了。
但是這個配置有個bug,如果用戶請求時添加 from=0 參數,從公網發(fā)請求,querystring變成了 from=0&from=1 ,上面的配置是追加參數,而不是修改參數。那么該如何修復這個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 參數,曲線救國達到目的。
使用Header
說到底,依賴 querystring 里的參數不是個好主意,最好的方法是使用Header,更加通用。不會有兩個同名Header,也不用擔心和請求里可能會有的from參數沖突。
set $req_source 1;
if ($host = "inner.domain") {
set $req_source 0;
}
proxy_set_header X-Req-Source $req_source;這應該算不上是一種技巧,但是它提醒我,專注于目的,而不是解決問題的手段。
以上就是nginx做代理時如何修改querystring方法詳解的詳細內容,更多關于nginx代理修改querystring的資料請關注腳本之家其它相關文章!
相關文章
nginx部署前端post請求405?not?allowed問題解決
在配置前端項目的時候遇到了一個post請求405 not allowed,簡單記錄一下如何配置,這篇文章主要給大家介紹了關于nginx部署前端post請求405?not?allowed問題解決方法,需要的朋友可以參考下2023-09-09
Nginx內網環(huán)境開啟https雙協(xié)議的實現
本文主要介紹了Nginx內網環(huán)境開啟https雙協(xié)議,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-02-02

