プロキシとして動作している nginx で条件付きアクションをいくつか実行する必要があります。基本的には、外部ソースからいくつかの nginx 変数を設定できることが目的です。これは、bash スクリプトや URL によって生成された結果などです。
例えば:
set $var = [result of http request]
または
set $var = [result of bash command]
これに対する信頼できる解決策はありますか? モジュールですか? nginx でこれを実行するのが適切でない場合、代替手段は何ですか?
答え1
解決策はlua モジュール必要な処理を実行するために簡単な lua スクリプトを実行します。簡単な例:
location / {
# Get device type from lua script.
# Note: do not use content_by_lua as it's executed in separate context.
set_by_lua_file $device_type 'device-detect.lua';
# Do what needs to be done...
}
lua スクリプトによって返されるものはすべて$device_type
変数内に格納されます。
覚えておくべき重要なことは、ほとんどの Linux ディストリビューションでは、lua モジュールは標準の nginx-core の代わりにインストールする必要がある nginx-extras パッケージの一部であるということです。
答え2
Nginxには多くの組み込み変数があります[1] 次のようなものを使用できます:
#Default to EN
set $vislang "EN";
#Discriminate language
if ($http_accept_language ~* "^fr") {
set $vislang "FR";
}
bash ベースのソリューションとしては「sed -i nginx_conf_file && service nginx reload」が考えられますが、あまりきれいではないと思います。
[1]http://nginx.org/en/docs/http/ngx_http_core_module.html#変数