Nginx+Lua+OpenResty(详解及使用)

embedded/2024/9/25 21:29:06/

一、 Nginx简介

Nginx是一个高性能的Web服务器和反向代理的软件。 Web服务器:就是运行我们web服务的容器,提供web功能,还有tomcat也提供类似的功能。 代理是软件架构和网络设计中,非常重要的一个概念。

二、Nginx的反向代理(附加正向代理)

有两种代理:正向代理和反向代理。 首先,看一张关于正向代理和反向代理的图片

在这里插入图片描述

正向代理

正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。
在这里插入图片描述
使用场景

正向代理的典型用途是为防火墙内的局域网客户端提供访问服务器的途径,正向代理还可以使用缓冲特性减少网络利用率。

科学上网(翻墙)

有时候,用户想要访问某国外网站,该网站无法在国内直接访问,但是我们可以访问到一个代理服务器,这个代理服务器可以访问到这个国外网站。这样呢,用户对该国外网站的访问就需要通过代理服务器来转发请求,并且该代理服务器也会将请求的响应再返回给用户。这个上网的过程就是用到了正向代理。

在这里插入图片描述
用途

  • 突破访问显示:通过代理服务器,可以突破自身ip访问限制,访问国外网站等
  • 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度
  • 隐藏客户端真实ip:上网者可以通过正向代理的方法隐藏自己的ip,免受攻击

反向代理

概念
反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。

对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服务器一样发送请求就可以了,并且客户端不需要进行任何设置。

特点
正向代理需要配置代理服务器,而反向代理不需要做任何设置。
反向代理是代理服务器,为服务器收发请求,使真实服务器对客户端不可见。

在这里插入图片描述

使用场景
反向代理的典型用途是将防火墙外的服务器提供给客户端访问,反向代理还可以为后端的多台服务器提供负载均衡,或者为后端较慢的服务器提供缓冲服务。

在这里插入图片描述

用途

  • 隐藏服务器真实ip:使用反向代理,可以对客户端隐藏服务器的ip地址
  • 负载均衡:反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上
  • 提高访问速度:反向代理服务器可以对静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度
  • 提供安全保障:反向代理服务器可以作为应用层防火墙,为网站提供对基于web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等。还可以为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等。

三、Nginx的负载均衡

什么是负载均衡?

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。

Nginx给出来三种关于负载均衡的方式:

轮询法(默认方法):
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

轮询的访问,先访问8081,在访问8082

配置例子:

# server listupstream myServers {server localhost:8081;server localhost:8082;}server {listen 9002;server_name www.jowell.com;location / {proxy_pass http://myServers;}}

weight权重模式(加权轮询)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大

比如当前有两个线程正在访问8081,8082一个,那么下次来了线程就访问8082地址。

配置例子:

# server listupstream myServers {least_conn;server localhost:8081;server localhost:8082;}server {listen 9002;server_name www.jowell.com;location / {proxy_pass http://myServers;}}

ip_hash:
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

配置例子:

# server listupstream myServers {ip_hash;server localhost:8081;server localhost:8082;}server {listen 9002;server_name www.jowell.com;location / {proxy_pass http://myServers;}}

四、Nginx的使用

官网:https://nginx.org/

4.1、Linx安装

1、安装:yum

yum install yum-utils

2、切换目录 查看是否有 nginx.repo 文件

cd /etc/yum.repos.d/

3、创建文件

vim nginx.repo

文件内容

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

4、Nginx的安装

yum install nginx

在这里插入图片描述

5、启动验证

进入到 /usr/sbin 目录

cd /usr/sbin/

启动命令

./nginx

验证nginx本机访问是否成功

curl localhost:80

如果出现:Welcome to nginx!,证明nginx启动成功。

6、 检查防火墙:

systemctl status firewalld

关闭防火墙

 systemctl stop firewalld

这样,在宿主机的浏览器中就可以访问了。

7、访问
在这里插入图片描述
到此nginx安装成功。

4.2、Nginx常用命令

查看nginx版本号:

nginx -v

启动Nginx命令1:

nginx

启动Nginx命令2:

systemctl start nginx

查看正在进行中Nginx的信息

ps -ax | grep nginx

关闭Nginx命令:

nginx -s stop

根据进程PID关闭

kill -s QUIT 895246

优雅的停止nginx

nginx -s quit

重新加载配置:

nginx -s reload

4.3 反向代理使用(单台机器)

