当前位置:首页 > 技术 > 正文内容

OpenResty 入门实践指南

访客 技术 2026年6月23日 1

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 等脚本语言带来的额外开销,显著降低请求链路耗时并提升整体吞吐能力。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。