IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 137.Nginx(六):负载均衡,缓存 -> 正文阅读

[PHP知识库]137.Nginx(六):负载均衡,缓存

目录

一、负载均衡

1.负载均衡原理及处理流程

2.负载均衡的作用

3.负载均衡常用的处理方式

二、Nginx七层负载均衡

1.upstream指令

2.server指令

3.七层负载均衡的实现流程

4.实例

5.负载均衡状态

?(1)down

(2)backup

?(3)max_fails

(4)max_fails和fail_timeout

6.负载均衡策略

(1)轮询

(2)weight加权(加权轮询)

(3)ip_hash

?(4)least_conn

(5)url_hash

(6)fair

7.七层负载均衡案例

三、nginx四层负载均衡

1.添加stream模块的支持

2.stream指令

3.upstream指令

4.四层负载均衡案例

四、nginx的缓存集成相关概念

1.缓存的概念

2.缓存优缺点

3.nginx缓存服务器原理

五、nginx缓存集成的相关指令

1.proxy_cache_path指令

2.proxy_cache指令

3.proxy_cache_key指令

4.proxy_cache_valid指令

5.proxy_cache_min_uses指令

6.proxy_cache_methods指令

六、nginx缓存案例

七、nginx缓存的清除

八、nginx设置资源不缓存

1.proxy_no_cache指令

2.proxy_cache_bypass指令

3.实例

九、打赏请求


一、负载均衡

1.负载均衡原理及处理流程

系统的扩展可以分为纵向扩展横向扩展

  • 纵向扩展是从单机的角度出发,通过增加系统的硬件处理能力来提升服务器的处理能力。
  • 横向扩展是通过添加机器来满足大型网站服务的处理能力。

应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理并返回响应的数据。
负载均衡器:将用户访问的请求根据对应的负载均衡算法,分发到集群中的一台服务器进行处理

2.负载均衡的作用

  • 解决服务器的高并发压力,提高应用程序的处理性能。
  • 提供故障转移,实现高可用。
  • 通过添加或减少服务器数量,增强网站的可扩展性。
  • 在负载均衡器上进行过滤,可以提高系统的安全性。

3.负载均衡常用的处理方式

方式一:用户手动选择

这种方式比较原始,只要实现的方式就是在网站主页上面提供不同线路、不同服务器链接方式,让用户来选择自己访问的具体服务器,来实现负载均衡

方式二:DNS轮询方式

DNS:域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换。

大多域名注册商都支持对同一个主机名添加多条A记录(一个域名绑定多个ip),这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就能完成简单的负载均衡。DNS轮询的成本非常低,在一些不重要的服务器,被经常使用。

注:如果你一个域名绑定多个,当你本地ping的时候发现并没有轮询,可能是因为缓存的原因。尝试清空缓存

ipconfig/flushdns

DNS轮询的缺点

(1)可靠性低

如果一个ip宕机,所有轮询到这个ip的请求均失败

(2)负载均衡不均衡

上面说了,本地会缓存ip,即每次都会先去查询缓存,需要清空缓存才会轮询

方式三:四/七层负载均衡

介绍四/七层负载均衡之前,我们先了解一个概念,OSI(open systeminterconnection),叫开放式系统互联模型,这个是由国际标准化组织ISO指定的一个不基于具体机型、操作系统或公司的网络体系结构。该模型将网络通信的工作分为七层。

应用层:为应用程序提供网络服务。
表示层:对数据进行格式化、编码、加密、压缩等操作。
会话层:建立、维护、管理会话连接。
传输层:建立、维护、管理端到端的连接,常见的有TCP/UDP。
网络层:IP寻址和路由选择
数据链路层:控制网络层与物理层之间的通信。
物理层:比特流传输。

所谓四层负载均衡指的是OSI七层模型中的传输层,主要是基于IP+PORT的负载均衡:

#硬件价格贵,性能好
硬件:F5 BIG-IP、Radware等 

#软件相反
软件:LVS、Nginx、Hayproxy等

所谓的七层负载均衡指的是在应用层,主要是基于虚拟的URL或主机IP的负载均衡:

