Linux服务升级:OpenResty 升级1.25.3.1版本

news2025/2/23 19:43:30

目录

一、实验

1.环境

2.Windows 安装 Termius 

3.Linux 部署 OpenResty

4.Linux 使用 OpenResty 实现内容展示(content_by_lua)

5.Linux 使用 OpenResty 实现重定向 (rewrite_by_lua)

6.Linux 使用 OpenResty 实现请求体(body_filter_by_lua)

7.Linux 部署 Redis

8.Linux 使用 OpenResty 实现黑名单(access_by_lua)

9.Linux 使用 OpenResty 实现定时器(init_worker_by_lua)

二、问题

1.安装OpenResty报错

2.如何启动、关闭、重启 OpenResty

3.OpenResty启动报错

4.OpenResty运行原理


一、实验

1.环境

(1)主机

表1  主机

系统版本IP备注
CentOS7.9192.168.204.200

   高性能web网关OpenResty

(2)查看系统版本

 cat /etc/os-release

2.Windows 安装 Termius 

(1) 查阅

https://www.termius.com/download/windows

 (2) 添加主机

完成

3.Linux 部署 OpenResty

(1)查阅

1)下载
https://openresty.org/cn/download.html

2)安装
https://openresty.org/cn/linux-packages.html#centos

最新版本为1.25.3.1

(2)添加yum仓库

wget https://openresty.org/package/centos/openresty.repo

sudo mv openresty.repo /etc/yum.repos.d/openresty.repo

(3)更新yum仓库

sudo yum check-update

(4)安装软件包

sudo yum install -y openresty

(5)安装命令行工具 resty

sudo yum install -y openresty-resty

(6)列出所有 openresty 仓库里头的软件包

sudo yum --disablerepo="*" --enablerepo="openresty" list available

(7)查看版本

openresty -v

4.Linux 使用 OpenResty 实现内容展示(content_by_lua)

(1)创建目录及子目录

子目录(app、conf、logs)分别用来存放编写的应用程序、配置文件、日志文件。

mkdir test_openresty
cd test_openresty
mkdir app
mkdir conf
mkdir logs

(2)  在conf下创建nginx.conf文件

cd /conf
vim nginx.conf

worker_processes 2;
events {
    worker_connections 10240;
}
#######################
# 以下为配置块
#######################

