OpenResty 入门实践指南
OpenResty(曾用名 ngx_openresty)是由中国开发者章亦春主导构建的高性能 Web 平台,核心依托于 NGINX 架构,并集成了大量优质的第三方扩展组件。该平台允许开发者借助 Lua 脚本灵活调度 Nginx 底层的 C 模块与 Lua 模块,从而构建出能够轻松应对万级并发的高吞吐量 Web 服务。目前已被众多互联网企业广泛采用于生产环境。
环境准备与源码编译
以下以 Ubuntu 环境为例演示完整安装流程。编译前需确保系统已安装以下依赖项:
- perl 5.6.1 或更高版本
- libreadline
- libpcre
- libssl
安装依赖命令:
apt-get install libreadline-dev libpcre3-dev libssl-dev perl
CentOS / RedHat 系列系统可执行:
yum install readline-devel pcre-devel openssl-devel
前往 OpenResty 官网 获取最新源码包,执行编译安装:
wget https://openresty.org/download/openresty-1.21.4.1.tar.gz
tar -zxvf openresty-1.21.4.1.tar.gz
cd openresty-1.21.4.1/
./configure --prefix=/usr/local/openresty
make && make install
通过 ./configure --help 可查看完整的配置选项列表。上述示例将程序部署至 /usr/local/openresty 路径下。
首个 Lua 服务示例
完成部署后,通过一个简单的 HTTP 接口验证环境。首先建立项目结构:
mkdir -p /opt/demo/{logs,conf}
在 conf 目录中创建 nginx.conf 配置文件:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 2048;
}
http {
server {
listen 8080;
location / {
default_type text/html;
content_by_lua_block {
local timestamp = ngx.time()
ngx.say("<h1>服务已就绪</h1>")
ngx.say("<p>当前时间戳: " .. timestamp .. "</p>")
}
}
location /api/status {
access_by_lua_block {
ngx.header["Content-Type"] = "application/json"
}
content_by_lua_block {
local json = require "cjson"
local data = {
service = "openresty-demo",
status = "running",
connections = ngx.var.connections_active
}
ngx.say(json.encode(data))
}
}
}
}
服务启停与验证
进入项目目录启动服务:
cd /opt/demo
/usr/local/openresty/nginx/sbin/nginx -p $(pwd) -c conf/nginx.conf
参数说明: -p 指定工作目录前缀,-c 指定配置文件路径。无报错输出即表示启动成功。
测试接口响应:
curl http://localhost:8080/
预期返回包含当前时间戳的 HTML 内容。再验证 JSON 接口:
curl http://localhost:8080/api/status
核心优势与应用场景
OpenResty 的架构设计使得 Web 逻辑能够直接运行于 Nginx 内部,充分利用其异步非阻塞 I/O 模型。这一特性不仅体现在 HTTP 请求处理层面,更延伸至后端数据源的访问——无论是 MySQL、PostgreSQL 等关系型数据库,还是 Redis、Memcached 等缓存中间件,均能获得一致的高性能响应。
对于延迟敏感型业务,可直接通过 OpenResty 操作数据存储层,规避传统架构中 PHP、Python 等脚本语言带来的额外开销,显著降低请求链路耗时并提升整体吞吐能力。