Ngx lua
跳转到导航
跳转到搜索
基础知识
luajit 环境,luajit 类似于 java 的 jit,即即时编译,lua 是一种解释语言,通过 luajit 可以即时编译 lua 代码到机器代码,得到很好的性能;
1.下载安装LuaJIT
wget -c http://luajit.org/download/LuaJIT-2.0.5.tar.gz tar xvf LuaJIT-2.0.5.tar.gz && cd LuaJIT-2.0.5 make -j3 && make install
实在不行直接下载 luajit-2.0.4-3.el6.x86_64.rpm https://www.rpmfind.net/linux/RPM/epel/6/x86_64/luajit-2.0.4-3.el6.x86_64.html
2. 下载准备nginx lua模块
wget -c https://github.com/openresty/lua-nginx-module/archive/v0.10.8.tar.gz tar xvf v0.10.8.tar.gz lua-nginx-module-0.10.8 https://github.com/openresty/lua-nginx-module/tags
3.ngx_devel_kit
wget -c https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz ngx_devel_kit-0.3.0
4. nginx build
#//先导入环境变量,告诉nginx去哪里找luajit
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
./configure --prefix=/usr/local/nginx-1.4.2 --with-ld-opt="-Wl,-rpath,/usr/local/lib" --add-module=../lua-nginx-module-0.8.6 --add-module=../ngx_devel_kit-0.3.0
./configure --prefix=/usr/local/nginx-1.4.2 --with-ld-opt="/path/to/luajit-or-lua/lib" --add-module=../lua-nginx-module-0.8.6 --add-module=../ngx_devel_kit-0.3.0
# make -j2
# make install
--add-module=/root/rpmbuild/SOURCES/lua-nginx-module-0.10.8/ --add-module=/root/rpmbuild/SOURCES/ngx_devel_kit-0.3.0
/root/rpmbuild/SOURCES/ngx_devel_kit-0.3.0
./configure: error: invalid option "--without-mail_pop4_module"
--with-ld-opt=parameters —设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:--with-ld-opt="-L /usr/local/lib".
# or tell where to find Lua if using Lua instead:
#export LUA_LIB=/path/to/lua/lib
#export LUA_INC=/path/to/lua/include
# Here we assume Nginx is to be installed under /opt/nginx/.
./configure --prefix=/opt/nginx \
--with-ld-opt="-Wl,-rpath,/path/to/luajit-or-lua/lib" \
--add-module=/path/to/ngx_devel_kit \
--add-module=/path/to/lua-nginx-module
# Note that you may also want to add `./configure` options which are used in your
# current nginx build.
# You can get usually those options using command nginx -V
# you can change the parallism number 2 below to fit the number of spare CPU cores in your
# machine.
make -j2
make install
5. nginx lua配置
nginx配置文件加入如下配置:
location ~* ^/2328(/.*) {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, ttlsa lua")';
}
5. 启动测试
5.1 启动nginx
# curl http://test.ttlsa.com/2328/
hello, ttlsa lua //使用curl测试
trouble shooting
+ /usr/bin/install -m 644 -p /root/rpmbuild/SOURCES/logrotate /root/rpmbuild/BUILDROOT/ops_nginx-1.8.1-2.x86_64/etc/logrotate.d/nginx
+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id /root/rpmbuild/BUILD/nginx-1.8.1
extracting debug info from /root/rpmbuild/BUILDROOT/ops_nginx-1.8.1-2.x86_64/data/apps/nginx/sbin/nginx
/usr/lib/rpm/debugedit: canonicalization unexpectedly shrank by one character
error: Bad exit status from /var/tmp/rpm-tmp.osP0DB (%install)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.osP0DB (%install)
--add-module=/root/rpmbuild/SOURCES/ngx_devel_kit-0.3.0/ ==>
--add-module=/root/rpmbuild/SOURCES/ngx_devel_kit-0.3.0
关于下面这个问题 直接 下载 luajit-2.0.4-3.el6.x86_64.rpm
https://www.rpmfind.net/linux/RPM/epel/6/x86_64/luajit-2.0.4-3.el6.x86_64.html
[root@centos evan]# rpm -ivh ops_nginx-1.8.1-2.x86_64.rpm
error: Failed dependencies:
libluajit-5.1.so.2()(64bit) is needed by ops_nginx-1.8.1-2.x86_64
ln -s /usr/local/lib/libluajit-5.1.so.2.0.5 /lib64/libluajit-5.1.so.2
这个问题很多人发现后采用了将libluajit-5.1.so.2链接到系统库的做法,比如http://cywhoyi.iteye.com/blog/2118913,以及https://www.ttlsa.com/nginx/nginx-modules-ngx_lua,采用的
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/
ln -s /usr/local/lib/libluajit-5.1.so.2 /usr/local/lib64/
ln -s /usr/local/lib/libluajit-5.1.so.2 /usr/lib64/lua/5.1/
ln -s /usr/local/lib/libluajit-5.1.so.2 /usr/lib/
[root@rpmbuild ~]# file /lib/libluajit-5.1.so.2
/lib/libluajit-5.1.so.2: broken symbolic link to `/usr/local/luajit/lib/libluajit-5.1.so.2'
[root@rpmbuild ~]# file /usr/local/luajit/lib/libluajit-5.1.so.2
/usr/local/luajit/lib/libluajit-5.1.so.2: cannot open `/usr/local/luajit/lib/libluajit-5.1.so.2' (No such file or directory)
是因为系统默认会到/usr/lib或/usr/lib64找libluajit-5.1.so.2,因为不存在,所以找不到。 可以将文件拷贝至/usr/lib和/usr/lib64中,如下: cp libluajit-5.1.so.2.0.1 /usr/lib/libluajit-5.1.so
cp libluajit-5.1.so.2.0.1 /usr/lib/libluajit-5.1.so.2
cp libluajit-5.1.so.2.0.1 /usr/lib64/libluajit-5.1.so.2
cp libluajit-5.1.so.2.0.1 /usr/lib64/libluajit-5.1.so
再次尝试命令:/home/tengine/sbin/nginx -v 结果: Tengine version: Tengine/1.4.3 (nginx/1.2.5) 安装成功