高性能软件负载OpenResty介绍和安装使用详解

 更新时间:2023年12月19日 10:17:04   作者:赵广陆  
OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项,这篇文章主要介绍了高性能软件负载OpenResty介绍和安装,需要的朋友可以参考下

1 OpenResty介绍

OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项

    用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关

    OpenResty通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台,这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

    OpenResty的目标是让你的Web服务直接跑在Nginx服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

1.1 Nginx 的流程定义

nginx实际把请求处理流程划分为了11个阶段,这样划分的原因是将请求的执行逻辑细分,各阶段按照处理时机定义了清晰的执行语义,开发者可以很容易分辨自己需要开发的模块应该定义在什么阶段。

  • 当请求进入Nginx后先READ REQUEST HEADERS 读取头部 然后再分配由哪个指令操作
  • Identity 寻找匹配哪个Location*
  • Apply Rate Limits 是否要对该请求限制
  • Preform Authertication 权限验证
  • Generate Content 生成给用户的响应内容
  • 如果配置了反向代理 那么将要和上游服务器通信 Upstream Services
  • 当返回给用户请求的时候要经过过滤模块 Response Filter
  • 发送给用户的同时 记录一个Log日志

1.1.1 流程详解

阶段描述
post-read接收到完整的http头部后处理的阶段,在uri重写之前,一般跳过
server-rewritelocation匹配前,修改uri的阶段,用于重定向,location块外的重写指令(多次执行)
find-configuri寻找匹配的location块配置项(多次执行)
rewrite找到location块后再修改uri,location级别的uri重写阶段(多次执行)
post-rewrite防死循环,跳转到对应阶段
preaccess权限预处理
access判断是否允许这个请求进入
post-access向用户发送拒绝服务的错误码,用来响应上一阶段的拒绝
try-files访问静态文件资源
content内容生成阶段,该阶段产生响应,并发送到客户端
log记录访问日志

1.1.2 OpenResty处理流程

由于 Nginx 把一个请求分成了很多阶段,第三方模块就可以根据自己的行为,挂载到不同阶段处理达到目的,OpenResty 也应用了同样的特性

不同的阶段,有不同的处理行为,这是 OpenResty 的一大特色,OpenResty 处理一个请求的流程参考下图

指令描述
init_by_lua,init_by_lua_block运行在Nginx loading-config 阶段,注册Nginx Lua全局变量,和一些预加载模块。是Nginx master进程在加载Nginx配置时执行
init_worker_by_lua在Nginx starting-worker阶段,即每个nginx worker启动时会调用,通常用来hook worker进程,并创建worker进行的计时器,用来健康检查,或者设置熔断记时窗口等等。
access_by_lua在access tail阶段,用来对每次请求做访问控制,权限校验等等,能拿到很多相关变量。例如:请求体中的值,header中的值,可以将值添加到ngx.ctx, 在其他模块进行相应的控制
balancer_by_lua通过Lua设置不同的负载均衡策略, 具体可以参考lua-resty-balancer
content_by_lua在content阶段,即content handler的角色,即对于每个api请求进行处理,注意不能与proxy_pass放在同一个location下
proxy_pass真正发送请求的一部分, 通常介于access_by_lua和log_by_lua之间
header_filter_by_lua在output-header-filter阶段,通常用来重新响应头部,设置cookie等,也可以用来作熔断触发标记
body_filter_by_lua对于响应体的content进行过滤处理
log_by_lua记录日志即,记录一下整个请求的耗时,状态码等

2 Openresty安装

2.1 yum安装

你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum update 命令)

2.1.1 添加OpenResty仓库

运行下面的命令就可以添加我们的仓库:

sudo yum install yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

2.1.2 安装OpenResty

然后就可以像下面这样安装软件包,比如 openresty

sudo yum install openresty

2.2 源代码编译安装

OpenResty插件分为自带插件以及第三方插件,如果是自带插件直接激活就可以,如果是第三方插件需要手动下载插件添加进去,这里我们以本地缓存插件安装举例

2.2.1 安装编译环境

yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zlib libxml2-devel ncurses-devel bison libtool-ltdl-devel libiconv libmcrypt mhash mcrypt pcre-devel openssl-devel freetype-devel libcurl-devel lua-devel readline-devel curl wget

2.2.2下载最新版源码

mkdir /usr/local/openresty
wget https://openresty.org/download/openresty-1.21.4.1.tar.gz
tar -zxvf openresty-1.21.4.1.tar.gz # 解压openresty

2.2.3下载缓存插件

缓存插件地址 下载最新版 缓存插件

mkdir /usr/local/openresty/modules&& cd /usr/local/openresty/modules
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz #解压缓存插件

2.2.4 编译OpenResty

选择需要的插件启用, –with-Components 激活组件,–without 则是禁止组件 ,–add-module是安装第三方模块

