Press "Enter" to skip to content

宝塔面板安装防火墙后Nginx报错的解决办法

meizuol 0

给甲骨文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)

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注