Динамические переменные из внешнего источника в конфигурации прокси-сервера 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-extras, который необходимо установить вместо стандартного nginx-core.

решение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#variables

Связанный контент