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

一、 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 专注于处理动态资源,静态资源统一由静态资源服务器处理,从而提升整个服务系统的性能 。

在这里插入图片描述

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。

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。

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

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

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.mzph.cn/news/826982.shtml

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

相关文章

flutter 谷歌的苹果系统消息推送

flutter firebase 云消息通知教程 (android-安卓、ios-苹果) Android、ReactNative、Flutter集成Firebase推送注意事项 Android&#xff1a;Firebase 凭据 iOS&#xff1a;基于 p8 令牌的 APN 连接 iOS&#xff1a;p12 生成证书 Flutter之对接国外推送onesignal踩坑笔记&a…

0.C++入门(专栏前言)

目录 1.什么是C 2.C的发展史 3.C的重要性 应用&#xff1a; 4.如何学习C 5.关于本专栏 1.什么是C 20世纪80年代&#xff0c;计算机界提出oop(object oriented programming:面向对象&#xff09;思想&#xff0c;支持面向对象的程序设计应运而生。 1982年&#xff0c;本…

Java实现文件分片上传、大文件秒传

Java实现文件分片上传、大文件秒传&#xff0c;大文件如何做断点续传&#xff1f;JAVAWEB 文件上传及下载&#xff0c;JAVA大文件上传&#xff0c;大文件下载解决方案&#xff0c;JAVA实现文件分片上传并且断点续传&#xff0c;JAVA大文件分片上传/多线程上传功能&#xff0c;超…

JS-47-Node.js06-fs模块-读写文件

Node.js内置的fs模块就是文件系统模块&#xff0c;负责读写文件。 和所有其它JavaScript模块不同的是&#xff0c;fs模块同时提供了异步和同步的方法。 一、回顾&#xff1a;异步方法VS同步方法 1-1、异步方法 因为JavaScript的单线程模型&#xff0c;执行IO操作时&#xff…

STP学习的第一篇

1.STP的基本概念&#xff1a;根桥 &#xff08;1&#xff09;STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”&#xff08;STP树&#xff09;。 &#xff08;2&#xff09;根桥是一个STP交换网络中的“树根”。 &#xff08;3&#xff09;STP开始工作后&#xf…

【C++类和对象】初始化列表与隐式类型转换

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

《C语言深度解剖》(8):一篇文章彻底学会Visual Studio 调试技巧,新手必看!

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&am…

MySQL 基础语法(2)

文章目录 创建表查看表修改表表数据插入 本文为表结构相关的基础语言库相关的基础语句 创建表 CREATE TABLE table_name ( field1 datatype comment xxx, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;CREATE TABLE&#xff1…

NLP(2)--搭建简单的模型(nn)

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 可能使用到的包 可以通过Anaconda直接install&#xff0c;不行就PIP install xxx PythonTorchTransformersScikit-learnNumpyGensimPandas 我的版本&#xff1a; 可以用 conda list 查看 代码 如果有包导入不进来&…

如何搭建私域获取淘宝店铺卖家订单信息trade.fullinfo.get

私域流量主要由已经对企业或品牌感兴趣并进行关注的用户组成&#xff0c;这些用户对企业具有一定的忠诚度和粘性。通过与这些用户建立良好的互动和关系&#xff0c;企业可以进一步提升用户的忠诚度和转化率&#xff0c;从而有助于建立持续稳定的业务模式和盈利模式&#xff0c;…

【ARFoundation自学01】搭建AR框架+检测平面+点击克隆立方体到地面=自信入门!

介绍 AR 的功能其实是个大手机系统厂商和眼镜设备厂商开发的功能&#xff0c;并不是Unity的功能&#xff0c;毕竟Unity没有自己的手机设备&#xff01;比如谷歌公司的安卓开发了ARcore&#xff0c;让所有安卓8.0版本以上的用户能够在手机上体验AR功能&#xff01;苹果推出了AR…

2024红明谷杯——Misc 加密的流量

2024红明谷杯——Misc 加密的流量 写在前面&#xff1a; 这里是贝塔贝塔&#xff0c;照例来一段闲聊 打比赛但赛前一波三折&#xff0c;又是成功签到的一个比赛 说起来比赛全名叫红明谷卫星应用数据安全场景赛&#xff0c;但好像真的跟卫星的关系不大&#xff0c;没有bin方…

深入探索Python中的推导式:从列表到字典,全面解析数据结构的快速构建方法

文章目录 1. 列表推导式&#xff1a;快速构造列表1.1 基础用法1.2 条件筛选 2. 字典推导式&#xff1a;动态构建字典2.1 基础用法2.2 使用条件过滤 3. 集合推导式&#xff1a;有效去重与数据筛选3.1 基本语法与应用3.2 去重和转换3.2 使用条件过滤 4. 生成器推导式&#xff1a;…

基于CH32V103的多功能推杆设计

一、项目简介 “创意源于生活&#xff0c;工具始于懒惰。” 整体造型外观参考了最近比较火的夫妻游戏《双人成行》第一关里面那个吸尘器的推杆开关&#xff0c;结构中采用阻尼器/滚珠轴承等器件&#xff0c;使其非常具有质感和手感。功能上我构思不能只有电脑开关这么简单地一…

Jenkins CI/CD 持续集成专题三 Jenkins 使用shell脚本打包组件配置流程

第一步 新建任务 第二步 输入项目名称和选择自由风格的软件项目点击确定 第三步 配置下项目地址和账号密码 第四步 配置 build steps 选择 shell 脚本 第五步 shell 配置 &#xff08;注意shell 必须以#!/bin/sh开头&#xff0c;否则会报 找不到shell 命令的错&#xff09; …

【Web】DASCTF X CBCTF 2022九月挑战赛 题解

目录 dino3d Text Reverser cbshop zzz_again dino3d 进来是一个js小游戏 先随便玩一下&#xff0c;显示要玩够1000000分 直接console改分数会被检测 先是JSFinder扫一下&#xff0c;扫出了check.php 到js里关键词索引搜索check.php 搜索sn&#xff0c;发现传入的参数是…

3-羟基丙酸(3-HP)应用前景广阔 生物基3-羟基丙酸市场占比将不断提升

3-羟基丙酸&#xff08;3-HP&#xff09;应用前景广阔 生物基3-羟基丙酸市场占比将不断提升 合成技术是制约3-羟基丙酸规模化应用的重要因素。3-羟基丙酸合成技术包括化学合成法、生物合成法两大类&#xff0c;其中化学合成法是主流生产工艺&#xff0c;但化学合成法存在工艺复…

.netcore+vue新生分班系统的设计与实现

.netcore vue新生分班系统的设计与实现说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于.net core架构和mysql数据库vue 东北石油大学新生分班系统的设计与实现 功能模块&#xff1a; 登录 注册学生 忘记密码 系统首顶 个…

完成学校官网页面制作

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>教务系统</title> <style> .wap{ margin:0 auto; width:955px; } .top{ height:150px; padding-left:85px; …

DHCP服务器配置故障转移后显示红色箭头、与伙伴服务器失去联系的解决方案

一、遇到的故障现象&#xff1a; &#xff08;主DHCP服务器与备用DHCP服务器连通性正常&#xff0c;在故障转移选项卡上却显示与伙伴失去联系、伙伴关闭&#xff0c;且ipv4协议旁边显示一个红色的小箭头&#xff09;&#xff0c;正常情况下是绿色 &#xff08;一&#xff09;…