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 | $ resty -e "ngx.say('hello World')" |
这就是最简单的 Hello 程序。本质上是临时启动一个 Nginx 服务,但是没有启动 master 进程,也没有侦听端口,下边我们把 demo 程序改得更正式一些。
1. 创建工作目录
先创建工作目录
1 | mkdir resty |
2. 配置文件
OpenResty 启动时需要一个主配置文件 nginx.conf
1 | events { |
3. 启动 OpenResty 服务
1 | openresty -p `pwd` -c conf/nginx.conf |
启动后,打开浏览器或使用 curl
命令来访问
1 | $ curl -i 127.0.0.1:8080 |
4. 使用 content_by_lua_file
指令
上边的用例中,lua 代码是写在 nginx.conf 配置文件中的,如果业务逻辑很复杂,那 nginx.conf 配置文件就会很复杂,代码的可读性就会很差。
可以使用 content_by_lua_file
指令来解决这个问题,我们把 lua 代码单独放到了 hello.lua 文件中,与 nginx.conf 完全解耦。
1 | http { |
修改配置后,重启 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 | $prefix/lua/?.lua;; |
目录结构
我们可以通过 -V
选项查看 OpenResty 的安装目录。Linux 系统如果是通过二进制安装的话,一般是在
1 | /usr/local/openresty |
通过 tree -L 2
命令可以得到如下目录结构
1 | ├── bin |