openresty安装并使用lua进行业务逻辑处理

devtools/2024/9/23 4:46:40/

OpenResty 基础教程及Lua动态脚本实现

OpenResty 简介

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,它将 Nginx 的 C 模块和 Lua 脚本相结合,提供了一个强大的 Web 应用服务器和反向代理服务器。OpenResty 特别适合处理高并发的 Web 应用,能够轻松应对数以万计的并发连接1。

安装 OpenResty

在 Ubuntu 20.04 上安装 OpenResty

  1. 添加 OpenResty 的官方 PPA 到你的系统:

     

    sudo apt-get install software-properties-common sudo add-apt-repository ppa:openresty/ppa

  2. 更新软件包列表并安装 OpenResty:

     

    sudo apt-get update sudo apt-get install openresty

在 CentOS 8 上安装 OpenResty

  1. 使用 dnf 安装 OpenResty:
     

    sudo dnf install -y yum-utils sudo dnf install -y openresty

Lua 动态脚本基础

Lua 是一种轻量级的脚本语言,它以其简洁和高性能而闻名。OpenResty 内置了 LuaJIT,一个 Lua 的即时编译版本,这使得 Lua 脚本能够在 OpenResty 中高效运行。

Lua 环境搭建

在 Windows 上搭建环境

从 OpenResty 官网下载 Windows 版本的 OpenResty,解压后可以直接使用 LuaJIT 命令行工具。

在 Linux/Mac OS X 上搭建环境

通过 LuaJIT 官网下载并编译安装 LuaJIT。

Lua 编码规范

  • 使用 4 个空格作为缩进。
  • 在操作符两边使用空格分隔。
  • 避免在行尾添加分号,这在 Lua 中是不必要的。

Lua 动态脚本示例

下面是一个简单的 Lua 脚本示例,它展示了如何在 OpenResty 中使用 Lua 来处理 HTTP 请求。

示例:Lua 动态脚本处理 HTTP 请求

  1. 创建一个 Lua 脚本文件 hello.lua

     

    -- hello.lua local function say_hello() ngx.say("Hello, World!") end say_hello()

  2. 在 OpenResty 的配置文件中,设置一个 location 来执行这个 Lua 脚本:

     

    server { listen 8080; location /lua { content_by_lua_block { local say = require("hello") say.hello() } } }

  3. 启动 OpenResty 并访问 http://localhost:8080/lua,你将看到页面上显示 "Hello, World!"。

集成 Prometheus 监控

为了监控 OpenResty 的性能,我们可以集成 Prometheus。以下是一个基本的集成步骤:

  1. 安装 Prometheus 并运行它。

  2. 在 OpenResty 中集成 prometheus-nginx-log-exporterlua-resty-prometheus 模块来收集指标。

  3. 配置 Prometheus 抓取 OpenResty 的指标。

  4. 使用 Grafana 可视化指标数据。

示例:集成 Prometheus

  1. 安装 Prometheus(可以通过 Docker 安装):

     

    docker run -d -p 9090:9090 prom/prometheus

  2. 配置 OpenResty 使用 lua-resty-prometheus 模块:

     

    http { lua_shared_dict prometheus_metrics 10M; init_by_lua_block { local prometheus = require("resty.prometheus") local metrics = prometheus.new() metrics:histogram("my_http_request_duration_seconds", "HTTP request latency", {0.1, 0.3, 1.5, 10}) } log_by_lua_block { local request_duration = ngx.now() - ngx.req.start_time() metrics:histogram("my_http_request_duration_seconds", request_duration, {"status"=ngx.status}) } }

  3. 配置 Prometheus 抓取指标,编辑 prometheus.yml 文件,添加抓取配置。

  4. 使用 Grafana 连接 Prometheus 数据源,并创建仪表板。

通过以上步骤,你可以在 OpenResty 中实现 Lua 动态脚本的基本处理,并通过 Prometheus 进行监控。这为构建高性能的 Web 应用和服务提供了一个坚实的基础。


http://www.ppmy.cn/devtools/49674.html

相关文章

OpenCV单词轮廓检测

OpenCV单词轮廓检测 0. 前言1. 策略分析2. 检测字符轮廓3. 检测单词轮廓相关链接 0. 前言 在根据文档图像执行单词转录时,通常第一步是识别图像中单词的位置。我们可以使用两种不同的方法识别图像中的单词: 使用 CRAFT、EAST 等深度学习技术使用基于 O…

好用的国内镜像源

docker.m.daocloud.io m.daocloud.io/docker.io/ 用法举例: docker.m.daocloud.io/grafana/grafana:v10.4.2 grafana/grafana:v10.4.2这部分就是docker hub仓库下镜像的路径。

《Python程序设计(第二版)》第一二章冷门点上

python小白考前复习 1.编码(密码本)2.数字类型2.1整数你可以单独使用数字0,但不要前置它幂的优先级高于乘除 2.2浮点数科学计数法divmod函数:同时计算商和余数慎用round(x,n)函数abs函数求模关于复数 3.字符串类型R方法原始字符串…

【Spring Cloud】Gateway 服务网关核心架构的执行流程和断言

文章目录 基本概念执行流程断言内置路由断言工厂自定义路由断言工厂 总结 基本概念 路由(Route)是gateway中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息: id:路由标识符,区别于其他Route。uri&…

分布式事务的八种方案解析(1)

针对不同的分布式场景业界常见的解决方案有2PC、TCC、可靠消息最终一致性、最大努力通知等方案,以下总结8 种常见的解决方案,帮助大家在实际的分布式系统中更好地运用事务。 1.2PC 二阶段提交协议(Two-phase commit protocol)&…

嵌入式学习

笔记 作业 自由发挥登录窗口的应用场景,实现一个登录窗口界面。 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//重新设置窗口大小this->resize(430,330);//设置窗口标签this->setWindowIcon(QIcon("C:/User…

【6】第一个Java程序:Hello World

一、引言 Java,作为一种广泛使用的编程语言,其强大的跨平台能力和丰富的库函数使其成为开发者的首选。对于初学者来说,编写并运行第一个Java程序是一个令人兴奋的时刻。本文将指导你使用Eclipse这一流行的集成开发环境(IDE&#…

c++ 函数内对象的释放

void someFunction() {MyClass obj MyClass(); }void someFunction() {MyClass obj new MyClass();}void someFunction() {MyClass* obj new MyClass(); }void someFunction() {std::unique_ptr<MyClass> obj std::make_unique<MyClass>(); }在函数中用这4种…