原因
最近想用宝塔的nginx去载入lua实现灰度发布、降级限流的功能,虽然用openresy都是可以的,但是到了宝塔上面各种报错,换个web中间件显然不可能,所以要解决下!
具体步骤
1、因为宝塔的nginx编译的时候可以默认有加载lua吧,所以我安装玩luajit后,发现可以在nginx上嵌入lua脚本了,但是打印
if jit then
ngx.say('luajit:' .. jit.version)
else
ngx.say('lua:'_VERSION)
end
很明显,我打印出来的是下面这个,说明目前nginx没有支持luajit,所以导致我使用限流插件lua-resty-limit-traffic的时候报错,ffi.lua找不到!
2、所以现在的思路不是重新编译,而是替换nginx原来指向的lua,换成luajit。具体操作如下!
#保留一下原来的两个文件
sudo mv /usr/lib64/liblua-5.1.so /usr/lib64/liblua-5.1.so.old
sudo mv /usr/lib64/liblua.so /usr/lib64/liblua.so.old
#然后将新的luajit文件替换原来的
sudo cp /usr/local/luajit/lib/libluajit-5.1.so.2 /usr/lib64/liblua-5.1.so
sudo ln -s /usr/lib64/liblua-5.1.so /usr/lib64/liblua.so
3、然后重启服务器搞定!
4、参考文章nginx+lua环境报错lua: module ffi not found:的完美解决方法-04007技术笔记