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

相关内容