nginx プロキシ設定における外部ソースからの動的変数

nginx プロキシ設定における外部ソースからの動的変数

プロキシとして動作している 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#変数

関連情報