【原创实践】安装与配置 lua-cjson 在宝塔 Nginx 上

安装与配置 lua-cjson 在宝塔 Nginx 上

1️⃣ 安装 LuaJIT 开发环境

在 Ubuntu 20.04 上安装 LuaJIT 及开发头文件:

bash 复制代码
sudo apt update
sudo apt install luajit libluajit-5.1-dev

确认安装成功:

bash 复制代码
luajit -v

输出类似:

nginx 复制代码
LuaJIT 2.1.0-beta3

确认头文件路径:

bash 复制代码
find /usr -name lua.h

通常会看到:

bash 复制代码
/usr/include/luajit-2.1/lua.h
/usr/local/include/luajit-2.1/lua.h

2️⃣ 下载 lua-cjson 并编译

bash 复制代码
cd /usr/local/src
git clone https://github.com/openresty/lua-cjson.git
cd lua-cjson

使用正确的 LuaJIT include 路径编译:

bash 复制代码
make clean
make LUAJIT=1 LUA_INCLUDE_DIR=/usr/include/luajit-2.1

如果出现路径问题,可以强制指定 CFLAGS:

bash 复制代码
make clean
make LUAJIT=1 LUA_INCLUDE_DIR=/usr/include/luajit-2.1 \
  CFLAGS="-O3 -Wall -fpic -I/usr/include/luajit-2.1"

编译成功后,会生成:

复制代码
cjson.so

3️⃣ 拷贝到 Nginx Lua 模块路径

宝塔 Nginx Lua 模块路径通常为:

swift 复制代码
/www/server/nginx/lib/lua/

将编译好的 cjson.so 拷贝到:

bash 复制代码
cp cjson.so /www/server/nginx/lib/lua/
cp cjson.so /www/server/nginx/lib/lua/5.1/  # 如果存在 5.1 目录

4️⃣ 配置 Nginx lua_package_path 与 lua_package_cpath

编辑 /www/server/nginx/conf/nginx.conf,在 http {} 内加入:

nginx 复制代码
lua_package_path "/www/server/nginx/lib/lua/?.lua;;";
lua_package_cpath "/www/server/nginx/lib/lua/?.so;;";

可以使用命令自动添加:

bash 复制代码
sudo sed -i '/lua_package_path/a\    lua_package_cpath "/www/server/nginx/lib/lua/?.so;;";' /www/server/nginx/conf/nginx.conf

5️⃣ 重启 Nginx

bash 复制代码
sudo nginx -t
sudo systemctl restart nginx

或者通过宝塔面板重载 Nginx。


6️⃣ 测试 lua-cjson 是否可用

在 nginx.conf 临时加入测试 location

nginx 复制代码
location /test_cjson {
    default_type text/plain;
    content_by_lua_block {
        local ok, cjson = pcall(require, "cjson")
        if ok then
            ngx.say("cjson OK")
        else
            ngx.say("cjson NOT FOUND: ", cjson)
        end
    }
}

访问测试:

bash 复制代码
curl http://127.0.0.1/test_cjson

输出:

nginx 复制代码
cjson OK

✅ 表示安装和配置成功。


7️⃣ 总结

  • 安装 LuaJIT 及开发头文件

  • 下载 lua-cjson 并指定正确 include 路径编译

  • 拷贝 cjson.so 到 Nginx Lua 模块目录

  • 配置 lua_package_pathlua_package_cpath

  • 重启 Nginx 并测试

这样 Nginx Lua 就可以正常 require("cjson"),你的 Lua 脚本访问鉴权接口就不会再报 500。

相关推荐
2401_878820477 小时前
Redis+Lua脚本实现全局令牌桶限流
数据库·redis·lua
未若君雅裁14 小时前
微服务限流实战:Nginx 漏桶与网关令牌桶
java·nginx·微服务
bug-1008615 小时前
为什么history模式默认会请求后端资源?
前端·vue.js·nginx
源远流长jerry16 小时前
LVS 与 Nginx 负载均衡:从原理到生产实战
运维·网络·网络协议·tcp/ip·nginx·负载均衡·lvs
r-t-H17 小时前
KVM虚拟化与Docker基础实践-第三章
linux·运维·nginx·docker·容器
難釋懷1 天前
Nginx虚拟主机
git·nginx·github
前端 贾公子1 天前
基于 Nginx 实现一个灰度上线系统
运维·nginx
鱼听禅2 天前
CentOS使用Nginx配置代理Gitea后网址设置正确,确保URL不匹配的问题记录
nginx·centos·gitea
Jinkxs2 天前
LoadBalancer- 简单限流策略:Nginx 基于连接 / 请求的限流实现
java·运维·nginx
imuliuliang2 天前
Laravel5.x核心特性全解析
android·运维·数据库·nginx