为LNMP一键包增加OpenResty的Lua扩展
OpenResty是什么
OpenResty是一个基于Nginx与Lua的高性能Web平台,内部集成了大量精良的Lua库、第三方模块以及大多数依赖项,可以方便的搭建高性能可伸缩的动态Web应用、Web服务以及动态网关。
注意
OpenResty官方的建议是直接使用OpenResty,不建议自行在Nginx上构建,OpenResty对相关组件做过优化,如果对性能需求较高,建议听官方的直接用,本文是基于LNMP一键包搭建好的环境,自行构建的。
正文
首先要安装的就是Lua引擎,这里有两个选择,一是可以选择LuaJIT,另外一种选择是安装OpenResty优化过的Lua引擎。后者可以在OpenResty的Github项目页面内找到相关信息。
这里我们采用LuaJIT。
本文撰写时,LuaJIT的版本号为2.1.1707061634
,其他版本安装可以存在差异,可以到LuaJIT的官网查阅。
1 2 3 4 5 |
cd ~ git clone https://luajit.org/git/luajit.git cd luajit make make install PREFIX=/usr/local/luajit |
安装完成后会提示。
==== Successfully installed LuaJIT 2.1.1707061634 to /usr/local/luajit ====
随后下载lua-nginx-module
和ngx_devel_kit
。
可以在https://github.com/openresty/lua-nginx-module/tags查询最新的lua-nginx-module版本。
1 2 3 |
cd ~ wget https://github.com/openresty/lua-nginx-module/archive/refs/tags/v0.10.26.tar.gz tar zxvf v0.10.26.tar.gz |
https://github.com/vision5/ngx_devel_kit/tags
1 2 3 |
cd ~ wget https://github.com/vision5/ngx_devel_kit/archive/refs/tags/v0.3.3.tar.gz tar zxvf v0.3.3.tar.gz |
接下来进行环境配置。
1 2 |
export LUAJIT_LIB=/usr/local/luajit/lib export LUAJIT_INC=/usr/local/luajit/include/luajit-2.1/ |
修改lnmp一键包内的lnmp.conf
文件,给Nginx加上编译参数。
1 |
vim lnmp2.0/lnmp.conf |
参数如下:
1 |
Nginx_Modules_Options='--with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib --add-module=/root/lua-nginx-module-0.10.26 --add-module=/root/ngx_devel_kit-0.3.3' |
然后使用lnmp一键包进行nginx升级,升级所选的版本号,可以在https://github.com/openresty/lua-nginx-module/?tab=readme-ov-file#nginx-compatibility查询Nginx的兼容性。
1 2 |
cd lnmp2.0 ./upgrade.sh nginx |
然后等待编译完成。
安装lua-resty-core
和lua-resty-lrucache
。
可在:
https://github.com/openresty/lua-resty-core/tag
https://github.com/openresty/lua-resty-lrucache/tags
查询最新版本。
1 2 3 4 5 6 7 8 |
wget https://github.com/openresty/lua-resty-core/archive/refs/tags/v0.1.28.tar.gz wget https://github.com/openresty/lua-resty-lrucache/archive/refs/tags/v0.13.tar.gz tar -zxvf v0.1.28.tar.gz tar -zxvf v0.13.tar.gz cd lua-resty-core-0.1.28/ make install PREFIX=/usr/local/nginx cd ../lua-resty-lrucache-0.13/ make install PREFIX=/usr/local/nginx |
修改Nginx配置文件。
1 |
vim /usr/local/nginx/conf/nginx.conf |
在http节加入:
1 |
lua_package_path "/usr/local/nginx/lib/lua/?.lua;;"; |
随后重启Nginx服务。
1 |
lnmp nginx restart |
测试一下是否安装成功。
在Nginx配置文件中的server节添加:
1 2 3 4 5 6 |
location /test { default_type 'text/plain'; content_by_lua_block { ngx.say("hi!") } } |
重载nginx配置文件。
1 |
nginx -s reload |
访问一下IP或者域名/test
,如果看见输出“hi!”则安装成功。
安装lua-resty-redis
1 2 3 4 5 6 7 8 |
cd ~ wget https://github.com/openresty/lua-resty-redis/archive/refs/tags/v0.29.tar.gz tar -zxvf v0.29.tar.gz cd lua-resty-redis-0.29 export LUA_LIB_DIR=/usr/local/luajit/lib/ make install cp /usr/local/luajit/lib/resty/redis.lua /usr/local/nginx/lib/lua/resty/ lnmp nginx restart |
测试lua-resty-redis
安装是否成功。
在Nginx配置文件中的server节添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
location /testredis { default_type 'text/plain'; content_by_lua_block { local redis = require "resty.redis" local red = redis:new() red:set_timeouts(1000,1000,1000) local ok,err = red:connect("127.0.0.1", 6379) if not ok then ngx.say("failed to connect:", err) return end ok, err = red:set("dog", "an animal") if not ok then ngx.say("failed to set dog:", err) return end ngx.say("set result:", ok) local res, err = red:get("dog") if not res then ngx.say("failed to get dog: ", err) return end if res == ngx.null then ngx.say("dog not found.") return end ngx.say("dog: ", res) } } |
其中red:connect("127.0.0.1", 6379)
根据具体情况修改连接地址。
访问IP或域名/testredis
,如果输出显示:
1 2 |
set result:OK dog: an animal |
表示安装成功。