在Linux上安装配置OpenResty

一、前言

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及其他测试端口

代码语言:javascript
复制
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源

代码语言:javascript
复制
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

2、安装OpenResty

代码语言:javascript
复制
# 查看可选版本
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、启动&设置为开机启动

代码语言:javascript
复制
sudo systemctl start openresty
sudo systemctl enable openresty

4、安装验证

代码语言:javascript
复制
# 查看openresty版本
openresty -v

curl访问测试

curl localhost --head | grep Server

三、编译安装OpenResty

1、安装准备

安装基础依赖

代码语言:javascript
复制
sudo yum install -y wget gcc make unzip git 
readline-devel pcre-devel openssl-devel zlib-devel

准备源码安装目录

代码语言:javascript
复制
mkdir -p /home/downloads && cd /home/downloads

2、编译安装Lua

在Lua官网选择需要的版本:https://www.lua.org/ftp/,本次我们选择5.1.5版本

代码语言:javascript
复制
# 下载&解压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生效

代码语言:javascript
复制
# 替换原有lua
sudo mv /usr/bin/lua /usr/bin/lua.bak
sudo ln -sf /usr/local/bin/lua /usr/bin/lua

验证安装

lua -v

3、编译安装LuaJit

代码语言:javascript
复制
# 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版本

代码语言:javascript
复制
# 下载&解压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安装验证&测试

代码语言:javascript
复制
# 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版本作为示例

代码语言:javascript
复制
# 下载&解压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

安装完成后可以根据指定的路径进行测试

代码语言:javascript
复制
# 查看版本
/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环境变量

代码语言:javascript
复制
# 修改profile
sudo vi /etc/profile

在文件末尾追加

export PATH=$PATH:/usr/local/openresty/bin
export PATH=$PATH:/usr/local/openresty/nginx/sbin

使环境变量生效

source /etc/profile

命令测试

代码语言:javascript
复制
# 查看版本
openresty -v

启动openresty

openresty

停用openresty

openresty -s stop

重载配置

openresty -s reload

浏览器访问测试

image.png

四、OpenResty配置

OpenResty的默认安装目录为:/usr/local/openresty 配置目录:/usr/local/openresty/nginx/conf/ 默认配置文件为:nginx.conf

1、新增配置目录

代码语言:javascript
复制
#1、新增配置文件夹
mkdir -p /openresty/conf

#2、修改默认配置
vi /usr/local/openresty/nginx/conf/nginx.conf

#3、在http属性下新增配置文件夹(绝对路径):
include /openresty/conf/*.conf;

2、基本转发配置

跟Nginx反向代理配置方式一致

代码语言:javascript
复制
#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

代码语言:javascript
复制
# 修改hosts配置
sudo vi /etc/hosts

增加配置

127.0.0.1 test.local.ken.io

使用curl命令或者浏览器进行访问测试

代码语言:javascript
复制
curl test.local.ken.io

3、使用Lua响应请求

监听8888端口,使用OpenResty内置的Lua函数响应请求,输出:Hello,{name}

代码语言:javascript
复制
#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命令或者浏览器进行访问测试

代码语言:javascript
复制
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!

image.png

五、备注

1、OpenResty常用命令

代码语言:javascript
复制
# 启动 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