给甲骨文ARM DD了一个ubuntu 20.04系统,并手动升级到了22.04版本,但是遇到了一个奇怪的问题,安装完Nginx后安装防火墙,导致Nginx无法启动,报错内容:
nginx: [emerg] unknown directive "lua_shared_dict" in /www/server/panel/vhos
官方给出的解释:
报错原因是:系统缺少luajit组件,导致nginx使用异常; 解决方法:卸载nginx防火墙/nginx免费防火墙,网站加速(这些插件没装的话可忽略此步骤)卸载当前版本的nginx,使用编译模式安装一遍nginx1.20,编译安装会自动安装luajit组件; 装好nginx后重装前面卸载的那几个插件即可正常使用。
问题的症结所在
这个问题的具体原因是缺少两个nginx模块:ngx_devel_kit和lua_nginx_module,我们只要把这两个模块编译到nginx里面就可以解决。不过你最好用命令:nginx -V
来检查一下你的nginx扩展。大鸟用这个命令来检查发现确实是少了这两个模块。
在官网和别的大佬的博客有看到解决办法,依照教程操作,但是到我这儿报错了,编译安装的时候提示“ngx_devel_kit,lua_nginx_module”目录不存在。
我的解决办法是:
./configure --user=www --group=www --prefix=${Setup_Path} ${ENABLE_LUA}
后面添加:
--add-module=${Setup_Path}/src/ngx_devel_kit --add-module=${Setup_Path}/src/lua_nginx_module
原大佬添加的内容目录在新版本的宝塔Nginx脚本上目录有错误。
./configure --user=www --group=www --prefix=${Setup_Path} ${ENABLE_LUA} --add-module=${Setup_Path}/src/ngx_devel_kit --add-module=${Setup_Path}/src/lua_nginx_module
至此,问题顺利解决。
如果安装完成后Nginx依然报错,内容:
PANIC: unprotected error in call to Lua API (bad light userdata pointer)
在终端执行一下命令:
cat>/www/server/panel/install/nginx_prepare.sh<<EOL
#!/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
EOL
sed -i 's/\r//g' /www/server/panel/install/nginx_prepare.sh
cat>/www/server/panel/install/nginx_configure.pl<<EOL
--add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module
EOL
如果运行时候有报错,执行:
sed -i 's/\r//g' /www/server/panel/install/nginx_prepare.sh
然后更新安装你的Nginx:
cd /www/server/panel/install && bash install_soft.sh 0 update nginx 1.20
所涉及的文章列表:
让宝塔面板的 Nginx 在 ARM 下也能支持 LuaJIT – Xeath
让宝塔面板的 Nginx 在 ARM 下也能支持 LuaJIT – Linux面板 – 宝塔面板论坛 (bt.cn)
解决 Ubuntu 20.04 的 Nginx 在 ARM 下提示 PANIC 问题。 – Linux面板 – 宝塔面板论坛 (bt.cn)