OpenResty的安装与使用


OpenResty的安装与使用

OpenResty是一个基于Nginx与Lua的高性能Web平台,可以用于Web服务动态网关等,能够处理极高的并发。所以对于我们来说学好OpenResty是很有必要的。

OpenResty内部集成了大量精良的Lua库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态Web 应用、Web 服务和动态网关。

Lua 是一个小巧的脚本语言。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

图片

OpenResty由四个核心组件构成,如下表所示:

组件名称 说明
Nginx Web服务器
LuaJIT Lua语言解释器
ngx_lua 处理HTTP协议,让Lua嵌入在Nginx中运行
stream_lua 也是让Lua在Nginx中运行,负责处理TCP/UDP协议

使用apt安装

#步骤一:安装导入 GPG 公钥时所需的几个依赖包(整个安装过程完成后可以随时删除它们):

sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates

# 切换到root账号
# 步骤二:导入我们的 GPG 密钥:
wget -O - https://openresty.org/package/pubkey.gpg --no-check-certificate | gpg --dearmor -o /usr/share/keyrings/openresty.gpg

# 步骤三:添加我们官方 APT 仓库。
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openresty.list > /dev/null

# 步骤四:更新 APT 索引:
sudo apt-get update

# 然后就可以像下面这样安装软件包,比如 openresty:
sudo apt-get -y install openresty

源码编译安装

使用的服务器信息:

系统 Ubuntu22.04
服务器 IP 192.168.8.88

安装OpenResty:

  • 安装编译所需的软件包
# 安装编译OpenResty必要的工具
apt-get update -yapt-get install -y \
    libpcre3-dev \
    libssl-dev \
    perl \
    make \
    build-essential \
    curl \
    zlib1g-dev

# 安装软件包说明
# libpcre3-dev:PCRE是 ‘Perl Compatible Regular Expressions’(Perl兼容的正则表达式)的缩写。
# PCRE库由一系列函数组成,实现了与Perl5相同的语法、语义的正则表达式匹配功能。
# zlib1g-dev: zlib 是实现 deflate 压缩算法的一个库,该算法是 gzip 和 PKZIP 的基础。该软件包包括了开发支持文件。
  • 下载OpenResty软件源码
wget https://openresty.org/download/openresty-1.21.4.1.tar.gz
  • 编译OpenResty
# 解压下载的源码包
tar -xf openresty-1.21.4.1.tar.gz
# 进入目录
cd openresty-1.21.4.1/
# 编译前配置
./configure
# 编译
gmake -j 2
# 安装
gmake install
# 执行完安装命令后,OpenResty会默认安装在/usr/local/openresty目录
# 查看安装目录文件
root@ubuntu:~/openresty-1.21.4.1# ls /usr/local/openresty/
bin  COPYRIGHT  luajit  lualib  nginx  pod  resty.index  site

# 为了方便使用,将目录添加到环境变量中
# 编辑家目录的.bashrc文件
vim ~/.bashrc
# 添加如下内容
export PATH=/usr/local/openresty/bin:$PATH
# 刷新当前shell环境,使刚才修改生效
source .bashrc

# 启动OpenResty
openresty

# 启动后监听在80端口,使用curl命令访问该端口
root@ubuntu:/usr/local/openresty# curl -vo /dev/null 127.0.0.1
*   Trying 127.0.0.1:80...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.81.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: openresty/1.21.4.1     # 可以看到服务器是OpenResty
< Date: Sat, 24 Jun 2023 06:03:08 GMT
< Content-Type: text/html
< Content-Length: 1097
< Last-Modified: Sat, 24 Jun 2023 05:44:50 GMT
< Connection: keep-alive
< ETag: "649682d2-449"
< Accept-Ranges: bytes
< 
{ [1097 bytes data]
100  1097  100  1097    0     0  71049      0 --:--:-- --:--:-- --:--:-- 78357
* Connection #0 to host 127.0.0.1 left intact

# 停止OpenResty
openresty -s stop

OpenResty在企业应用中能够胜任很多工作

如下图所示以OpenResty为核心的架构图:

图片

可以看到OpenResty之强大,可以作为反向代理,也能够直接访问Redis等数据库。

OpenResty开发

使用OpenResty开发简单的Web服务

  • nginx.conf配置如下:
  server {
       listen     80;
       location / {
            content_by_lua_block {
               # 使用OpenResty的专用指令,可以产生响应内容
               ngx.print("Hello, OpenResty\n") # 输出内容
          }
    }

启动OpenResty

# 使用刚才创建的配置文件启动OpenResty
openresty
  • 验证请求
# 可以看到打印了刚才的内容
root@ubuntu:~ # curl 127.0.0.1
Hello, OpenResty