nginx代理configuration中来自外部源的dynamicvariables

我需要在作为代理工作的nginx中执行一些条件操作。 基本上都归结为能够从外部源设置一些nginxvariables。 它可以是一个bash脚本或由url或类似的东西产生的结果。

例如:

set $var = [result of http request] 

要么

 set $var = [result of bash command] 

有没有可靠的解决scheme呢? 模块? 如果用nginx不是这个好主意,有什么select?

解决scheme是使用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_typevariables中。

重要的是要记住,在大多数Linux发行版中,lua模块是必须安装的nginx-extras软件包的一部分,而不是标准的nginx-core。

Nginx有很多内置variables[1]你可以使用这样的东西:

 #Default to EN set $vislang "EN"; #Discriminate language if ($http_accept_language ~* "^fr") { set $vislang "FR"; } 

基于bash的解决scheme可能是“sed -i nginx_conf_file && service nginx reload”,但我认为它不是很干净。

[1] http://nginx.org/en/docs/http/ngx_http_core_module.html#variables