软件:Nginx、Hayproxy等

四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。 四层负载均衡不识别域名,而七层负载均衡识别域名。

处理四层和七层负载以为其实还有二层、三层负载均衡,二层是在数据链路层基于mac地址来实现负载均衡,三层是在网络层一般采用虚拟IP地址的方式实现负载均衡。.

实际环境采用的模式:

四层负载(LVS)+七层负载(Nginx)

二、Nginx七层负载均衡

Nginx要实现七层负载均衡需要用到proxy_pass代理模块配置。Nginx默认安装支持这个模块,我们不需要再做任何处理。

?Nginx的负载均衡是在Nginx的反向代理基础上把用户的请求根据指定的算法分发到一组【upstream虚拟服务池】。

1.upstream指令

upstream:该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重,默认为1

#语法
upstream name {...}

#位置
http

2.server指令

server:该指令用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者unix socket

#语法
server name [paramerters]

#位置
upstream

3.七层负载均衡的实现流程

4.实例

先在192.168.230.133中定义一个backend组,然后反向代理到134:

134中配置如下:

访问192.168.230.133:8083会看到轮询134的9001,9002,9003

5.负载均衡状态

状态概述
down当前的server暂时不参与负载均衡
backup预留的备份服务器
max_fails允许请求失败的次数
fail_timeout经过max_fails失败后, 服务暂停时间
max_conns限制最大的接收连接数

?(1)down

该状态一般会对需要停机维护的服务器进行设置。

9001不参与负载均衡:

但是测试的时候,我们用谷歌浏览器,都是9003,这其实是浏览器问题。我们通过cmd进行测试:

(2)backup

backup:将该服务器标记为备份服务器,当主服务器不可用时,将用来传递请求。

实例:我们将9002设为备份:

我们通过防火墙禁止134上的9003访问:

打开防火墙,然后禁止9003,这个时候会使用9002。当我们恢复9003,则又会继续使用9003

?(3)max_fails

max_conns=number:用来设置代理服务器同时活动链接的最大数量,默认为0,表示不限制,使用该配置可以根据后端服务器处理请求的并发量来进行设置,防止后端服务器被压垮。

(4)max_fails和fail_timeout

max_fails=number:设置允许请求代理服务器失败的次数,默认为1。
fail_timeout=time:设置经过max_fails失败后,服务暂停的时间,默认是10秒。

实例:

9003最多失败3次,如果失败3次之后15秒内暂时服务。就算15秒内9003恢复,我们还是会继续访问到9002:

?

6.负载均衡策略

介绍完Nginx负载均衡的相关指令后,我们已经能实现将用户的请求分发到不同的服务器上,那么除了采用默认的分配方式以外,我们还能采用什么样的负载算法:

算法名称说明
轮询默认方式
weight权重方式
ip_hash依据ip分配方式
least_conn依据最少连接方式
url_hash依据URL分配方式
fair依据响应时间方式

(1)轮询

是upstream模块负载均衡默认的策略。每个请求会按时间顺序逐个分配到不同的后端服务器。轮询不需要额外的配置(上述已经演示)

(2)weight加权(加权轮询)

轮询其实是特殊的加权轮询,默认每个weight=1。我们也可以手动设置对应的weight。

weight=number:用来设置服务器的权重,默认为1,权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,所有此策略比较适合服务器的硬件配置差别比较大的情况。

?

测试:先把防火墙关了,然后在ie测试:

会发现跳9001的概率最大

(3)ip_hash

解决session不共享的问题:用户登录第一次转到服务器1,session会在服务器1存储。如果下一次去了服务器2,因为服务器2没有本地存储session,会让用户重新登录,这很不合理。所以我们需要每次都让同一个用户跳转到同一个服务器。

缺点:无法保证负载均衡,有的服务器压力很大有的很小,而且配置了ip_hash后,加权也就不管用了。

针对缺点的解决思路:session不放在服务器本地,而是放在一个redis里面。

测试:第一次得到一个ip,后面都会是这个ip

?(4)least_conn

最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

适用情况:此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

