http://www.slideshare.net/cloudflare/presentations
有多种玩法:
1. 使用 HUP reload 或者 binary upgrade 方式动态加载 nginx 配置或重启 nginx。这不会导致中间有请求被 drop 掉。
2. 当 content_by_lua_file 里使用 nginx 变量时,是可以动态加载新的 Lua 脚本的,不过要记得对 nginx
变量的值进行基本的合法性验证,以免被注入攻击。
比如
location ~ '^/lua/(\w+(?:\/\w+)*)$' {
content_by_lua_file $1;
}
3. 自己从外部数据源(包括文件系统)加载 Lua 源码或字节码,然后使用 loadstring() “eval”进 Lua VM.
可以通过 package.loaded 自己来做缓存,毕竟频繁地加载源码和调用 loadstring(),以及频繁地 JIT
编译还是很昂贵的(类似 lua_code_cache off 的情形)。比如在 CloudFlare 我们从 modsecurity
规则编译出来的 Lua 代码就是通过 KyotoTycoon 动态分发到全球网络中的每一个 nginx 服务器的。无需 reload 或者
binary upgrade.
可以根据自己的实际应用场景进行选择。