# http 协议
http {
    #虚拟主机
    server {
        listen 8989;
        # 处理http请求
        # 捕获和处理
        location / {
            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
    }
}

#
# tcp 使用stream
#
# stream{
#    
#}

(3) 监听nginx进程

目前暂无

 ps aux | grep nginx

(4)切换目录

cd ..
ls

(5)openresty启动nginx

openresty -p . -c conf/nginx.conf

(6) 再次查看进程

新增nginx进程

 ps aux | grep nginx

(7)访问

http://192.168.204.200:8989

(8)查看目录

ls

日志

cd logs/
ls

5.Linux 使用 OpenResty实现重定向 (rewrite_by_lua)

(1) 在conf下修改nginx.conf文件

cd /conf
vim nginx.conf

worker_processes 2;
events {
    worker_connections 10240;
}
#######################
# 以下为nginx配置块
#######################

# http 协议
http {
    #虚拟主机
    server {
        listen 8989;
        # 处理http请求
        # 捕获和处理
        location / {
            # 初始化数据,可以在此阶段加载耗时模块、设置全局变量
            # init_by_lua_block {
            #     gloabl_a=100
            # }

            # 用于执行内部url重写或外部重定向
            rewrite_by_lua_block {
                local args = ngx.req.get_uri_args()
                if args["jump"] == "1" then
                    return ngx.redirect("http://maojing.site")
                elseif args["jump"] == "2" then
                    return ngx.redirect("/jump_here")
                end
            }

            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
        #  rewrite_by_lua不止能跳转到外部,也可以内部跳转
        location /jump_here {
            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello, jump_here","\t",ngx.var.remote_addr)
            }
        }
    }
}

#
# tcp 使用stream
#
# stream{
#    
#}

(2)切换目录

cd ..

(3) 重启

openresty -p . -s reload

 (4) 再次查看进程

 ps aux | grep nginx

(5)访问

http://192.168.204.200:8989/?jump=2

会自动跳转

6.Linux 使用 OpenResty 实现请求体(body_filter_by_lua)

(1)  在conf下修改nginx.conf文件

cd /conf
vim nginx.conf

worker_processes 2;
events {
    worker_connections 10240;
}
#######################
# 以下为nginx配置块
#######################

# http 协议
http {
    #虚拟主机
    server {
        listen 8989;
        # 处理http请求
        # 捕获和处理
        location / {
            # 用于执行内部url重写或外部重定向
            rewrite_by_lua_block {
                local args = ngx.req.get_uri_args()
                if args["jump"] == "1" then
                    return ngx.redirect("http://maojing.site")
                elseif args["jump"] == "2" then
                    return ngx.redirect("/jump_here")
                end
            }

            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
        #  rewrite_by_lua不止能跳转到外部,也可以内部跳转
        location /jump_here {
            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello, jump_here","\t",ngx.var.remote_addr)
            }
            # 用于修改应答body的内容
            body_filter_by_lua_block {
                local chunk=ngx.arg[1]
                ngx.arg[1]=chunk:gsub("hello","DEVOPS.")
            }
        }
    }
}

#
# tcp 使用stream
#
# stream{
#    
#}

 (2)切换目录

cd ..

(3) 重启

openresty -p . -s reload

  (4) 再次查看进程

 ps aux | grep nginx

 (5)访问

http://192.168.204.200:8989/?jump=2

会自动跳转

7.Linux 部署 Redis

(1)SFTP传输Redis软件包

完成

(2)Redis部署

可以参考本人博客:

数据库应用:Redis安装部署-CSDN博客

(3)监听服务

 netstat -natp | grep redis

(4)把redis的可执行程序文件放入路径环境变量的目录中便于系统识别

 ln -s /usr/local/redis/bin/* /usr/local/bin/

8.Linux 使用 OpenResty 实现黑名单(access_by_lua)

(1)  在conf下新建nginx_new.conf文件

cd /conf
vim nginx_new.conf

worker_processes 2;
events {
    worker_connections 10240;
}
#######################
# 以下为nginx配置块
#######################

# http 协议
http {
    #虚拟主机
    server {
        listen 8989;
        location / {
            access_by_lua_block {
                local block_list={
                    ["192.168.204.1"]=true
                }
                if block_list[ngx.var.remote_addr] then
                    return ngx.exit(403)
                end
            }
            
             # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
    }
}

(2)切换目录

cd ..

(3)启动openresty

openresty -p . -c conf/nginx_new.conf

(4) 查看进程

 ps aux | grep nginx

(5)访问

http://192.168.204.200:8989

(6)继续修改nginx_new.conf文件内容

cd /conf
vim nginx_new.conf

worker_processes 2;
events {
    worker_connections 10240;
}
#######################
# 以下为nginx配置块
#######################

# http 协议
http {
    #虚拟主机
    server {
        listen 8989;
        location / {
            # 用于访问控制
            access_by_lua_block {
                local block_list={
                    ["192.168.204.1"]=true
                }
                if block_list[ngx.var.remote_addr] then
                    return ngx.exit(403)
                end
            }
            
             # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
        location /black_v1 {
            # 用于访问控制,通过文件
            access_by_lua_file ./app/black_v1.lua;
            
            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
    }
}

(7)app目录下创建black_v1.lua文件

cd app/
vim black_v1.lua

local redis = require "resty.redis"
local red=redis:new()

local ok,err=red:connect("127.0.0.1",6379)

if not ok then
    return ngx.exit(301)
end

local ip=ngx.var.remote_addr

local exists,err=red:sismember("black_list",ip)

if exists ==1 then
    return ngx.exit(403)
end

 (8)Redis添加IP地址到KEY中

[root@www ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> SADD black_list 192.168.204.1
(integer) 1
127.0.0.1:6379> keys *
1) "black_list"
127.0.0.1:6379> SMEMBERS black_list
1) "192.168.204.1"
127.0.0.1:6379> 
127.0.0.1:6379> exit

(9) 重启

openresty -p . -s reload

(10) 查看进程

 ps aux | grep nginx

(11)访问

http://192.168.204.200:8989/black_v1

9.Linux 使用 OpenResty 实现定时器(init_worker_by_lua)

(1) 继续修改nginx_new.conf文件内容

cd /conf
vim nginx_new.conf

worker_processes 2;
events {
    worker_connections 10240;
}
#######################
# 以下为nginx配置块
#######################

# http 协议
http {
    # 创建共享内存
    lua_shared_dict bklist 1m;
    # 初始化数据,定时器
    init_worker_by_lua_file ./app/init_worker.lua;
    
    #虚拟主机
    server {
        listen 8989;
        location / {
            # 用于访问控制
            access_by_lua_block {
                local block_list={
                    ["192.168.204.1"]=true
                }
                if block_list[ngx.var.remote_addr] then
                    return ngx.exit(403)
                end
            }
            
             # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
        location /black_v1 {
            # 用于访问控制,通过文件
            access_by_lua_file ./app/black_v1.lua;

            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
        location /black_v2 {
            
            # 用于访问控制,通过文件
            access_by_lua_file ./app/black_v2.lua;

            # 内容处理,在配置中写代码
            content_by_lua_block {
                ngx.say("hello","\t",ngx.var.remote_addr)
            }
        }
    }
}

(2) app目录下创建black_v2.lua文件

cd app/
vim black_v2.lua

local bklist=ngx.shared.bklist

local ip=ngx.var.remote_addr

if bklist:get(ip) then
    return ngx.exit(403)
end

(3)app目录下创建init_worker.lua文件

cd app/
vim init_worker.lua

-- 只需要一个进程拉取数据即可。
if ngx.worker.id() ~=0 then
    return
end

-- 获取共享内存
local bklist =ngx.shared.bklist

local redis=require "resty.redis"


local function update_blacklist()
    local red=redis:new()
    local ok,err=red:connect("127.0.0.1",6379)

    if not ok then
        return
    end
    local black_list,err=red:smembers("black_list")
    bklist:flush_all()
    for _, v in pairs(black_list) do
        bklist:set(v,true);
    end
    ngx.timer.at(5,update_blacklist)
end

ngx.timer.at(5,update_blacklist)

(4) 查看Redis

 已添加IP地址到KEY中

[root@www ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "black_list"
127.0.0.1:6379> SMEMBERS black_list
1) "192.168.204.1"
127.0.0.1:6379> exit

(5)重启

openresty -p . -s reload

  (6)查看进程

 ps aux | grep nginx

(7) 访问

http://192.168.204.200:8989/black_v2

(8)优雅退出

openresty -p . -s quit

(9)查看进程

 ps aux | grep nginx

二、问题

1.安装OpenResty报错

(1)报错

Error downloading packages:
  openresty-1.25.3.1-1.el7.x86_64: [Errno 256] No more mirrors to try.

(2)原因分析

安装包下载失败。

(3)解决方法

先安装命令行工具 resty

sudo yum install -y openresty-resty

成功:

sudo yum install -y openresty

2.如何启动、关闭、重启 OpenResty

(1)命令

   . 表示当前目录为工作目录

1)指定配置启动 openresty
openresty -p . -c conf/nginx.conf

2) 优雅退出
openresty -p . -s quit

3) 重启 openresty
openresty -p . -s reload

3.OpenResty启动报错

(1)报错

(2)原因分析

端口被占用

(3)解决方法

优雅退出当前进程

监听nginx服务端口

再次启动

4.OpenResty运行原理

1)Nginx
Nginx采用的是master-worker模型,也就是一个master进程管理多个worker进程,基本的时间处理都放在worker进程中,master进程负责全局初始化以及对worker进行的管理。

2)OpenResty
OpenResty中,每个worker进程使用一个LuaVM,当请求被分配到worker时,将在这个LuaVM中创建一个coroutine协程,协程之间数据隔离,每个协程都具有独立的全局变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1670285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用matplotlib和KNeighborsClassifier,进行DBSACN聚类算法

代码: # -*- coding: utf-8 -*- """ Created on Sat May 11 10:23:50 2024author: admin """ # 调用库 import numpy as np import matplotlib.pyplot as plt # 调用人工智能模型库 from sklearn.neighbors import KNeighborsClassi…

JVM 类的加载过程详解

文章目录 1. 哪些类需要加载2. 类加载步骤2.1 装载2.1.1 这个过程都做了什么事2.1.2 类的模板对象2.1.3 二进制流获取方式2.1.4 Class 实例的位置2.1.5 数组类的加载有什么不同 2.2 链接2.2.1 验证2.2.2 准备2.2.3 解析 2.3 初始化 1. 哪些类需要加载 在 Java 中数据类型分为 …

初始化linux数据盘(3TB)分区-格式化-挂载目录

场景说明:某云给我们服务器加载了一块3TB的硬盘扩容(没有直接扩,原因是原来的盘做的是mbr(什么年代了,谁干的)的分区,最大识别2TB) 确认磁盘 输入命令lsblk 查看数据盘信息 &#…

CEETRON SDK 可为您的CAE应用程序提供5大优势!

开发CAE应用程序是一项资源密集型、复杂且耗时的工作。成功的开发人员会尽其所能,确保他们专注于让他们的产品、他们的新想法独一无二的东西。凭借CEETRON系列产品及其集成的工具,Tech Soft 3D提供了唯一支持预处理、求解和后处理工作流程的完整CAE组件技…

PCIE协议-2-事务层规范-Completion Rules

2.2.9 完成规则 所有Read、Non-Posted Write和AtomicOp请求都需要完成(Completion)。完成包含一个完成头标,对于某些类型的完成,完成头标之后会跟随一定数量的DWs数据。完成头标的每个字段的规则在以下各节中定义。 完成通过ID路…

_remote.repositories作用

问题描述 明明我本地有某个依赖但是却还是报错,原因就是存在_remote.repositories且你的远程仓库中找不到该依赖,可能发生在你修改了远程仓库或镜像时。 例子 本地有这个依赖,但是报错。 解决 删除_remote.repositories文件&#xff0…

【多电压流程 Multivoltage Flow】- 5.特定工具使用建议(6.Formality)

使用Formality进行形式验证 Formality支持具有低功耗特性的功能等效性检查,如时钟门控、多阈值电压(multiple-Vt)、多电压供电、电源门控以及动态电压和频率缩放。Formality能够识别低功耗单元,例如隔离单元、电平转换器、始终开启单元、保持寄存器和电源门。 Formality支持…

微信小程序网格布局

效果图 实现 wxml <!-- 订单内容 --><view class"father"><!-- 订单item --><view class"childs" wx:for"{{List}}" wx:key"{{ index }}"></view></view> wxss .father{display: grid;grid-tem…

【二叉树】Leetcode 在每个树行中找最大值

题目讲解 515. 在每个树行中找最大值 算法讲解 这道题的重点在于怎么能够保存这一层的节点&#xff0c;并求出层节点的最大值&#xff1a;我们需要使用一个queue&#xff0c;每一次出队列的时候将当前队头结点的左右子树入队列&#xff08;这里就是将下一层的结点入队&#…

计算机Java项目|基于springboot的社区团购系统设计

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

vscode无法连接 , .vscode-server版本问题

vscode无法连接 &#xff0c; .vscode-server版本问题 解决办法 &#xff1a; 查看自己的版本号 2. 两边vscode版本号需要一致 找一台vscode可以远程连接的&#xff0c; 将它的.vscode-server/bin/b06ae3b2d2dbfe28bca3134cc6be65935cdfea6a 传到 远程服务器上 或者 本地的…

vue3组件插槽

Index.vue: <script setup> import { ref, onMounted } from vue import Child from ./Child.vue import ./index.cssonMounted(() > {}) </script><template><div class"m-home-wrap"><Child>插槽</Child><div class&qu…

1063 计算谱半径

solution 找出虚部和实部平方和的最大值&#xff0c;输出该最大值的开方&#xff0c;保留两位小数 #include<iostream> #include<cmath> using namespace std; int main(){int n, a, b, ans 0;scanf("%d", &n);while(n--){scanf("%d%d"…

安泰ATA-7050高压放大器应用领域:电流体动力喷墨打印技术!

柔性印刷电子器件性能强烈依赖于材料、线宽、以及工艺控制&#xff0c;实现高分辨率、高性能功能微纳结构的大面积、低成本、快速制造已经为柔性印刷电子产业化发展的基础性问题。与传统压电、热气泡等“挤”模式喷墨打印工艺不同&#xff0c;电流体喷墨打印&#xff08;Electr…

Unsupervised Image-to-Image Translation Networks

Unsupervised Image-to-Image Translation Networks 无监督图像到图像翻译网络 Ming-Yu Liu, Thomas Breuel, Jan Kautz 刘明玉&#xff0c;Thomas Breuel&#xff0c;Jan Kautz NVIDIA {mingyul,tbreuel,jkautz}nvidia.com NVIDIA {mingyul&#xff0c;tbreuel&#xff0c;j…

电动汽车与 PLM:下一代转型的结合

汽车电气化是汽车行业持续变革的驱动力&#xff0c;因此电动汽车 (EV) 行业成为当今最令人兴奋、最相关和最必要的创新领域之一。快速且有利可图地设计电动汽车及其零部件&#xff0c;同时使其受到消费者的青睐&#xff0c;是一项艰巨的挑战。因此&#xff0c;电动汽车行业企业…

想要成为项目经理?先掌握这24条职场生存法则!

以下是项目经理的24条职场经验&#xff0c;这些经验涵盖了项目管理的各个方面&#xff0c;希望能对项目经理或有意成为项目经理的人有所启发。 1、明确目标&#xff1a;项目成功的关键在于明确的目标。在项目启动之初&#xff0c;确保所有利益相关者对项目目标有清晰、共同的…

[Algorithm][递归][搜索][回溯]总体理解+ 算法总结 (极其干货哦~)

目录 0.观前必读1.递归1.什么是递归&#xff1f;2.为什么会用到递归&#xff1f;3.如何理解递归&#xff1f;4.如何写好一个递归&#xff1f; 2.概念乱斗:P1.深度优先遍历 vs 深度优先搜索 && 宽度优先遍历 vs 宽度优先搜索2.搜索 vs 暴搜3.拓展搜索问题 3.回溯与剪枝4…

PostgreSQL建表语句 INT, INT2, INT4, INT8 分别对应Java,Go, Python什么数据类型?

&#x1f42f; PostgreSQL建表语句 INT, INT2, INT4, INT8 分别对应Java&#xff0c;Go, Python什么数据类型 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题…

selenium进行xhs图片爬虫:06xhs一个博主的全部文章图片爬取

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…