2017-09-11 24 views
1

set_by_lua_*ディレクティブからテーブル/配列を返すにはどうすれば別のset_by_lua_*ディレクティブで後で読み込むことができますか?nginx変数をLuaテーブル/配列に設定するには

私の意図は、複雑な値を一度返してから、返された値の部分を他の変数に入れます。理想的な世界では、これは私が(非稼働例)を書くだろうかです:

location { 
    set_by_lua_file $info '/my/library/do_stuff_with_headers_and_env.lua'; 

    set_by_lua $language 'return $info["language"]'; 
    set_by_lua $best_server 'return $info["server"]'; 
    set_by_lua $last_user 'return $info["user"]'; 

    echo "Best server for $language is $best_server (last used by $last_user)"; 
} 

一つは、単にngx.varを使用して、スクリプト内でこれらの変数を設定することもできますが、私は、ライブラリの一種として、スクリプトファイルを書きたいですユーザーに必要な情報のみを抽出させることができます。

set_by_lua_*は、テーブル/アレイ(set_by_lua $x 'return {"foo", "bar"}';セットnilから$x)をサポートしていないことを考えると、があり、ベストプラクティス、回避策やset_by_lua_*ディレクティブからテーブル/配列を返すために慣用的な方法ですか?

答えて

1

最初の変数を定義し、スクリプトであなたのdo_stuff_with_headers_and_env.luaあなたは

local info = {language ="english"} ngx.var.language = info["language"] 

の下には、変数を定義していますで

location/{ 
    set_by_lua $language ''; 
    set_by_lua $best_server ''; 
    set_by_lua $last_user ''; 

    set_by_lua_file $info '/my/library/do_stuff_with_headers_and_env.lua'; 


    echo "Best server for $language is $best_server (last used by $last_user)"; 
} 

を値を設定し、それを行うには、2つの方法があります。コード化された形式で

location/{ 
    set_by_lua $info ' 
     local cjson=require("cjson") 
     return cjson.encode({language="english"}) 
     '; 

    set_by_lua $language ' 
     local cjson=require("cjson") 
     return cjson.decode(ngx.var.info)["language"]; 
     '; 

    echo "Best server for $language"; 
} 
関連する問題