Linux教程网

OpenResty快速入门教程

简单介绍

OpenResty 项目是由 章亦春 开发,最早诞生于 2007 年,在 2011 年正式对外发布的。OpenResty 目前已经成为一个非常流行的 web 应用服务器框架,在各种高并发、大规模的服务器开发中发挥重要的作用。

它的优势就是兼具了 开发效率运行性能

OpenResty是什么

首先,OpenResty 本质上是一个 Nginx C 模块,它将 LuaJIT 嵌入到了 Nginx 服务器中,对外提供了一套完整的 Lua API

OpenResty 天生就支持了非阻塞的 IO,提供了轻量级线程(协程)、定时器等高级抽象的概念。它已经不仅仅只是负载均衡和反向代理,基于 OpenResty 核心模块,构建出了一套完善的调试技术、测试框架、Lua 实现的周边功能库,已经形成自己独有的生态系统。OpenResty 的目标之一就是让用户感觉不到 Nginx 的存在。

我们可以使用 Lua 语言进行常规的业务操作,如字符串和数值计算、数据库查询、发送 HTTP 请求、执行定时任务、调用外部命令等,这些能力基本可以满足服务器开发所需的功能。

所以,有了 OpenResty 你就可以同时拥有脚本语言的开发效率和迭代速度,以及 Nginx C 模块的高并发和高性能。

三大特性

  • 详尽的文档和测试用例;
  • 同步非阻塞,使得开发变得简单;
  • 动态,使用 Lua 来动态控制逻辑;

环境安装

在进一步学习 OpenResty 之前,需要先把基本环境搭建起来,只有在实际的环境中进行操作和调试,才能更深入的理解 OpenResty 原理。

具体安装步骤和方法,见我的另一篇文章 Linux如何安装OpenResty | Linux教程网

Hello程序

我们先来看下,最简单的 Hello 程序是如何编写和运行的

1
2
$ resty -e "ngx.say('hello World')"
hello world

这就是最简单的 Hello 程序。本质上是临时启动一个 Nginx 服务,但是没有启动 master 进程,也没有侦听端口,下边我们把 demo 程序改得更正式一些。

1. 创建工作目录

先创建工作目录

1
2
3
mkdir resty
cd resty
mkdir logs conf

2. 配置文件

OpenResty 启动时需要一个主配置文件 nginx.conf

1
2
3
4
5
6
7
8
9
10
11
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location / {
content_by_lua 'ngx.say("hello, world")';
}
}
}

3. 启动 OpenResty 服务

1
openresty -p `pwd` -c conf/nginx.conf

启动后,打开浏览器或使用 curl 命令来访问

1
2
3
4
5
6
7
8
9
$ curl -i 127.0.0.1:8080
HTTP/1.1 200 OK
Server: openresty/1.21.4.1
Date: Wed, 29 Mar 2023 14:18:26 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive

hello, world

4. 使用 content_by_lua_file 指令

上边的用例中,lua 代码是写在 nginx.conf 配置文件中的,如果业务逻辑很复杂,那 nginx.conf 配置文件就会很复杂,代码的可读性就会很差。

可以使用 content_by_lua_file 指令来解决这个问题,我们把 lua 代码单独放到了 hello.lua 文件中,与 nginx.conf 完全解耦。

1
2
3
4
5
6
7
8
http {
server {
listen 8080;
location / {
content_by_lua_file lua/hello.lua;
}
}
}

修改配置后,重启 OpenResty 服务就可以生效了

1
kill -HUP `cat logs/nginx.pid`

5. content_by_lua_file lua/hello.lua 路径

lua/hello.lua 路径是相对路径,OpenResty 如何找到对应 lua 文件呢?其实我们在程序运行时指定了 -p 选项,OpenResty 根据选项指定的路径作为前缀,将相对路径拼接上就可以找到对应的 Lua 文件了。

6. 打开调试模式

对于开发人员,Lua 脚本会频繁被修改,如果每次都需要重启 OpenResty 服务,会大大降低开发效率的。我们可以通过设置如下的指令,来禁止对 Lua 代码的缓存。

1
lua_code_cache off;

这种方式只能在开发和调试阶段设置,如果是生产环境,一定要打开缓存,否则会严重影响性能。

7. 如何设置lua路径

OpenResty 提供了 lua_package_path 指令,可以设置 Lua 模块的查找路径。

1
2
3
$prefix/lua/?.lua;;
# $prefix 就是启动参数 -p PATH
# 最后两个分号,则代表内置的代码搜索路径

目录结构

我们可以通过 -V 选项查看 OpenResty 的安装目录。Linux 系统如果是通过二进制安装的话,一般是在

1
/usr/local/openresty

通过 tree -L 2 命令可以得到如下目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
├── bin
│   ├── openresty -> ../nginx/sbin/nginx
│   ├── opm # 包管理器
│   └── resty # 命令行工具
├── luajit
├── lualib
├── nginx
│   ├── conf
│   ├── logs
│   └── sbin
├── openssl111
├── pcre
├── site
└── zlib

专题:

本文发表于 2023-03-29,最后修改于 2023-05-01。

本站永久域名「 golinuxblog.com 」,也可搜索「 Linux教程网 」找到我。


上一篇 « Linux如何安装OpenResty 下一篇 » 一定要了解的 curl 命令实用技巧

推荐阅读

Big Image