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

目录

一、实验

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.html2)安装
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" thenreturn ngx.redirect("http://maojing.site")elseif args["jump"] == "2" thenreturn 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" thenreturn ngx.redirect("http://maojing.site")elseif args["jump"] == "2" thenreturn 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] thenreturn 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] thenreturn 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 thenreturn ngx.exit(301)
endlocal ip=ngx.var.remote_addrlocal exists,err=red:sismember("black_list",ip)if exists ==1 thenreturn 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] thenreturn 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.bklistlocal ip=ngx.var.remote_addrif bklist:get(ip) thenreturn ngx.exit(403)
end

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

cd app/
vim init_worker.lua

-- 只需要一个进程拉取数据即可。
if ngx.worker.id() ~=0 thenreturn
end-- 获取共享内存
local bklist =ngx.shared.bklistlocal 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 thenreturnendlocal black_list,err=red:smembers("black_list")bklist:flush_all()for _, v in pairs(black_list) dobklist:set(v,true);endngx.timer.at(5,update_blacklist)
endngx.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.conf2) 优雅退出
openresty -p . -s quit3) 重启 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.hqwc.cn/news/698262.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置 kafka offset 消费者位移

文章目录 1.重设kafka消费者位移2.示例2.1 通过 offset 位置2.2 通过时间2.3 设置到最早 1.重设kafka消费者位移 维度策略含义位移Earliest把位移调整到当前最早位移处位移Latest把位移调整到当前最新位移处位移Current把位移调整到当前最新提交位移处位移Specified-Offset把位…

AI地名故事:长洲村

长洲村,位于广州市黄埔区长洲街道,坐落在广州东部的长洲岛、洪圣沙、白兔沙、大吉沙。这个地方自古以来就是扼守广州海上大门的咽喉要塞,地理位置十分重要。 关于长洲村的由来,要追溯到南宋时期。南宋景定三年(1262年…

【小积累】@Qualifier注解

今天在看rabbitMQ的时候需要绑定交换机和队列,交换机和队列都已经注入到spring容器中,写了一个配置类,使用了bean注解注入的。所以这时候绑定的时候需要使用容器中的交换机和队列,必须要使用Qualifier去确定是容器中的哪个bean对象…

十一、 进行个人信息保护认证的流程是怎样的?

2022 年 11 月 18 日,国家市场监督管理总局和国家网信办发布的《认证公告》以及附件《认证规则》,对开展个人信息保护认证的流程进行了细节说明,包括认证委托、技术验证、现场审核、认证结果评价和批准等环节。《认证公告》指出“从事个人信息…

Mamba:4 魔幻矩阵A

若在阅读过程中有些知识点存在盲区,可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计。技术宅麻烦死磕LLM背后的基础模型。 ​Mamba自从出道就一直被拿来和Transformer对比…

基于.NET的跨平台应用程序框架介绍

基于.NET的跨平台应用程序框架介绍 随着.NET 8的发布,我也将我的书.NET MAUI Cross-Platform Application Development更新到了第二版,已经在3月25日开始正式发行。第一版是基于.NET 6编写的,第二版更新到了 .NET 8。这是一本介绍.NET MAUI的…

AR项目开发的技术难点

AR项目开发涉及多种技术,例如计算机视觉、图形学、传感器融合和人机交互。因此,AR项目开发存在以下难点,AR项目开发是一项具有挑战性的工作。但是,随着技术的进步和标准的完善,AR项目开发将会变得更加容易。北京木奇移…

计算机毕业设计 | springboot+vue电影院会员管理系统 影院后台管理(附源码)

1,项目背景 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的电影院会员管理系统;电影院会员管理系统的管理工作系统化、规范化,也会提高影院形象…

浅谈SiC MOSFET之双脉冲原理

1.双脉冲实验实验的必要性 在平常的使用中,我们基本通过芯片手册来了解功率器件的各种性能参数,但是手册中的参数的测量环境都是在理想状态下,与实际使用或多或少都会有差别。通过双脉冲实验可以获取器件在真实工况下的参数,对于产…

Pikachu 靶场 SQL 注入通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台,用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境,供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术,…

对博客系统基本功能进行自动化测试(Junit + Selenium)

环境搭建&#xff1a; 浏览器&#xff1a; 本次测试使用Chrome浏览器在jdk的bin目录下安装对应浏览器驱动&#xff08;尽量选择与浏览器版本相近的驱动&#xff09;chromedriver.storage.googleapis.com/index.htmlJunit依赖&#xff1a; <!-- https://mvnreposit…

不同品牌的SSL证书价格差异大吗?

在数字化时代&#xff0c;网络安全的重要性日益凸显&#xff0c;SSL证书作为保护网站和用户数据安全的重要工具&#xff0c;其价值不言而喻。SSL证书通过加密技术保障网站与用户之间的通信安全&#xff0c;防止敏感信息的泄露和篡改。对于网站运营者而言&#xff0c;了解SSL证书…