一,nginx的扩展模块 nginx_lua_module 安装记录
nginx_lua_module是由淘宝的工程师清无(王晓哲)和春来(章亦春)所开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力
http://wiki.nginx.org/HttpLuaModule
正文:
1 下载luajit 2.0并安装
http://luajit.org/download.html
我是直接使用源码make && make install
所以lib和include是直接放在/usr/local/lib和usr/local/include
2 下载nginx源码,解压
注意版本号,如果机子上已经装了nginx,不想升级的话,请使用/to/nginx/sbin/nginx –v
来查看版本号
3 下载ngx_devel_kit HERE 解压
4 下载nginx_lua_module HERE 解压
5 进入nginx源码文件夹
cd nginx-1.12.1/
6 导入环境变量,编译
export LUAJIT_LIB=/usr/local/lib #这个很有可能不一样
export LUAJIT_INC=/usr/local/include/luajit-2.0 #这个很有可能不一样
查看nginx编译安装时安装了哪些模块
/usr/local/nginx -V
--sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.20 --with-zlib=/usr/local/src/zlib-1.2.3 --with-openssl=/usr/local/src/openssl-1.0.2l
现在在以前的编译参数后面加入需要添加的扩展模块--add-module=/usr/local/related/ngx_devel_kit-0.3.0/ --add-module=/usr/local/related/lua-nginx-module-0.10.10/
--sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.20 --with-zlib=/usr/local/src/zlib-1.2.3 --with-openssl=/usr/local/src/openssl-1.0.2l --add-module=/usr/local/related/ngx_devel_kit-0.3.0/ --add-module=/usr/local/related/lua-nginx-module-0.10.10/
make 即可,千万不要make install 不然就被完全覆盖了
7,make 完毕后会在nginx的编译目录下生成一个objs文件夹,将里面的nginx覆盖至nginx安装目录下的nginx即可。
# cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak # cp ./objs/nginx /usr/local/nginx/sbin/ 复制时会提示busy无法覆盖,那么先停掉nginx ,/usr/local/nginx -s stop 覆盖完毕后开启时如果报错:是没有找到共享链接库的原因
- /nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
- # cat /etc/ld.so.conf
- include ld.so.conf.d/*.conf
- # echo "/usr/local/lib" >> /etc/ld.so.conf
- # ldconfig
8, 测试是否成功:
nginxconfig中加入
location /hello {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
使用/to/nginx/sbin/nginx –t 检查nginx配置,此时应该没有报错
8 /to/nginx/sbin/nginx #启动nginx
或者/to/nginx/sbin/nginx –s reload #重启nginx
访问192.168.100.1/hello
会出现“hello,lua”
安装成功!
这是已安装nginx时安装模块的步骤,如果是全新安装nginx 则不需要覆盖那步即可完成。
二,安装lua完毕后即可在nginx的配置文件中使用lua来强化nginx的配置,以下为使用都的伪静态规则,因为默认是无法使用运算符的,所以引入lua
if ($args ~* "aid=(\d+)") {
set $aid $1;
set_by_lua $id "return math.floor(ngx.var.aid/1000)";
set_by_lua $str "return ngx.var.id..'_'..ngx.var.aid";
rewrite ^(.*)/modules/article/reader\.php$ $1/txt/$str/? permanent;
}
if ($args ~* "aid=(\d+)&cid=(\d+)") {
set $aid $1;
set_by_lua $id "return math.floor(ngx.var.aid/1000)";
set_by_lua $str "return ngx.var.id..'_'..ngx.var.aid";
rewrite ^(.*)/modules/article/reader\.php$ $1/txt/$str/? permanent;
}
这样就行了。