?使用场景:当服务器A处理很慢,而服务器B很快,同样的任务A越积越多,B则空转。因此我们希望让B多处理一些替A分担。

(5)url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。

?使用场景:需要下载大文件,我们希望尽量在一台机器,因为下载过一次可以使用缓存。

实例:如果你的url不变,那么对应的hash值就不会变,就会跳到同一个url

?

(6)fair

首先声明,nginx自生不支持fair,需要引入第三方。

fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。那么如何使用第三方模块的fair负载均衡策略。

实现fair步骤:

*1)去https://github.com/gnosek/nginx-upstream-fair下载

?*2)上传

我们新建一个module目录,然后传过去:?

*3)解压并重命名
打开133,服务器:
#解压
cd /usr/local/nginx/module/
unzip nginx-upstream-fair-master.zip

#重命名
mv nginx-upstream-fair-master fair

*4)编辑ngx_http_upstream.h

#编辑ngx_http_upstream.h
cd /usr/local/nginx/core/nginx-1.16.1/src/http/
vim ngx_http_upstream.h

########################################################
#通过/ngx_http_upstream_srv_conf_s快速查找,然后添加如下
    in_port_t                        default_port;
########################################################

查找的时候通过/

*5)nginx添加模块

#找出之前的配置
cd /usr/local/nginx/sbin/
./nginx -V

#进入安装目录
cd /usr/local/nginx/core/nginx-1.16.1/

#复制配置,并在后面添加--add-module=/usr/local/nginx/module/fair,以我的电脑为例
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --modules-path=/usr/local/nginx/modules --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/logs/nginx.pid --lock-path=/usr/local/nginx/logs/nginx.lock --with-http_gzip_static_module --with-http_ssl_module --add-module=/usr/local/nginx/module/fair

#编译
make

#备份之前的旧文件
cd /usr/local/nginx/sbin/
mv nginx nginxold

#拷贝新的nginx文件
cd /usr/local/nginx/core/nginx-1.16.1/objs/
cp nginx /usr/local/nginx/sbin/

#不停机热启动
cd ../
make upgrade



7.七层负载均衡案例

(1)案例一:对所有请求实现一般轮询规则的负载均衡

upstream backend{ 
	server 192.168.200.146:9001; 
	server 192.168.200.146:9002; 
	server 192.168.200.146:9003; 
}

server { 
	listen 8083; 
	server_name localhost; 
	location /{ 
		proxy_pass http://backend; 
	}
}

(2)案例二:对所有请求实现加权轮询规则的负载均衡

基本同上,加了一个权重。上述其实也有权重,只是都是默认1。

upstream backend{ 
	server 192.168.200.146:9001 weight=7; 
	server 192.168.200.146:9002 weight=5; 
	server 192.168.200.146:9003 weight=3; 
}

server { 
	listen 8083; 
	server_name localhost; 
	location /{ 
		proxy_pass http://backend; 
	}
}

(3)案例三:对特定资源实现负载均衡

upstream videobackend{ 
	server 192.168.200.146:9001;
	server 192.168.200.146:9002; 
}

upstream filebackend{ 
	server 192.168.200.146:9003; 
	server 192.168.200.146:9004; 
}

server { 
	listen 8084; 
	server_name localhost; 
	location /video/ {
		proxy_pass http://videobackend;
	}
	location /file/ { 
		proxy_pass http://filebackend; 
	} 
}

(4)案例四:对不同域名实现负载均衡

upstream abbackend{ 
	server 192.168.200.146:9001;
	server 192.168.200.146:9002; 
}

upstream cdbackend{ 
	server 192.168.200.146:9003; 
	server 192.168.200.146:9004; 
}

server { 
	listen 8084; 
	server_name www.ab.com; 
	location / {
		proxy_pass http://abbackend;
	}
}

server { 
	listen 8085; 
	server_name www.cd.com; 
	location / {
		proxy_pass http://cdbackend;
	}
}

(5)案例五:实现带有URL重写的负载均衡

upstream backend{ 
	server 192.168.200.146:9001; 
	server 192.168.200.146:9002; 
	server 192.168.200.146:9003; 
}