./configure --prefix=/usr/local/openresty --with-luajit --without-http_redis2_module --with-http_stub_status_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=/usr/local/openresty/modules/ngx_cache_purge-2.3 #配置缓存插件的源码路径

这里禁用了 redis组件 并且 安装了第三方缓存组件

出现如下界面表示编译成功

2.2.5 安装OpenResty

gmake && gmake install

出现如下界面表示安装成功

2.2.6 环境设置

vi /etc/profile ##加入path路径
export PATH=$PATH:/usr/local/openresty/nginx/sbin
source /etc/profile ##生效配置

2.2.7 查看环境

nginx -v
nginx version: openresty/1.17.8.2

查看安装的组件

nginx -V

2.3 环境配置

2.3.1 配置文件修改

基于我们上节课的内容改造nginx.conf

x

user  root;
worker_processes  2;
error_log  logs/error.log  info;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include conf.d/*.conf;
}

2.3.2 创建配置目录

创建配置文件目录

mkdir /usr/local/openresty/nginx/conf/conf.d

2.3.3 创建Nginx配置文件

我们创建的conf.d目录中创建一个测试的配置文件

server {
    server_name www.itcast.com;
    charset   utf-8;
    location /{
        default_type text/html;
        content_by_lua '
            ngx.say("<p>Hello, World!</p>")
            ';
    }
}

如果你熟悉 nginx 的配置,应该对以上代码就很熟悉。这里我们将 html 代码直接写在了配置文件中。

2.3.4启动OpenResty

nginx -c /usr/local/openresty/nginx/conf/nginx.conf

接下来我们可以使用 curl 来测试是否能够正常范围

curl http://127.0.0.1/
<p>Hello, World!</p>

我们在配置文件写的 html 已正常输出。

到此这篇关于高性能软件负载OpenResty介绍和安装的文章就介绍到这了,更多相关OpenResty介绍和安装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Nginx处理Vue开发环境的跨域的方法

    利用Nginx处理Vue开发环境的跨域的方法

    这篇文章主要介绍了利用Nginx处理Vue开发环境的跨域的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • 详解nginx过滤url实现前台js的配置问题

    详解nginx过滤url实现前台js的配置问题

    本篇文章主要介绍了nginx过滤url实现前台js的配置问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Linux上搭载Nginx负载均衡配置使用案例详解

    Linux上搭载Nginx负载均衡配置使用案例详解

    这篇文章主要介绍了Linux上搭载Nginx负载均衡配置使用案例详解,针对此情况而衍生出来的一种廉价有效透明的方法以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性的技术就是负载均衡(Load Balance),需要的朋友可以参考下
    2022-01-01
  • nginx版本号隐藏(附405 not allowed解决办法)

    nginx版本号隐藏(附405 not allowed解决办法)

    版本号泄露时攻击者会利用相应软件版本的当前漏洞,进行有效的相应攻击,本文主要介绍了nginx版本号隐藏,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Nginx配置location匹配顺序详细总结

    Nginx配置location匹配顺序详细总结

    这篇文章主要介绍了Nginx配置location匹配顺序详解,Nginx是十分轻量级的HTTP服务器,Nginx凭借其稳定性、低资源消耗、简单配置和丰富的功能,从十多年前名不见经传的Web服务器软件,发展到如今能够跟Apache匹敌的地位,需要的朋友可以参考下
    2023-08-08
  • Nginx PHP-Fcgi中因PHP执行时间导致504 Gateway Timeout错误解决记录

    Nginx PHP-Fcgi中因PHP执行时间导致504 Gateway Timeout错误解决记录

    这篇文章主要介绍了Nginx PHP-Fcgi中因PHP执行时间导致504 Gateway Timeout错误解决记录,本文的解决方法得来不易,需要的朋友可以参考下
    2014-09-09
  • nginx 负载均衡的三种参数设置

    nginx 负载均衡的三种参数设置

    这篇文章主要介绍了nginx 负载均衡的三种参数设置,需要的朋友可以参考下
    2017-07-07
  • nginx ingress代理websocket流量的配置方法

    nginx ingress代理websocket流量的配置方法

    ingress nginx默认支持websocket协议,使用长连接协议时需要注意连接超时的设置,文中有提到读取和发送超时的注解参数,通过本文阅读可以快速掌握,对nginx ingress代理websocket相关知识感兴趣的朋友一起看看吧
    2022-03-03
  • WinPC搭建nginx服务器的实现步骤

    WinPC搭建nginx服务器的实现步骤

    本文主要介绍了WinPC搭建nginx服务器的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 利用Nginx实现URL重定向的简单方法

    利用Nginx实现URL重定向的简单方法

    使用Nginx的重定向功能时,除了可以重定向到新域名,还可以将请求重定向到特定的协议上,下面这篇文章主要给大家介绍了关于如何利用Nginx实现URL重定向的简单方法,需要的朋友可以参考下
    2022-04-04

最新评论