Мне нужно сделать некоторые условные действия в 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