server { 
	listen 80; 
	server_name localhost; 
	location /file/ { 
		rewrite ^(/file/.*) /server/$1 last; 
	}
	location /server { 
		proxy_pass http://backend;
	}
}

三、nginx四层负载均衡

Nginx在1.9之后,增加了一个stream模块,用来实现四层协议的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡

四层协议负载均衡的实现,一般都会用到LVS、HAProxy、F5等,要么很贵要么配置很麻烦,而Nginx的配置相对来说更简单,更能快速完成工作

1.添加stream模块的支持

#复制已有配置
cd /usr/local/nginx/core/nginx-1.16.1/
nginx -V

#在配置后面添加--with-stream
#以我的电脑为例
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --modules-path=/usr/local/nginx/modules --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/logs/nginx.pid --lock-path=/usr/local/nginx/logs/nginx.lock --with-http_gzip_static_module --with-http_ssl_module --with-stream


#编译
make
#注意:也可以直接make && make install,但是这样不会平滑升级,需要重启

#备份原有nginx
cd /usr/local/nginx/sbin/
mv nginx nginxold

#复制新的nginx
cd  /usr/local/nginx/core/nginx-1.16.1/objs/
cp nginx /usr/local/nginx/sbin/

#平滑升级
cd ../
make upgrade

2.stream指令

stream:该指令提供在其中指定流服务器指令的配置文件上下文。和http指令同级。

#语法
stream { ... }

#位置
main

3.upstream指令

upstream:该指令和http的upstream指令是类似的。

4.四层负载均衡案例

nginx的ip为150,其中81端口指向146的6378和6379的redis,82端口指向146的8080redis。

(1)在146配置两个redis

*1)上传redis压缩包

链接:https://pan.baidu.com/s/1-F-InkE6IKRUDumU6ZYDJQ?
提取码:xpxp?

我们先把redis上传一下:?

*2)解压,安装,修改配置?,启动

#解压
cd /usr/local/nginx/redis/
tar -zxf redis-4.0.14.tar.gz 

#编译安装
cd redis-4.0.14/
make PREFIX=/usr/local/redis/redis01 install

#拷贝redis.conf
cp redis.conf /usr/local/redis/redis01/

#编辑配置
cd /usr/local/redis/redis01/
vim redis.conf 

##################################
#第一台机器不需要修改端口,后面需要修改端口
daemonize yes
##################################

#启动
cd bin/
./redis-server ../redis.conf 

#查看是否启动成功
ps -ef |grep redis

*3)再复制一个redis

#复制
cd /usr/local/redis/
cp -r redis01/ redis02

#修改配置文件端口号
cd redis02/
vim redis.conf 

#启动
cd bin/
./redis-server ../redis.conf 

#测试是否成功
ps -ef |grep redis

修改配置?

*4)修改两个配置文件的bind

两个配置文件都要修改?

*5)启动一个windows版本redis客户端调用

?(2)150的nginx中关于redis的负载均衡

测试:146的6379配置01,6378配置02,然后多次调用150的81,会显示不同的值,证明负载均衡生效?

?(3)配置tomcat

*1)上传压缩包?

*2)解压并启动

#解压
cd /usr/local/nginx/tomcat/
tar -zxf apache-tomcat-9.0.52.tar.gz 

#启动
cd apache-tomcat-9.0.52/bin/
./startup.sh

#查看是否成功
ps -ef |grep tomcat

3)测试

http://192.168.210.146:8080/

如果看到猫就对了

(4)配置nginx的负载均衡

之前我们调用150的81,会负载均衡进入146的两个redis。

现在我们调用150的82,需要进入146的tomcat

四、nginx的缓存集成相关概念

1.缓存的概念

缓存就是数据交换的缓冲区(称作:Cache),当用户要获取数据的时候,会先从缓存中去查询获取数据,如果缓存中有就会直接返回给用户,如果缓存中没有,则会发请求从服务器重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据

场景作用
操作系统磁盘缓存减少磁盘机械操作
数据库缓存减少文件系统的IO操作
应用程序缓存减少对数据库的查询
Web服务器缓存减少对应用服务器请求次数
浏览器缓存减少与后台的交互次数

