今天在使用lua修改nginx自定義變量的時候,發現死活更改不了,如下所示:
有問題的代碼
set $check "1";
rewrite_by_lua_file 'conf/rundeck.lua';
if ($check = "1"){
echo "1 check $check";
content_by_lua 'ngx.say("check is 1")';
}
if ($check = "2"){
echo "2 check $check";
content_by_lua 'ngx.say("check is 2")';
}
上面的邏輯很簡單,就是說我設置一個useruri的變量為1,然后修改check這個變量值的邏輯在rundeck.lua這個lua腳本處理,奇怪的問題在此出現, if 判斷條件里面 check永遠為1,所以永遠都走第一個if判斷,經過查詢相關資料發現,if 將會在 rewrite_by_lua_file 之前執行,所以就會產生這樣的問題,資料可以參考:http://timd.cn/ngx-lua-rewrite/
於是我稍作修改,運行邏輯就好了,如下所示:
無問題的代碼
set $check ""; #主要修改這里,把設置的變量為空
rewrite_by_lua_file 'conf/rundeck.lua';
if ($check = "1"){
echo "1 check $check";
content_by_lua 'ngx.say("check is 1")';
}
if ($check = "2"){
echo "2 check $check";
content_by_lua 'ngx.say("check is 2")';
}
只要把set $check 改為 "" 即可,check這個變量的值就會被lua給改動了。