目前ARM架构机型在安装宝塔面板时,宝塔面板的 nginx 编译脚本会直接忽略 ARM 对 LuaJIT 的支持,这导致了许多依赖 lua 语言的插件失效,例如 Nginx 防火墙、网站监控报表,表现就是 nginx 无法启动,出现的错误代码包括但不限于以下两种:unknown directive "lua_shared_dict"
PANIC: unprotected error in call to Lua API (bad light userdata pointer)
其主要原因是因为宝塔面板在安装Nginx时,判断机器架构为ARM就会直接忽略编译和加载LuaJIT选项;
解决方法就是重新为Nginx编译加载LuaJIT选项,而ARM架构需要LuaJIT版本在2.1以上才能编译成功;
本方法在甲骨文ARM架构下测试,其它服务商的ARM架构应该同样适用,Nginx版本测试过1.18、1.20、1.21、1.22。
另外在宝塔面板首次安装Nginx时务必使用编译安装,极速安装可能会出现错误;
之所以还用宝塔7.7.0版是因为新版暂时无法手动破解,关于新版宝塔面板降级为7.7.0版的教程《宝塔面板降级 7.7.0 版本、开心、汉化 aaPanel 面板》
- 测试环境:Ubuntu 20.04
- 宝塔版本:7.7.0
- 插件版本:Nginx防火墙 8.9.6 / 网站监控报表(旧版)
- 温馨提醒:其它系统及版本未进行测试,请自行验证,请勿在生产环境下尝试;
创建脚本
在/www/server/panel/install
目录下分别新建名为nginx_prepare.sh
和nginx_configure.pl
两个文件;
并在两个文件中分别填写如下代码:
nginx_prepare.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
wget -c -O LuaJIT-2.1.zip https://github.com/LuaJIT/LuaJIT/archive/refs/heads/v2.1.zip -T 10
unzip LuaJIT-2.1.zip
if [ -e LuaJIT-2.1 ]; then
cd LuaJIT-2.1
make linux
make install
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1/
ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/local/lib64/libluajit-5.1.so.2
if [ `grep -c /usr/local/lib /etc/ld.so.conf` -eq 0 ]; then
echo "/usr/local/lib" >> /etc/ld.so.conf
fi
ldconfig
cd ..
fi
rm -rf LuaJIT-2.1*
Install_cjson
nginx_configure.pl
--add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module
然后将这两个文件设置权限为600
,并将所有者设置为root
;
在SSH终端输入以下代码:
安装lua5(这一步可以忽略)
apt install lua5* -y
编译安装Nginx
sed -i 's/\r//g' /www/server/panel/install/nginx_prepare.sh
在SSH终端输入以下代码开始更新Nginx并按脚本加载LuaJIT选项:代码中的Nginx版本号需要改为你机器已经安装的Nginx版本,1.18.1即为1.18;1.22.1即为1.22
然后等待更新完成即可;
cd /www/server/panel/install && bash install_soft.sh 0 update nginx 1.22
安装插件
注意:需要首先安装 网站监控报表 ,等待安装完成后再安装 Nginx防火墙;
原因是 Nginx防火墙 需要使用 lua-cjson,但在ARM下更新Nginx时直接编译lua-cjson会失败而安装 网站监控报表 时会默认使用luarocks来安装lua-cjson这就直接解决了此问题;
当然你也可以先安装luarocks在使用luarocks install lua-cjson命令来安装lua-cjson;
以上内容经网络搜索结果后自行整理,部分代码有改动,如介意请自行搜索使用原方法,主要参考https://suntl.com/1104.html
宝塔面板解锁付费插件 — Nginx防火墙、网站监控报表 等
方法一:
打开目录/www/server/panel/class
找到并编辑panelplugin.py
文件
使用Ctrl+F
搜索并找到softList['list'] = tmpList
这段代码,在其下方添加如下代码:
softList['pro'] = 1
for soft in softList['list']:
soft['endtime'] = 0
示例:
方法二:
找到并编辑/www/server/panel/data/plugin.json
文件
// 解锁付费插件
搜索字符串"endtime": -1全部替换为"endtime": 999999999999
// 解锁授权图标
搜索字符串"ltd": -1, "pro": -1全部替换为"ltd": -1, "pro": 0
其中pro表示专业版,ltd表示企业版;-1表示无授权,0表示永久授权;
找到并编辑/www/server/panel/data/repair.json
文件
查找字符串"id": 16将这段修复权限的代码全部删除;
方法三:
找到并编辑/www/server/panel/class/panelPlugin.py
文件
使用Ctrl+F
搜索并找到softList['list'] = tmpList
这段代码,在其下方添加如下代码:
// 解锁专业版
softList['pro'] = 1
for soft in softList['list']:
soft['endtime'] = 0
// 解锁企业版
softList['ltd'] = 99999999999
for soft in softList['list']:
soft['endtime'] = 0
说明
修改完成后重启面板,重启完成后就可以直接安装收费的插件了,Nginx防火墙
也可以直接安装使用
安装后界面可能不会显示宝塔专业版或者企业版图标,但实际上你已经获得特权,可以直接安装收费插件。
文章评论