我需要在作为代理工作的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