|
目录
一、负载均衡
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
?
结合之前的例子:?
我们设置一个自己的值,如果这个值有值,就不缓存。
?
九、打赏请求
如果本篇博客对您有所帮助,打赏一点呗,谢谢了呢~

?
?
?
|