一、前言
OpenResty是一个基于 Nginx 与 Lua 的开源高性能 Web 平台,OpenResty团队为Nginx开发了Lua模块,使得开发者/运维可以使用Lua为OpenResty开发扩展,或者为Nginx定制功能,另外OpenResty团队也内置了很多Lua扩展(JWT、MySQL、Redis等),可以通过OpenResty高效率的开发高性能Web服务
1、本文主要内容
- OpenResty基础依赖:Lua、LuaJit、LuaRocks编译安装
- OpenResty安装(Yum)&配置开机启动
- OpenResty编译安装&配置开机启动
- OpenResty配置HTTP代理
- OpenResty+Lua脚本响应HTTP请求
- OpenResty常用命令介绍
2、本文环境信息
工具/环境 | 版本说明 | 适用版本 |
Linux | OpenEuler 22.03 LTS | openEuler 22.03+,CentOS 7+ |
Lua | 5.1.5 | 5.1+ |
LuaJit | 2.1 | 2.0+ |
LuaRocks | 3.11.0 | 3.0+ |
OpenResty | 1.21.4.1 | 1.17+ |
3、前置准备
开放80及其他测试端口
sudo firewall-cmd --add-port=80-9999/tcp --permanent
sudo firewall-cmd --add-port=80-9999/udp --permanent
sudo firewall-cmd --reload
二、使用Yum包安装OpenResty
1、安装依赖&添加Yum源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2、安装OpenResty
# 查看可选版本
yum list openresty --showduplicates
# 输出示例
openresty.x86_64 1.19.3.2-1.el7
openresty.x86_64 1.21.4.1-1.el7
openresty.x86_64 1.25.3.1-1.el7
# 安装指定版本
sudo yum install -y openresty-1.21.4.1-1.el7
# 安装最新版本
sudo yum install -y openresty
3、启动&设置为开机启动
sudo systemctl start openresty
sudo systemctl enable openresty
4、安装验证
# 查看openresty版本
openresty -v
# curl访问测试
curl localhost --head | grep Server
三、编译安装OpenResty
1、安装准备
安装基础依赖
sudo yum install -y wget gcc make unzip git \
readline-devel pcre-devel openssl-devel zlib-devel
准备源码安装目录
mkdir -p /home/downloads && cd /home/downloads
2、编译安装Lua
在Lua官网选择需要的版本:https://www.lua.org/ftp/,本次我们选择5.1.5版本
# 下载&解压Lua源码
wget https://www.lua.org/ftp/lua-5.1.5.tar.gz
tar zxvf lua-5.1.5.tar.gz
cd lua-5.1.5
# 编译&安装Lua到/usr/local
sed -i 's/INSTALL_TOP=.*/INSTALL_TOP= \/usr\/local/' Makefile
make linux && sudo make install
使编译安装的Lua生效
# 替换原有lua
sudo mv /usr/bin/lua /usr/bin/lua.bak
sudo ln -sf /usr/local/bin/lua /usr/bin/lua
# 验证安装
lua -v
3、编译安装LuaJit
# git迁出LuaJit仓库
cd /home/downloads
git clone -b v2.1 https://luajit.org/git/luajit.git luajit-2.1
cd luajit-2.1
# 编译&安装LuaJit
make && sudo make install
# 验证LuaJit安装
luajit -v
4、编译安装LuaRocks
在LuaRocks官网选择需要的版本:https://luarocks.org/releases,本次我们选择3.11.0版本
# 下载&解压LuaRocks源码
cd /home/downloads
wget https://luarocks.org/releases/luarocks-3.11.0.tar.gz
tar zxvf luarocks-3.11.0.tar.gz
cd luarocks-3.11.0
# 编译&安装
./configure && make && sudo make install
LuaRocks安装验证&测试
# luarocks安装luasocket包
luarocks install luasocket
# 在lua中引用安装的luasocket测试
lua
require "socket"
5、编译安装OpenResty
在OpenResty选择需要的版本:https://openresty.org/en/download.html#legacy-releases,如果没有特别要求,直接选择最新版即可,本次以1.21.4.1版本作为示例
# 下载&解压OpenResty源码
cd /home/downloads
wget https://openresty.org/download/openresty-1.21.4.1.tar.gz
tar zvxf openresty-1.21.4.1.tar.gz
cd openresty-1.21.4.1
# 配置编译选项:制定安装目录
./configure --prefix=/usr/local/openresty
# 编译&安装
make -j$(nproc) && sudo make install
安装完成后可以根据指定的路径进行测试
# 查看版本
/usr/local/openresty/nginx/sbin/nginx -v
# 启动
sudo /usr/local/openresty/nginx/sbin/nginx
# 访问测试
curl http://localhost/
# 停止
sudo /usr/local/openresty/nginx/sbin/nginx -s stop
配置OpenResty环境变量
# 修改profile
sudo vi /etc/profile
# 在文件末尾追加
export PATH=$PATH:/usr/local/openresty/bin
export PATH=$PATH:/usr/local/openresty/nginx/sbin
# 使环境变量生效
source /etc/profile
命令测试
# 查看版本
openresty -v
# 启动openresty
openresty
# 停用openresty
openresty -s stop
# 重载配置
openresty -s reload
浏览器访问测试
四、OpenResty配置
OpenResty的默认安装目录为:/usr/local/openresty 配置目录:/usr/local/openresty/nginx/conf/ 默认配置文件为:nginx.conf
1、新增配置目录
#1、新增配置文件夹
mkdir -p /openresty/conf
#2、修改默认配置
vi /usr/local/openresty/nginx/conf/nginx.conf
#3、在http属性下新增配置文件夹(绝对路径):
include /openresty/conf/*.conf;
2、基本转发配置
跟Nginx反向代理配置方式一致
#1、新建/修改配置文件
vi /openresty/conf/ken.conf
#2、配置内容
server {
listen 80; #监听80端口
server_name test.local.ken.io; #监听的域名
location / { #转发或处理
proxy_pass https://ken.io;
}
}
#3、重载配置
openresty -s reload
修改hosts
# 修改hosts配置
sudo vi /etc/hosts
# 增加配置
127.0.0.1 test.local.ken.io
使用curl命令或者浏览器进行访问测试
curl test.local.ken.io
3、使用Lua响应请求
监听8888端口,使用OpenResty内置的Lua函数响应请求,输出:Hello,{name}
#1、新建/修改配置文件
vi /openresty/conf/hello.conf
#2、配置内容
server {
listen 8888;
location / {
default_type 'text/plain';
content_by_lua_block {
local args = ngx.req.get_uri_args()
local name = args["name"]
ngx.header["X-Header"] = "ken.io"
if name then
ngx.say("Hello, " .. name)
else
ngx.say("Hello, OpenResty!")
end
}
}
}
#3、重载配置
openresty -s reload
使用curl命令或者浏览器进行访问测试
curl -i localhost:8888
curl -i localhost:8888?name=Ken
# 输出示例
HTTP/1.1 200 OK
Server: openresty/1.21.4.1
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive
X-Header: ken.io
Hello, OpenResty!
五、备注
1、OpenResty常用命令
# 启动 OpenResty 主进程
openresty
# 停止 OpenResty
openresty -s stop
# 优雅地关闭 OpenResty
openresty -s quit
# 重载 OpenResty 配置文件
openresty -s reload
# 重新打开日志文件
openresty -s reopen
# 显示 OpenResty 的版本信息
openresty -v
# 指定 OpenResty 工作目录
openresty -p /path/to/work_dir
# 使用指定的配置文件启动 OpenResty
openresty -c /path/to/nginx.conf