2.缓存优缺点

优:

  • 减少数据传输,节省网络流量,加快响应速度,提升用户体验;
  • 减轻服务器压力
  • 提供服务端的高可用性;

缺:

  • 数据的不一致
  • 增加成本

3.nginx缓存服务器原理

Nginx作为Web缓存服务器,它介于客户端和应用服务器之间,当用户通过浏览器访问一个URL时,web缓存服务器会去应用服务器获取要展示给用户的内容,将内容缓存到自己的服务器上,当下一次请求到来时,如果访问的是同一个URL,web缓存服务器就会直接将之前缓存的内容返回给客户端,而不是向应用服务器再次发送请求。

我们把url作为一个key进行md5加密,然后设置一个缓存文件夹,缓存文件夹+拆分的md5作为路径,防止同一个文件夹下文件过多。

五、nginx缓存集成的相关指令

Nginx的web缓存服务主要是使用ngx_http_proxy_module模块相关指令集来完成

1.proxy_cache_path指令

proxy_cache_path:该指定用于设置缓存文件的存放路径

#语法
#path:缓存路径地址

#levels: 指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2
#假设某个md5为43c8233266edce38c2c9af0694e2107d 
#levels=1:2 最终的存储路径为/usr/local/proxy_cache/d/07
#levels=2:1:2 最终的存储路径 为/usr/local/proxy_cache/7d/0/21
#levels=2:2:2 最终的存储路径 为??/usr/local/proxy_cache/7d/10/e2

#keys_zone:用来为这个缓存区设置名称和指定大小
#keys_zone=xupeng:200m 缓存区的名称是xupeng,大小为200M,1M 大概能存储8000个keys

#inactive:指定缓存的数据多长时间未被访问就将被删除
#inactive=1d 缓存数据在1天内没有被访问就会被删除

#max_size:设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源
#max_size=20g

proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];

#位置
http

2.proxy_cache指令

proxy_cache:该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存。

#语法
#zone_name:指定使用缓存区的名称
proxy_cache zone_name|off;

#默认值
proxy_cache off;

#位置
http、server、location

3.proxy_cache_key指令

?proxy_cache_key:该指令用来设置web缓存的key值,Nginx会根据key值MD5哈希存缓存

#语法
proxy_cache_key key;

#默认值
proxy_cache_key $scheme$proxy_host$request_uri;

#位置
http、server、location

4.proxy_cache_valid指令

proxy_cache_valid:该指令用来对不同返回状态码的URL设置不同的缓存时间

#语法
proxy_cache_valid [code ...] time;

#默认值
-

#位置
http、server、location
#为200和302的响应URL设置10分钟缓存
proxy_cache_valid 200 302 10m; 

#为404的响应URL设置1分钟缓存
proxy_cache_valid 404 1m; 

#对所有响应状态码的URL都设置1分钟缓存
proxy_cache_valid any 1m; 

5.proxy_cache_min_uses指令

proxy_cache_min_uses:该指令用来设置资源被访问多少次后被缓存

#语法
proxy_cache_min_uses number;

#默认值
proxy_cache_min_uses 1;

#位置
http、server、location

6.proxy_cache_methods指令

proxy_cache_methods:该指令用户设置缓存哪些HTTP方法

#语法
proxy_cache_methods GET|HEAD|POST;

#默认值
#默认缓存HTTP的GET和HEAD方法,不缓存POST方法。
proxy_cache_methods GET HEAD;

#位置
http、server、location

六、nginx缓存案例

nginx缓存服务器150,应用服务器146的tomcat下有静态资源。

如果150下面有则直接缓存返回,如果没有,150去146,然后本地缓存,再返回。

 proxy_cache_path /usr/local/nginx/proxy_cache levels=2:1 keys_zone=xupeng:200m inactive=1d max_size=20g;

    upstream backend{
        server 192.168.210.146:8080;
    }

    server{
        listen 8080;
        server_name localhost;
        location /{
                proxy_cache xupeng;
                proxy_cache_key $scheme$proxy_host$request_uri;
                proxy_cache_valid 200 5d;
                proxy_cache_valid 404 30s;
                proxy_cache_valid any 1m;
                proxy_cache_min_uses 5;
                add_header nginx-cache "$upstream_cache_status";
                proxy_pass http://backend/picture/;
        }
    }

