vlambda博客
学习文章列表

使用lua脚本为你的nginx增加一份色彩

前言

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

然而nginx也提供了使用lua的模块,并且提供了相关的指令用来执行lua代码。使用lua在某些情况可以代替后台的功能实现,直接在nginx中调用lua代码实现后台逻辑,比如登录拦截等功能就可以使用lua实现。

使用lua脚本为你的nginx增加一份色彩


nginx安装部署lua

1、编译安装lua

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gztar xf LuaJIT-2.0.4.tar.gzcd LuaJIT-2.0.4make PREFIX=/usr/local/luajitmake install PREFIX=/usr/local/luajit

首先下载lua源码包,然后用如上命令编译安装即可。

2、下载扩展模块

cd /usr/local/src/wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gztar -xf v0.3.0.tar.gzwget https://github.com/openresty/lua-nginx-module/archive/v0.10.8.tar.gztar xf v0.10.8.tar.gz

使用lua还需要安装以上依赖的模块。

3、在安装模块之前可以先查看之前编译的模块

./nginx -Vnginx version: nginx/1.14.2built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) configure arguments:

在之前已经编译的模块基础再添加lua模块。

4、开始编译安装nginx并且添加需要的模块

//设置环境变量export LUAJIT_LIB=/usr/local/luajit/libexport LUAJIT_INC=/usr/local/luajit/include/luajit-2.0设置完成后记得source profile//下载nginxwget http://nginx.org/download/nginx-1.10.3.tar.gz//编译./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/usr/local/src/ngx_devel_kit-0.3.0 --add-module=/usr/local/src/lua-nginx-module-0.10.8//安装make && make install

注意:如果出如下错误 b = hc->busy[i]代码错误,则有可能是nginx版本过高导致,可降低版本试下。

使用lua脚本为你的nginx增加一份色彩

已经编译的nginx安装lua模块

1、先使用./nginx -V命令查看已经编译的模块,和上面的步骤类似。

2、设置环境变量

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


3、进入之前编译过的源码包目录,执行如下编译命令

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/usr/local/src/ngx_devel_kit-0.3.0 --add-module=/usr/local/src/lua-nginx-module-0.10.8make && make install 即可完成部署。最后使用./nginx -V命令查看是否加入lua模块


4、错误解决方案

error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

//如果报一下错误
则可以使用find / -name "libluajit-5.1.so.2"查找此文件所在目录
最后创建软连接
ln -s /usr/local/luajit/lib/libluajit-5.1.so.2 /lib64/

编写一个简单的lua脚本程序

1、在nginx.conf中加入以下代码

##在配置文件中加入以下代码location /lua { default_type 'text/html'; content_by_lua_file conf/lua/test.lua; #相对于nginx安装目录}
##此处注意,这里最好新建一个location 来测试。

2、开始编写lua脚本

 ##执行一下命令[root@zhaoyd conf]pwd[root@zhaoyd conf]# /usr/local/nginx-1.10.2/conf[root@zhaoyd conf]# mkdir lua && cd lua[root@zhaoyd lua]# vim test.lua##脚本中添加内容ngx.say("hello world");
##启动nginx/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf##使用ip/lua访问输出hello world即可表示无问题。


nginx对lua支持的一些指令

set_by_lua 设置nginx变量 可以实现复杂赋值逻辑
set_by_lua_file 设置nginx变量 可以实现复杂赋值逻辑
access_by_lua 请求访问阶段处理。用于访问控制
access_by_lua_file 请求访问阶段处理。用户访问控制
content_by_lua 内容处理器。处理接受和响应输出
content_by_lua_file 内容处理器。处理接受和响应输出
nginx lua api
ngx.var nginx变量
ngx.req.get_headers 获取请求头
ngx.req.get_uri_args 获取url请求参数
ngx.redirect 重定向
ngx.print 输出响应内容体
ngx.say 和 ngx.print一样,但最后会输出一个换行符
ngnx.header 输出响应头