1、启动一个 tomcat,浏览器地址栏输入 127.0.0.1:8080,出现如下界面

在这里插入图片描述

2、通过修改本地 host 文件,将 www.jowell.com 映射到 127.0.0.1
在这里插入图片描述
在这里插入图片描述
3、在 nginx.conf 配置文件中增加如下配置:

1     server {
2         listen       80;
3         server_name  www.jowell.com;
4 
5         location / {
6             proxy_pass http://127.0.0.1:8080;
7         }
8     }

如上配置,我们监听80端口,访问域名为www.jowell.com,不加端口号时默认为80端口,访问域名时会跳转到127.0.0.1:8080路径上

4.4 负载均衡

4.1 简介

通俗:将负载变的均衡。

负载(请求、工作任务)、均衡(算法 ,中间件)。

负载均衡的主要作用如下:

高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。

伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。

高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。

安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。

4.2 实验

目的
1。通过浏览器多次访问一个地址(http://www.jowell.com)。
2。nginx接受上面的请求,并进行转发。
3。那么每个请求的响应,是来自于不同的tomcat提供的。(2台tomcat,端口:8081,8082)。
两台tomcat,不同的响应内容:“8081”和“8082”。

步骤:
1。准备2个tomcat,端口分别8081、8082,并做好响应的页面,启动,测试。

2。配置nginx.conf。

    upstream myServers {    server localhost:8081;server localhost:8082;}  server {listen 9002;server_name www.jowell.com;location / {proxy_pass http://myServers;}}

在这里插入图片描述
保存后重新加载配置:

nginx -s reload

测试:
浏览器多次请求请求:http://www.jowell.com

在这里插入图片描述
在这里插入图片描述
上面的例子没写负载均衡算法和权重,那么默认就是轮询算法。

其它算法可自行测试。

4.5 动静分离

4.5.1 介绍

动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。

nginx 的动静分离,指的是由 nginx 将客户端请求进行分类转发,静态资源请求(如html、css、图片等)由静态资源服务器处理,动态资源请求(如 jsp页面、servlet程序等)由 tomcat 服务器处理,tomcat 本身是用来处理动态资源的,同时 tomcat 也能处理静态资源,但是 tomcat 本身处理静态资源的效率并不高,而且还会带来额外的资源开销。利用 nginx 实现动静分离的架构,能够让 tomcat 专注于处理动态资源,静态资源统一由静态资源服务器处理,从而提升整个服务系统的性能 。

在这里插入图片描述

nginx_362">4.5.2 使用nginx实现动静分离

准备静态资源

创建两个目录:

  • /data/www/*.html
  • /data/images/*.png

在这里插入图片描述

配置Nginx.conf server

    server {listen 9003;server_name www.zxczxc.com;location / {root /data/www;}location /images/ {root /data;}}

访问:www.zxczxc.com/index.html 转换成:/data/www/index.html

访问:www.zxczxc.com/images/cap.png 转换成:/data/images/cap.png

测试:
在这里插入图片描述
访问

通过url去匹配静态资源即可。静态:static。

nginx_397">4.6 nginx实现高可用

保证高可用:集群化、冗余。
核心:冗余。自动故障转移。

1、Nginx高可用组成

在这里插入图片描述

2、准备两台服务器
在这里插入图片描述

3、两台服务器安装nginx,以及下面文件
在这里插入图片描述
结构:
在这里插入图片描述
index.html内容:
在这里插入图片描述
另一台同理。

测试访问主节点16服务器:
在这里插入图片描述

4.6.1、安装keepalived

1、keepalived简介

keepalived起初是为LVS设计的专门用来监控集群系统中各个服务节点的状态如果某个服务节点出现异常或者工作出现故障,keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将该服务节点重新加入集群中,这些工作全部自动完成。这部分功能类似于nginx 等反向代理的应用探活功能实现后端服务高可用。

后来又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol),虚拟路由协议出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也有HA cluster功能;这个功能实现各种中间件高可用。

2、keeplived 实现高可用示意图:
在这里插入图片描述

3、安装命令:

yum install keepalived

在这里插入图片描述

两台服务器都安装

4、keepalived配置及启动
配置ip
要先查看一下自己当前的ip
在这里插入图片描述

配置文件位置

vim /etc/keepalived/keepalived.conf

如下配置是配置nginx挂了,但是服务器没挂的情况

track_script {check_nginx
}vrrp_script check_nginx {script "/usr/local/bin/check_nginx.sh"interval 2 #每隔2秒运行一次weight 10 # 运行成功 权重加10
}

在这里插入图片描述

设置检测脚本

​​​vim /etc/nginx/checkNginx.sh
#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y-%m-%d_%H:%M:%S`#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
if [ $n -eq "0" ]; then
/usr/sbin/nginx -c /etc/nginx/nginx.conf
sleep 3
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "$d nginx down,keepalived will stop" >> /var/log/check_nginx.log
systemctl stop keepalived
fi
fi

设置脚本执行权限

​​​chmod 755 /etc/nginx/checkNginx.sh

启动keepalived服务

必须先停止 selinux
如果不关闭是无法执行检测脚本的

临时关闭

setenforce 0

重启后永久生效

sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config

设置开机自启

chkconfig keepalived on

启动keepalived

systemctl start  keepalived

查看状态

systemctl status  keepalived

两台主机配置文件
主:

! Configuration File for keepalivedglobal_defs {
}vrrp_instance VI {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.200.16}track_script {check_nginx}
}vrrp_script check_nginx {script "/etc/nginx/checkNginx.sh"interval 2 #每隔2秒运行一次weight 10 # 运行成功 权重加10
}}

从:

! Configuration File for keepalived
global_defs {
}
vrrp_instance VI {state BACKUPinterface eth0virtual_router_id 51priority 20advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.200.16}track_script {check_nginx}
}vrrp_script check_nginx {script "/etc/nginx/checkNginx.sh"interval 2 #每隔2秒运行一次weight 10 # 运行成功 权重加10
}}

4.6.2 keepalived配置文件讲解

1、全局配置

global_defs {notification_email {      #邮箱服务器,一般公司内也不设置acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL          #标识这台机器ID,默认情况下是主机名,可以配置成主机名vrrp_skip_check_adv_addr     #所有报文都检查比较消耗性能,此配置为如果收到的报文和上一个报文是同一个路由器则跳过检查报文中的源地址vrrp_strict                  #严格遵守VRRP协议,不允许状况:1,没有VIP地址,2.配置了单播邻居,3.VRRP版本2中有IPv6地址vrrp_garp_interval 0         #ARP报文发送延迟vrrp_gna_interval 0          #消息发送延迟#vrrp_mcast_group4 224.0.0.18 #指定组播IP地址,默认值:224.0.0.18 范围:224.0.0.0239.255.255.255#vrrp_iptables                #避免生成iptables input链 规则,sip any 拒绝 dip any
}

2、VRRP配置

vrrp_instance VI_1 {      #虚拟路由器名称,在一个keepalived可以启多个虚拟路由器,每个虚拟路由器的名字都不一样state MASTER          #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP,一般都是配置backup,该值无法决定身份,最终还是通过比较priorityinterface eth0        #绑定为当前虚拟路由器使用的物理接口,如:ens32,eth0,bond0,br0virtual_router_id 51  #每个虚拟路由器惟一标识,范围:0-255,同一组虚拟路由器的vrid必须一致priority 100          #当前物理节点在此虚拟路由器的优先级,范围:1-254,每个keepalived主机节点此值不同advert_int 1          #vrrp通告的时间间隔,默认1sauthentication {      #认证机制 auth_type PASS    #AH(不推荐)或PASSauth_pass 1111    #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样}virtual_ipaddress {                      #虚拟IP10.0.0.100                           #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认为/3210.0.0.101/24 dev eth1               #指定VIP的网卡10.0.0.102/24 dev eth2 label eth2:1  #指定VIP的网卡label}}

修改完文件后,重新启动。

4.6.3、测试

在这里插入图片描述
访问的是10.0.2.16服务器,也就是主节点.

把主节点服务器停掉继续访问

在这里插入图片描述
访问的是从节点。

总结来说,当用户访问Keepalived管理的虚拟IP时,实际上是访问到了承载VIP的主节点上的Nginx服务器,Nginx再根据其配置将请求透明地转发给后端真实服务器进行处理,从而实现了负载均衡和服务高可用。

五、Lua

1、介绍

lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

设计的目的:嵌入到应用程序当中,提供灵活的扩展和定制化的功能。
在这里插入图片描述

2、LUA基本语法

①、Lua 保留字(关键字)
and、 break、 do、 else、 elseif、 end、 false、 for、 function、 if、 in、 local、 nil、 not、 or、 return、 then、 true、( repeat、 until)、 while 注: Lua中没有continue

②、Lua符号
算术运算符 + -*/% ^ 求幂 - 取反
关系运算符 == ~= < > <= >=
逻辑运算符 and or not
其他运算符 … #
其他符号 … 不定参数 . :

③、Lua 类型
1、nil 空类型
类似 C++中的nullptr_t
2、boolean 只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是 “假”,其他的都为“真”
3、number 默认只有一种 number 类型 – double(双精度)类型
4、string 字符串由一对双引号或单引号来表示
5、*table Lua 中的表(table)其实是一个“关联数组”(associative arrays),数组的 索引可以是数字或者是字符串
6、function 函数类型 函数可以存在变量里
7、thread 在 Lua 里,最主要的线程是协同程序。它跟线程差不多,拥有自己独立的栈、 局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
8、userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的 类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中 调用

3、 安装

检查机器上是否有lua

lua

打开官网:http://lua.org
在这里插入图片描述
在这里插入图片描述

curl -L -R -O https://www.lua.org/ftp/lua-5.4.6.tar.gz
tar zxf lua-5.4.6.tar.gz
cd lua-5.4.6
make all test
make install

查看版本

lua -v

在这里插入图片描述

六、OpenResty

1、介绍

  • 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 等都进行一致的高性能响应。

官网:http://openresty.org/en/

2、OpenResty安装

安装wget

yum install wget

下载资源库

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

安装OpenResty

yum install openresty

启动OpenResty

cd /usr/local/openresty/nginx/sbin

在这里插入图片描述

./nginx

查看是否启动

ps -ef | grep nginx

在这里插入图片描述

访问

ip地址:80

查看是否启动

3、OpenResty+redis的案例

redis自行安装

进入到配置文件

cd /usr/local/openresty/nginx/conf

在这里插入图片描述
修改配置文件

vim nginx.conf

worker_processes  1;events {worker_connections  1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name www.jowell.com;root html;index index.html;charset utf-8;location / {default_type text/plain;set $redis_key "jowell";		# redis的keyredis_pass 127.0.0.1:6379;		#redis地址error_page 404 = @fetch;}location @fetch {root html;}}}

重新加载配置

./nginx -s reload

在这里插入图片描述

创建html测试:
在这里插入图片描述
访问
在这里插入图片描述
因为redis没设置值,所以正常访问。
redis设置jowell的key
在这里插入图片描述

再次访问
在这里插入图片描述

这个可以用nginx做限流,比如服务端达到一定访问量,往nginx配置好的key设置值,然后用户到达nginx就限流了,就访问不了服务。当下降到一定访问量的时候,清楚redis的key。

openrestyluaredis_854">4、openresty-lua-redis案例

1、新建lua文件

cd /usr/local/openresty/nginx
mkdir lua
cd lua

在这里插入图片描述
2、编写lua

-- 引用resty的redis
local redis = require "resty.redis";
local red = redis:new();
-- 连接redis
local ok,err = red:connect("127.0.0.1",6379);-- 判断连接是否正常
if not ok thenngx.say("faild to connect",err);return
end-- 判断设置key是否正常
ok,err = red:set("dKey","dValue");
if not ok thenngx.say("failed to set dKey",err);return
end-- 设置成功
ngx.say("dKey set dValue success")
return

3、进入到conf目录

/usr/local/openresty/nginx/conf

4、新建nginx配置文件:nginx-openresty-lua-redis.conf

vim nginx-openresty-lua-redis.conf

5、配置文件

worker_processes  1;
error_log logs/error_log;events {worker_connections  1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;#如下地址可以看成把lua里的内容,当成配置文件内容的一种配置。location / {default_type text/html;content_by_lua_file /usr/local/openresty/nginx/lua/lua-openresty-redis.lua;}}
}

7、测试
此时redis空值
在这里插入图片描述

访问

ip地址:80

在这里插入图片描述
在这里插入图片描述

nginxluaredis_953">5、nginx+lua+redis限流实战

新建配置文件:
在这里插入图片描述
ip-limit-log.lua文件内容:

ngx.log(ngx.INFO,"ip limit log");

ip-limit-access.lua 文件内容

ngx.log(ngx.INFO,"ip limit access");
local redis = require "resty.redis";
local red = redis:new();
--链接redis
red:connect("127.0.0.1",6379);
-- 需要写链接成功的判断。
--判断是否限流
limit = red:get("limit");
if limit == '1' thenreturn ngx.exit(503);
end
inc = red:incr("testLimit");
if inc <= 2 thenred:expire("testLimit",1);
elsered:set("limit",1);red:expire("limit",10);
end

新建nginx配置文件

cd /usr/local/openresty/nginx/conf
mkdire nginx-ip-limit.conf

在这里插入图片描述
文件内容


worker_processes  1;
error_log logs/error.log debug;events {worker_connections  1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;location / {default_type text/html;access_by_lua_file /usr/local/openresty/nginx/lua/ip-limit-access.lua;log_by_lua_file /usr/local/openresty/nginx/lua/ip-limit-log.lua;proxy_pass http://localhost:8081/;		#这里我的tomcat地址,模拟转发请求}}}

重启nginx

当前我的目录
在这里插入图片描述
重启

./nginx -p ../../nginx/ -c /usr/local/openresty/nginx/conf/nginx-ip-limit.conf

测试访问

ip:地址:80

各一秒正常访问
在这里插入图片描述
快速请求,此时限流了
在这里插入图片描述


http://www.ppmy.cn/embedded/22994.html

相关文章

Java安全之Mojarra JSF反序列化

JavaServer Faces&#xff0c;新一代的Java Web应用技术标准&#xff0c;吸收了很多Java Servlet以及其他的Web应用框架的特性。JSF为Web应用开发定义了一个事件驱动的、基于组件的模型。 其中常用的是Sun&#xff08;现在的Oracle&#xff09;发布的Mojarra和Apache发布的MyF…

【紫光同创盘古PGX-Nano教程】——(盘古PGX-Nano开发板/PG2L50H_MBG324第三章)键控流水灯实验例程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;www.meyesemi.com) 适用于板卡型号&#xff1a; 紫光同创PG2L50H_MBG324开发平台&#xff08;盘古PGX-Nano&#xff09; 一&#xff1a;…

【stomp 实战】spring websocket源码分析之握手请求的处理

上一节【搭建一套websocket推送平台】我们通过一个项目&#xff0c;实现了一套推送平台。由于spring框架对于websocket的支持和stomp协议的良好封装&#xff0c;我们很容易地就实现了websocket的消息推送功能。虽然搭建这么一套推送系统不难&#xff0c;但是如果不了解其底层原…

黄金现货交易与其他投资方式的比较分析

在多元化投资领域中&#xff0c;黄金现货交易因其独特的特性而受到投资者的青睐。然而&#xff0c;理解黄金现货交易相较于其他投资方式的优势与不足是至关重要的。本文将进行黄金现货交易与其他投资方式的比较分析&#xff0c;帮助投资者更好地制定投资策略。 相比于黄金期货和…

el-tree 或 el-tree-select 根据条件,控制节点的显示隐藏

目录 情况概述方案&#xff1a;render-content&#xff08;树节点的内容区的渲染 Function&#xff09;代码如下 情况概述 要求el-tree-select 中的节点 根据节点状态来进行显示隐藏&#xff08;状态字段为status&#xff0c;显示&#xff1a;‘1’&#xff0c;隐藏&#xff1…

【QT】ROS2 Humble联合使用QT教程

【QT】ROS2 Humble联合使用QT教程 文章目录 【QT】ROS2 Humble联合使用QT教程1. 安装ROSProjectManager插件2. 创建ROS项目3.一个快速体验的demoReference 环境的具体信息如下&#xff1a; ubunt 22.04ros2 humbleQt Creator 13.0.0ROS ProjectManager 13.0.0 本文建立在已经…

【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)

文章目录 队列Queue逻辑结构物理&#xff08;存储&#xff09;结构基本操作1.顺序队列&#xff08;循环队列&#xff09;1.1初始化1.2判空&判满1.2.1判空1.2.2判满方案一方案二方案三 1.3入队循环队列 1.4出队1.5获取队头元素1.6获取队列元素个数❗1.7循环队列c实例 队列Qu…

debian和ubuntu的核心系统和系统命令的区别

Debian和Ubuntu虽然有很深的渊源&#xff0c;都是基于Debian的发行版&#xff0c;但它们在核心系统和系统命令上还是有一些差别的。以下是一些主要的不同之处&#xff1a; 1. 发布周期&#xff1a; - Debian&#xff1a; Debian项目采用滚动发布模型&#xff0c;持续更新&a…