Loading... ## 前言 目前`ARM架构`机型在[宝塔](https://www.musz.cn/tag/%e5%ae%9d%e5%a1%94 "View all posts in 宝塔")面板安装`Nginx`[防火墙](https://www.musz.cn/tag/%e9%98%b2%e7%81%ab%e5%a2%99 "View all posts in 防火墙")和网站监控报表,会出现冲突,不能正常使用; 出现的错误代码包括但不限于以下两种: `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`; 另外在宝塔面板首次安装`Nginx`时务必使用编译安装,极速安装可能会出现错误; * 测试时间:**2021-11-06** * 测试环境:**Ubuntu 20.04** * 宝塔版本:**7.7.0** * 插件版本:**Nginx防火墙 8.9.2 / 网站监控报表 6.2** * 温馨提醒:**其它系统及版本未进行测试,请自行验证,请勿在生产环境下尝试;** ## 创建脚本 在`/www/server/panel/install`目录下分别新建名为`<a target="_blank" href="https://www.musz.cn/tag/nginx" title="View all posts in nginx">nginx</a>_prepare.sh`和`nginx_configure.pl`两个文件; 并在两个文件中分别填写如下代码: **nginx_prepare.sh** ```bash #!/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* ``` **nginx_configure.pl** ```bash --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module ``` 然后将这两个文件设置权限为`600`,并将所有者设置为`root`; ## 编译安装 在`SSH终端`输入以下代码(清理脚本换行符,避免编译安装失败): ```bash sed -i 's/\r//g' /www/server/panel/install/nginx_prepare.sh ``` 在`SSH终端`输入以下代码开始更新`Nginx`并按脚本加载`LuaJIT`选项: ```bash cd /www/server/panel/install && bash install_soft.sh 0 update nginx 1.18 ``` 代码中的`Nginx`版本号需要改为你机器已经安装的`Nginx`版本`1.18.1`即为`1.18`; 然后等待更新完成即可; ## 安装插件 **注意:需要首先安装`网站监控报表`等待安装完成后再安装`Nginx防火墙`;** 原因是`Nginx防火墙`需要使用`lua-cjson`但在`ARM`下更新`Nginx`时直接编译`lua-cjson`会失败,具体原因没有深究; 而安装`网站监控报表`时会默认使用`luarocks`来安装`lua-cjson`这就直接解决了此问题; 当然你也可以先安装`luarocks`在使用`luarocks install lua-cjson`命令来安装`lua-cjson`; 由于博主两个插件都要使用,所以就没单独测试了,需要的可以自行测试; 最后修改:2023 年 03 月 09 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