参考文档:https://www.cnblogs.com/yulibostu/articles/10529989.html
工具版本说明
nginx | luajit | ngx_devel_kit | lua-nginx-module | 备注 |
---|---|---|---|---|
V1.17.5 | V2.0.4 | v0.3.0 | v0.10.9rc7 | 强烈建议,除了nginx版本之外,其他工具版本都使用跟我这个一样的,我是各种组合版本试错的过来人 |
nginx上面一共需要安装3个东西:luajit,ngx_devel_kit,lua-nginx-module
cd /data/soft/nginx
wget -c http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar xzvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make install PREFIX=/usr/local/luajit
#添加环境变量!
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
cd /data/soft/nginx
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar -xzvf v0.3.0.tar.gz
这里是重点啊!!!很多坑都是这个家伙带来的
一定要用v0.10.9rc7
版本,我试了其他几个版本,比如说v0.10.8
、v0.10.15
等,都是不行的,都会遇到下面说的那些坑,只有v0.10.9rc7
不会。
cd /data/soft/nginx
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz
tar -xzvf v0.10.9rc7.tar.gz
cd /data/soft/nginx
wget http://nginx.org/download/nginx-1.17.5.tar.gz
tar -xzvf nginx-1.17.5.tar.gz
我用的就是1.17.5
这个版本的,我还有其他机子用的1.15.3
,最好不要用太低的版本吧。。。
然后接着。
cd /data/soft/nginx/nginx-1.17.5
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-pcre --add-module=/data/soft/nginx/lua-nginx-module-0.10.9rc7 --add-module=/data/soft/nginx/ngx_devel_kit-0.3.0 --with-stream
make
make install
如果是在原有nginx上面加lua模块的话,记得只执行make
就够了哦,不要执行make install
,不然会覆盖原有的东西。
好了好了 ,搞完了。你试试看会不会报错。。反正我是没问题了。。报错报的脑壳痛。。
算了再写一个验证lua模块的代码吧。。
vim /usr/local/nginx/conf/nginx.conf
###在server模块里面,随便找个地方添加下面的代码
location /lua {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
最后验证
curl 127.0.0.1:5580/lua
[alert] 12687#0: detected a LuaJIT version which is not OpenResty's; many optimizations will be disabled and performance will be compromised (see https://github.com/openresty/luajit2 for OpenResty's LuaJIT or, even better, consider using the OpenResty releases from https://openresty.org/en/download.html)
这个倒问题不大,是个warn而已,需要卸载之前的luajit,到他说的网站去下载。
先卸载原有luagit
cd /data/soft/nginx/LuaJIT-2.0.4
make uninstall
然后从https://github.com/openresty/luajit2下载安装
git clone https://github.com/openresty/luajit2
cd luajit2
make && make install
剩下的步骤跟一开始装luajit是一样的。具体的看自己的目录写。
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1
然后重新编译nginx,懒得写了。。。跟前面一样
resty.core
模块找不到明明用起来是没啥问题的,但是他就是启动的时候报错,我都想骂人了。
[error] 12687#0: lua_load_resty_core failed to load the resty.core module from https://github.com/openresty/lua-resty-core; ensure you are using an OpenResty release from https://openresty.org/en/download.html (rc: 2, reason: module 'resty.core' not found:
no field package.preload['resty.core']
no file '/data/soft/soft_package/nginx/sockproc/lua-resty-shell/lib/resty/core.lua'
no file './resty/core.lua'
no file '/usr/local/LuaJIT/share/luajit-2.1.0-beta3/resty/core.lua'
no file '/usr/local/share/lua/5.1/resty/core.lua'
no file '/usr/local/share/lua/5.1/resty/core/init.lua'
no file '/usr/local/LuaJIT/share/lua/5.1/resty/core.lua'
no file '/usr/local/LuaJIT/share/lua/5.1/resty/core/init.lua'
no file './resty/core.so'
no file '/usr/local/lib/lua/5.1/resty/core.so'
no file '/usr/local/LuaJIT/lib/lua/5.1/resty/core.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file './resty.so'
no file '/usr/local/lib/lua/5.1/resty.so'
no file '/usr/local/LuaJIT/lib/lua/5.1/resty.so'
no file '/usr/local/lib/lua/5.1/loadall.so')
这个问题到git上面看了 ,差不多是这个地方吧:https://github.com/openresty/lua-nginx-module/issues/1509
就是在nginx.conf 中的 http{}模块中加入下面这行代码:
lua_load_resty_core off;
之后nginx reload就不会报那个烦人的错了。
error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
这个错误好说,网上说了很多,有两种方法:
方法1:
执行下面的代码(注意前面的路径是你自己安装的luajit路径,正常安装跟我这个路径不一样哦)
ln -s /usr/local/luajit/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
方法2:
执行下面的代码(同样还是注意前面的路径)
echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_lib.conf