给 Tengine 加上 lua 拓展

Tengine 能动态加载第三方模块,成为我们青睐的选择,我们可以编译动态链接文档,而不需要重新安装 Nginx, 这对在线增强 webservice 很有帮助.
感谢 agentzh, lua-nginx-module, 可以让我们使用 lua 增强nginx的功能, 不言而喻,我们必须现有 Lua 的环境,才能运行 ngx_lua;

[](https://zheng-ji.github.io/#%E7%BC%96%E8%AF%91-nginx-lua “编译

nginx_lua”)编译 nginx_lua

官方推荐使用LuaJit,虽然也可以使用Lua,但是即时编译(Just-In-Time Compiler)混合了动态编译和静态编译,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。

  • 下载安装

    1
    2
    3
    4
    5

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz  
tar zxvf LuaJIT-2.0.4.tar.gz  
cd LuaJIT-2.0.4  
make  
make install  

—|—

  • 设置环境变量

    1
    2

export LUAJIT_LIB=/usr/local/lib  
export LUAJIT_INC=/usr/local/include/luajit-2.0  

—|—

  • 然后编译ngx-lua-module.so

    1

/usr/local/share/dso_tool/ --path=/Path/To/Lua-Nginx-module  

—|—

  • 设置动态库

    1
    2

> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf  
> ldconfig  

—|—

[](https://zheng-

ji.github.io/#%E5%9C%A8-Tengine-%E4%B8%AD%E5%90%AF%E7%94%A8 “在 Tengine 中启用”)在 Tengine 中启用

nginx.conf 中先加载动态库

1  
2  
3  
dso {  
    load ngx_load_module;  
}  

—|—

在 nginx.conf 中添加

1  
lua_code_cache on/off;  

—|—

来开启是否将代码缓存,所以每次变更 “*.lua” 文档时,必须重启 nginx 才可生效.

[](https://zheng-ji.github.io/#%E4%BD%BF%E7%94%A8-ngx-lua-waf “使用

ngx_lua_waf”)使用 ngx_lua_waf

有了基础环境,我们要开始发挥 ngx lua 的优点了, 我用他安装了 waf (web application firework)
ngx_lua_waf,这是一个通过 ngx_lua 编写的 web 应用防火墙, 在使用过程中也发现了 ngx_lua_waf 一个bug,给他提了一个Pull Request, 码农生涯第一个 PR.

注:
静态编译的进程在执行前全部被翻译为机器码,而动态直译执行的则是一句一句边运行边翻译。

糖果

糖果
LUA教程

Lapis框架的常用处理方法

Lapis框架的常用处理方法 Continue reading

MoonScript实现选择排序

Published on February 26, 2017

MoonScript与Redis客户端

Published on January 19, 2017