*1)上传静态图片到146

现在上述146的tomcat下面新增一个路径存放图片:

启动tomcat,并查看图片

#启动tomcat
cd /usr/local/nginx/tomcat/apache-tomcat-9.0.52/bin/
./startup.sh 

http://192.168.210.146:8080/picture/11.jpg我们可以看到图片

*2)配置150 的配置文件

http://192.168.210.150:8080/11.jpg,我们可以看到对应的图片

并且可以看到自动生成了一个缓存的文件夹,但是现在里面没有缓存数据:

*3)设置缓存

设置缓存名,缓存key(key会被md5加密),对应返回值的有效时间 :

?测试方法一:

我们再调用一次150,可以看到对应缓存目录下面有数据了,而且这个数据额外加了2层,第一层两个字母,第二层一个字母(这是因为我们设置的levels=2:1)?:

测试方法二:

如果是HIT表示命中?

*4)针对不同的返回值设置缓存

对于大于5次的文件,才会缓存

?

七、nginx缓存的清除

方式一:删除对应的缓存目录

rm -rf? 路径

这样很不好,因为我们的缓存路径是被md5加密的,很麻烦。除非删除所有缓存文件

方式二:使用第三方扩展模块

1.上传文件

?2.解压安装

#解压
cd /usr/local/nginx/module/
tar -zxf ngx_cache_purge-2.3.tar.gz 
mv ngx_cache_purge-2.3 purge

#查看自己当前配置
cd /usr/local/nginx/sbin/
./nginx -V

#复制,然后新增 --add-module=/usr/local/nginx/module/purge
#以我当前电脑为例
cd /usr/local/nginx/core/nginx-1.16.1/

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --modules-path=/usr/local/nginx/modules --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/logs/nginx.pid --lock-path=/usr/local/nginx/logs/nginx.lock --with-http_gzip_static_module --with-http_ssl_module --with-stream --add-module=/usr/local/nginx/module/purge

make

#备份之前的nginx
cd /usr/local/nginx/sbin/
mv nginx nginxold

#编译并平滑启动
cd /usr/local/nginx/core/nginx-1.16.1/objs/
cp nginx /usr/local/nginx/sbin/
cd ../
make upgrade

3.配置自动清除缓存

?

http://192.168.210.150:8080/purge/11.jpg,我们在路径上添加purge:

我们是写死的proxy_cache_key,也可以将值设置为:$scheme$proxy_host$request_uri

但是要注意,我们设置的时候的url和情况时候的url的路径要保持一致

八、nginx设置资源不缓存

1.proxy_no_cache指令

proxy_no_cache:该指令是用来定义不将数据进行缓存的条件。

#语法
#可以是多个,并且至少有一个不为空且不等于"0"
proxy_no_cache string ...;

#默认值
-

#位置
http、server、location
#$cookie_nocache 指的是当前请求的cookie中键的名称为nocache对应的值 
#$arg_nocache和$arg_comment 指的是当前请求的参数中属性名为nocache和comment对应的属性值

proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;

2.proxy_cache_bypass指令

proxy_cache_bypass:该指令是用来设置不从缓存中获取数据的条件。(会缓存但是不读取)

#语法
#可以是多个,并且至少有一个不为空且不等于"0"
proxy_cache_bypass string ...;

#默认值
-

#位置
http、server、location
#$cookie_nocache 指的是当前请求的cookie中键的名称为nocache对应的值 
#$arg_nocache和$arg_comment 指的是当前请求的参数中属性名为nocache和comment对应的属性值

proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;

3.实例

http://192.168.210.150:8081/?nocache=222&&comment=777

?

结合之前的例子:?

我们设置一个自己的值,如果这个值有值,就不缓存。

?

九、打赏请求

如果本篇博客对您有所帮助,打赏一点呗,谢谢了呢~

?

?

?

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:30:33  更:2021-09-09 11:31:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:10:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码