共计 1976 个字符,预计需要花费 5 分钟才能阅读完成。
给甲骨文 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_modulez
找到 /www/server/panel/install/nginx.sh
如果安装完成后 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