副标题
openresty 一个支持lua的nginx
介绍
OpenResty 是一个强大的 Web 应用服务器,是一个基于NGINX的可伸缩的WEB平台。
- OpenResty借助于Nginx的事件驱动模型和非堵塞IO,以实现高性能的Web应用程序。
- OpenResty使我们可以借助于Nginx的异步非阻塞达到使用Lua异步并发访问后端DB等服务。
安装
新手教程
安装完毕后,点击这里查看新手教程。
教程中提到:
假设您已经将OpenResty安装到/usr/local/openresty(这是默认设置),我们让我们的OpenRestynginx安装的可执行文件在我们的环境中可用。
::: highlight yellow 💡
注意 这种设置方式临时有效。更多的环境变量配置方法可以查看 配置环境变量
:::
PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH
配置环境变量
这时nginx命令不在环境变量中,需要启动nginx比较麻烦。下面设置环境变量的几种方法:
修改方法一:
export PATH=/usr/bin:$PATH
//配置完后可以通过echo $PATH查看配置结果。
生效方法:立即生效
有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置
用户局限:仅对当前用户
修改方法二:
通过修改.bashrc文件:
vim ~/.bashrc
//在最后一行添上:
export PATH=/usr/bin:$PATH
生效方法:(有以下两种)
1、关闭当前终端窗口,重新打开一个新终端窗口就能生效
2、输入“source ~/.bashrc”命令,立即生效
有效期限:永久有效
用户局限:仅对当前用户
修改方法三:
通过修改profile文件:
vim /etc/profile
/export PATH //找到设置PATH的行,添加
export PATH=/usr/bin:$PATH
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户
修改方法四:
通过修改environment文件:
vim /etc/environment
在PATH=“***”(自己系统的环境变量)中加入“:/usr/bin”
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户
配置
配置环境变量后,就可以在终端中输入nginx
来启动nginx。这时没有使用nginx -c path/nginx.con
则采用默认的配置。可以使用find 命令找到nginx.conf。进行修改。
加入include ./sites/*.conf;
vim /usr/local/openresty/nginx/conf/./nginx.conf
...
http {
...
include ./sites/*.conf;
...
...
使用
启动 、停止、重新加载配置 可以查阅文章
lua脚本
经过设置后我们就可以在/sites/文件夹下添加站点配置。
server {
listen 8080;
location / {
default_type text/html;
#使用content_by_lua_file 加载lua脚本
content_by_lua_file /usr/local/openresty/nginx/conf/sites/test.lua;
# 或者使用content_by_lua_block
content_by_lua_block{
ngx.say("hello world");
}
}
error_log /var/log/nginx/zmkj_client_error.log;
access_log /var/log/nginx/zmkj_client_access.log;
}
教程中使用加载lua脚本的方式,下面是我用lua脚本实现的短链接映射
--获取请求路径
local path = ngx.var.uri
local new_path = string.gsub(path, "/", "")
local mysql = require "resty.mysql"
-- 创建MySQL连接池
local db, err = mysql:new()
if not db then
ngx.log(ngx.ERR, "failed to create mysql object: ", err)
return ngx.exit(500)
end
db:set_timeout(1000) -- 设置超时时间
-- 连接MySQL数据库
local ok, err, errno, sqlstate = db:connect{
host = "127.0.0.1",
port = 3306,
database = "tkzc_release_cud",
user = "root",
password = "root"
}
if not ok then
ngx.log(ngx.ERR, "failed to connect to mysql: ", err, ": ", errno, " ", sqlstate)
return ngx.exit(500)
end
-- 查询数据库中的URL连接数据
local res, err, errno, sqlstate = db:query("SELECT url FROM yun_short_urls WHERE tag = '".. new_path .."'")
if not res then
ngx.log(ngx.ERR, "failed to query mysql: ", err, ": ", errno, " ", sqlstate)
return ngx.exit(500)
end
-- 获取查询结果中的URL连接字符串
local url = res[1].url
-- 对URL进行编码(例如需要将空格替换为%20)
--url = ngx.escape_uri('https://activity-oss.zmaxfilm.com/bank/abc-zz-xyk/index.html#/index?activityId=363')
-- 执行重定向操作
ngx.redirect(url)
-- 关闭MySQL连接
local ok, err = db:set_keepalive(10000, 100)
if not ok then
ngx.log(ngx.ERR, "failed to set mysql keepalive: ", err)
return ngx.exit(500)
end