Nginx(四)

21 篇文章 1 订阅
11 篇文章 0 订阅

一、Nginx负载均衡

1.1负载均衡概述

早期的网站流量和业务功能都比较简单,单台服务器足以满足基本的需
求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也跟着越
来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要
多台服务器进行性能的水平扩展及避免单点故障出现。那么如何将不同
用户的请求流量分发到不同的服务器上呢?

1.2负载均衡的原理及处理流程

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

这里面涉及到两个重要的角色分别是 " 应用集群 " " 负载均衡器 "
应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均
衡设备分发的请求,进行处理并返回响应的数据。
负载均衡器 : 将用户访问的请求根据对应的负载均衡算法,分发到集群中
的一台服务器进行处理。
负载均衡的作用
1 、解决服务器的高并发压力,提高应用程序的处理性能。
2 、提供故障转移,实现高可用。
3 、通过添加或减少服务器数量,增强网站的可扩展性。
4 、在负载均衡器上进行过滤,可以提高系统的安全性。

1.3负载均衡常用的处理方式

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

方式二 :DNS 轮询方式
DNS
域名系统(服务)协议(
DNS )是一种分布式网络目录服务,主要用于域
名与 IP 地址的相互转换。
大多域名注册商都支持对同一个主机名添加多条 A 记录,这就是 DNS
询, DNS 服务器将解析请求按照 A 记录的顺序,随机分配到不同的 IP 上,
这样就能完成简单的负载均衡。 DNS 轮询的成本非常低,在一些不重要
的服务器,被经常使用。

如下是我们为某一个域名添加的 IP 地址,用 2 台服务器来做负载均衡。

验证 :
ping www.nginx521.cn
清空本地的 dns 缓存
ipconfig/flushdns
我们发现使用 DNS 来实现轮询,不需要投入过多的成本,虽然 DNS 轮询
成本低廉,但是 DNS 负载均衡存在明显的缺点。
1. 可靠性低
假设一个域名 DNS 轮询多台服务器,如果其中的一台服务器发生故障,
那么所有的访问该服务器的请求将不会有所回应,即使你将该服务器的
IP DNS 中去掉,但是由于各大宽带接入商将众多的 DNS 存放在缓存
中,以节省访问时间,导致 DNS 不会实时更新。所以 DNS 轮流上一定程
度上解决了负载均衡问题,但是却存在可靠性不高的缺点。
2. 负载均衡不均衡
DNS 负载均衡采用的是简单的轮询负载算法,不能区分服务器的差异,
不能反映服务器的当前运行状态,不能做到为性能好的服务器多分配请
求,另外本地计算机也会缓存已经解析的域名到 IP 地址的映射,这也会
导致使用该 DNS 服务器的用户在一定时间内访问的是同一台 Web 服务
器,从而引发 Web 服务器减的负载不均衡。
负载不均衡则会导致某几台服务器负荷很低,而另外几台服务器负荷确
很高,处理请求的速度慢,配置高的服务器分配到的请求少,而配置低
的服务器分配到的请求多。
方式三 : / 七层负载均衡
介绍四 / 七层负载均衡之前,我们先了解一个概念, OSI(open system
interconnection), 叫开放式系统互联模型,这个是由国际标准化组织 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 虚拟服务池】。
Nginx 七层负载均衡的指令
upstream 指令
该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并
且也可以是同时监听 TCP Unix socket 的服务器。服务器可以指定不同
的权重,默认为 1

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

Nginx 七层负载均衡的实现流程

服务端设置
server {
  listen 9001;
  server_name localhost;
default_type text/html;
  location /{
  return 200 '<h1>192.168.200.146:9001</h1>';
  }
  }
  server {
listen 9002;
  server_name localhost;
  default_type text/html;
  location /{
  return 200 '<h1>192.168.200.146:9002</h1>';
  }
  }
  server {
  listen 9003;
  server_name localhost;
default_type text/html;
location /{
return 200 '<h1>192.168.200.146:9003</h1>';
}
}
负载均衡器设置
upstream backend{
server 192.168.200.146:9091;
server 192.168.200.146:9092;
server 192.168.200.146:9093;
}
server {
listen 8083;
server_name localhost;
location /{
proxy_pass http://backend;
}
}
负载均衡状态
代理服务器在负责均衡调度中的状态有以下几个:

down
down: 将该服务器标记为永久不可用,那么该代理服务器将不参与负载
均衡。
upstream backend{
server 192.168.200.146:9001 down;
server 192.168.200.146:9002
server 192.168.200.146:9003;
}
server {
listen 8083;
server_name localhost;
location /{
proxy_pass http://backend;
}
}
该状态一般会对需要停机维护的服务器进行设置。
backup
backup: 将该服务器标记为备份服务器,当主服务器不可用时,将用来传
递请求。
upstream backend{
  server 192.168.200.146:9001 down;
  server 192.168.200.146:9002 backup;
  server 192.168.200.146:9003;
  }
  server {
  listen 8083;
  server_name localhost;
  location /{
  proxy_pass http://backend;
  }
  }
此时需要将 9094 端口的访问禁止掉来模拟下唯一能对外提供访问的服务
宕机以后, backup 的备份服务器就要开始对外提供服务,此时为了测试
验证,我们需要使用防火墙来进行拦截。
介绍一个工具 firewall - cmd , 该工具是 Linux 提供的专门用来操作
firewall 的。
查询防火墙中指定的端口是否开放
firewall-cmd --query-port=9001/tcp
如何开放一个指定的端口
firewall-cmd --permanent --add-port=9002/tcp
批量添加开发端口
firewall-cmd --permanent --add-port=9001-9003/tcp
如何移除一个指定的端口
firewall-cmd --permanent --remove-port=9003/tcp
重新加载
firewall-cmd --reload
其中
--permanent 表示设置为持久
--add-port 表示添加指定端口
--remove-port 表示移除指定端口
max_conns
max_conns=number: 用来设置代理服务器同时活动链接的最大数量,
默认为 0 ,表示不限制,使用该配置可以根据后端服务器处理请求的并发
量来进行设置,防止后端服务器被压垮。
max_fails fail_timeout
max_fails=number: 设置允许请求代理服务器失败的次数,默认为 1
fail_timeout=time: 设置经过 max_fails 失败后,服务暂停的时间,默认
10 秒。
upstream backend{
server 192.168.200.133:9001 down;
server 192.168.200.133:9002 backup;
server 192.168.200.133:9003 max_fails=3
fail_timeout=15;
}
server {
listen 8083;
server_name localhost;
location /{
proxy_pass http://backend;
}
}
负载均衡策略
介绍完 Nginx 负载均衡的相关指令后,我们已经能实现将用户的请求分
发到不同的服务器上,那么除了采用默认的分配方式以外,我们还能采
用什么样的负载算法 ?
Nginx upstream 支持如下六种方式的分配算法,分别是 :

轮询
upstream 模块负载均衡默认的策略。每个请求会按时间顺序逐个分配
到不同的后端服务器。轮询不需要额外的配置。
upstream backend{
server 192.168.200.146:9001 weight=1;
server 192.168.200.146:9002;
server 192.168.200.146:9003;
}
server {
listen 8083;
server_name localhost;
location /{
proxy_pass http://backend;
}
}
weight 加权 [ 加权轮询 ]
weight=number: 用来设置服务器的权重,默认为 1 ,权重数据越大,被
分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的
后端服务器硬件配置进行调整的,所有此策略比较适合服务器的硬件配
置差别比较大的情况。
upstream backend{
server 192.168.200.146:9001 weight=10;
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;
}
}
ip_hash
当对后端的多台动态应用服务器做负载均衡时, ip_hash 指令能够将某个
客户端 IP 的请求通过哈希算法定位到同一台后端服务器上。这样,当来
自某一个 IP 的用户在后端 Web 服务器 A 上登录后,在访问该站点的其他
URL ,能保证其访问的还是后端 web 服务器 A

upstream backend{
ip_hash;
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;
}
}
需要额外多说一点的是使用 ip_hash 指令无法保证后端服务器的负载均
衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接收的
请求少,而且设置后端服务器权重等方法将不起作用。

least_conn
最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求
平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用
的时间很长,会导致其所在的后端负载较高。这种情况下, least_conn
这种方式就可以达到更好的负载均衡效果。
upstream backend{
least_conn;
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;
}
}
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

url_hash
按访问 url hash 结果来分配请求,使每个 url 定向到同一个后端服务
器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的
服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时
间的浪费。而使用 url_hash ,可以使得同一个 url(也就是同一个资源请
求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以
从缓存中读取。
upstream backend{
  hash &request_uri;
  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;
  }
  }
访问如下地址:
http://192.168.200.133:8083/a
http://192.168.200.133:8083/b
http://192.168.200.133:8083/c

fair
fair 采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面
大小、加载时间长短智能的进行负载均衡。那么如何使用第三方模块的
fair 负载均衡策略。
upstream backend{
fair;
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;
}
}
但是如何直接使用会报错,因为 fair 属于第三方模块实现的负载均衡。需
要添加 nginx - upstream - fair , 如何添加对应的模块 :
1. 下载 nginx-upstream-fair 模块
下载地址为 :
https://github.com/gnosek/nginx-upstream-fair
2. 将下载的文件上传到服务器并进行解压缩
unzip nginx-upstream-fair-master.zip
3. 重命名资源
mv nginx-upstream-fair-master fair
4. 使用 ./confifigure 命令将资源添加到 Nginx 模块中
./configure --add-module=/root/fair
5. 编译
make
编译可能会出现如下错误, ngx_http_upstream_srv_conf_t 结构中缺少
default_port

解决方案 :
Nginx 的源码中 src/http/ngx_http_upstream.h, 找到
ngx_http_upstream_srv_conf_s ,在模块中添加添加 default_port
in_port_t    default_port

然后再进行 make.
6. 更新 Nginx
6.1 sbin 目录下的 nginx 进行备份
mv /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginxold
6.2 将安装目录下的 objs 中的 nginx 拷贝到 sbin 目录
cd objs
cp nginx /usr/local/nginx/sbin
6.3 更新 Nginx
cd ../
make upgrade
7. 编译测试使用 Nginx
上面介绍了 Nginx 常用的负载均衡的策略,有人说是 5 种,是把轮询和加
权轮询归为一种,也有人说是 6 种。那么在咱们以后的开发中到底使用哪
种,这个需要根据实际项目的应用场景来决定的。
负载均衡案例
案例一:对所有请求实现一般轮询规则的负载均衡
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;
}
}
案例二:对所有请求实现加权轮询规则的负载均衡
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;
}
}
案例三:对特定资源实现负载均衡
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;
}
}
案例四:对不同域名实现负载均衡
upstream itcastbackend{
server 192.168.200.146:9001;
server 192.168.200.146:9002;
}
upstream itheimabackend{
server 192.168.200.146:9003;
server 192.168.200.146:9004;
}
server {
listen 8085;
server_name www.itcast.cn;
location / {
proxy_pass http://itcastbackend;
}
}
server {
listen 8086;
server_name www.itheima.cn;
location / {
proxy_pass http://itheimabackend;
}
}
案例五:实现带有 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 / {
proxy_pass http://backend;
}
}
Nginx 四层负载均衡
Nginx 1.9 之后,增加了一个 stream 模块,用来实现四层协议的转发、
代理、负载均衡等。 stream 模块的用法跟 http 的用法类似,允许我们配
置一组 TCP 或者 UDP 等协议的监听,然后通过 proxy_pass 来转发我们的
请求,通过 upstream 添加多个后端服务,实现负载均衡。
四层协议负载均衡的实现,一般都会用到 LVS HAProxy F5 等,要么
很贵要么配置很麻烦,而 Nginx 的配置相对来说更简单,更能快速完成
工作。
添加 stream 模块的支持
Nginx 默认是没有编译这个模块的,需要使用到 stream 模块,那么需要
在编译的时候加上 -- with - stream
完成添加 -- with - stream 的实现步骤
》将原有 /usr/local/nginx/sbin/nginx 进行备份
》拷贝 nginx 之前的配置信息
》在 nginx 的安装源码进行配置指定对应模块 ./configure --
with-stream
》通过 make 模板进行编译
》将 objs 下面的 nginx 移动到 /usr/local/nginx/sbin
》在源码目录下执行 make upgrade 进行升级,这个可以实现不停机添
加新模块的功能
Nginx 四层负载均衡的指令
stream 指令
该指令提供在其中指定流服务器指令的配置文件上下文。和 http 指令同
级。

upstream 指令
该指令和 http upstream 指令是类似的。
四层负载均衡的案例
需求分析

实现步骤
(1) 准备 Redis 服务器 , 在一条服务器上准备三个 Redis ,端口分别是
6379,6378
1. 上传 redis 的安装包, redis - 4.0.14.tar.gz
2. 将安装包进行解压缩
tar -zxf redis-4.0.14.tar.gz
3. 进入 redis 的安装包
cd redis-4.0.14
4. 使用 make install 进行编译和安装
make PREFIX=/usr/local/redis/redis01 install
5. 拷贝 redis 配置文件 redis.conf /usr/local/redis/redis01/bin 目录中
cp redis.conf /usr/local/redis/redis01/bin
6. 修改 redis.conf 配置文件
port 6379 #redis 的端口
  daemonize yes # 后台启动 redis
7. redis01 复制一份为 redis02
cd /usr/local/redis
  cp -r redis01 redis02
8. redis02 文件文件夹中的 redis.conf 进行修改
port 6378 #redis 的端口
  daemonize yes # 后台启动 redis
9. 分别启动,即可获取两个 Redis. 并查看
ps -ef | grep redis
使用 Nginx 将请求分发到不同的 Redis 服务器上。
(2) 准备 Tomcat 服务器 .
1. 上传 tomcat 的安装包, apache - tomcat - 8.5.56.tar.gz
2. 将安装包进行解压缩
tar -zxf apache-tomcat-8.5.56.tar.gz
3. 进入 tomcat bin 目录
cd apache-tomcat-8.5.56/bin
  ./startup
nginx.conf 配置
stream {
  upstream redisbackend {
server 192.168.200.146:6379;
  server 192.168.200.146:6378;
  }
  upstream tomcatbackend {
  server 192.168.200.146:8080;
  }
server {
  listen 81;
  proxy_pass redisbackend;
  }
  server {
  listen 82;
proxy_pass tomcatbackend;
}
}
访问测试。

二、Nginx缓存集成

2.1缓存的概念

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

缓存其实在很多场景中都有用到,比如:

缓存的优点
1. 减少数据传输,节省网络流量,加快响应速度,提升用户体验;
2. 减轻服务器压力;
3. 提供服务端的高可用性;
缓存的缺点
1. 数据的不一致
2. 增加成本

Nginx 作为 web 服务器, Nginx 作为 Web
存服务器,它介于客户端和应用服务器之间,当用户通过浏览器访问一
URL 时, web 缓存服务器会去应用服务器获取要展示给用户的内容,
将内容缓存到自己的服务器上,当下一次请求到来时,如果访问的是同
一个 URL web 缓存服务器就会直接将之前缓存的内容返回给客户端,
而不是向应用服务器再次发送请求。 web 缓存降低了应用服务器、数据
库的负载,减少了网络延迟,提高了用户访问的响应速度,增强了用户
的体验。

2.2Nginxweb缓存服务

Nginx 是从 0.7.48 版开始提供缓存功能。 Nginx 是基于 Proxy Store 来实现
的,其原理是把 URL 及相关组合当做 Key, 在使用 MD5 算法对 Key 进行哈
希,得到硬盘上对应的哈希目录路径,从而将缓存内容保存在该目录
中。它可以支持任意 URL 连接,同时也支持 404/301/302 这样的非 200
态码。 Nginx 即可以支持对指定 URL 或者状态码设置过期时间,也可以使
purge 命令来手动清除指定 URL 的缓存。

2.3Nginx缓存设置的相关指令

Nginx web 缓存服务主要是使用 ngx_http_proxy_module 模块相关指
令集来完成,接下来我们把常用的指令来进行介绍下。
proxy_cache_path
该指定用于设置缓存文件的存放路径

path: 缓存路径地址 , 如:
/usr/local/proxy_cache
levels: 指定该缓存空间对应的目录,最多可以设置 3 层,每层取值为 1|2
:
levels=1:2 缓存空间有两层目录,第一次是 1 个字母,第二次是 2
字母
举例说明 :
itheima[key] 通过 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=itcast:200m 缓存区的名称是 itcast, 大小为 200M,1M
大概能存储 8000 keys
inactive: 指定缓存的数据多次时间未被访问就将被删除,如:
inactive=1d 缓存数据在 1 天内没有被访问就会被删除
max_size: 设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间
最长的资源,如 :
max_size=20g
配置实例 :
http{
proxy_cache_path /usr/local/proxy_cache
keys_zone=itcast:200m levels=1:2:1 inactive=1d
max_size=20g;
}
proxy_cache
该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来
进行缓存。

zone_name :指定使用缓存区的名称
proxy_cache_key
该指令用来设置 web 缓存的 key 值, Nginx 会根据 key MD5 哈希存缓
存。

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

如:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
200 302 的响应 URL 设置 10 分钟缓存,为 404 的响应 URL 设置 1 分钟缓
proxy_cache_valid any 1m;
对所有响应状态码的 URL 都设置 1 分钟缓存
proxy_cache_min_uses
该指令用来设置资源被访问多少次后被缓存

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

默认缓存 HTTP GET HEAD 方法,不缓存 POST 方法。

2.4Nginx缓存设置案例

需求分析

步骤实现
1. 环境准备
应用服务器的环境准备
(1)在 192.168.200.146 服务器上的 tomcat webapps 下面添加一个 js
目录,并在 js 目录中添加一个 jquery.js 文件
(2)启动 tomcat
(3)访问测试
http://192.168.200.146:8080/js/jquery.js
Nginx 的环境准备
(1)完成 Nginx 反向代理配置
http{
  upstream backend{
  server 192.168.200.146:8080;
  }
  server {
  listen 8080;
  server_name localhost;
  location / {
  proxy_pass http://backend/js/;
  }
  }
  }
(2)完成 Nginx 缓存配置
4. 添加缓存配置
http{
proxy_cache_path /usr/local/proxy_cache
levels=2:1 keys_zone=itcast:200m inactive=1d
max_size=20g;
upstream backend{
server 192.168.200.146:8080;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_cache itcast;
proxy_cache_key itheima;
proxy_cache_min_uses 5;
proxy_cache_valid 200 5d;
proxy_cache_valid 404 30s;
proxy_cache_valid any 1m;
add_header nginx-cache
"$upstream_cache_status";
proxy_pass http://backend/js/;
}
}
}

2.5Nginx缓存的清除

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

rm -rf /usr/local/proxy_cache/......

方式二 : 使用第三方扩展模块
ngx_cache_purge
(1)下载 ngx_cache_purge 模块对应的资源包,并上传到服务器上。
ngx_cache_purge-2.3.tar.gz
(2)对资源文件进行解压缩
tar -zxf ngx_cache_purge-2.3.tar.gz
(3)修改文件夹名称,方便后期配置
mv ngx_cache_purge-2.3 purge
(4)查询 Nginx 的配置参数
nginx -V
(5)进入 Nginx 的安装目录,使用 ./confifigure 进行参数配置
./configure --add-module=/root/nginx/module/purge
(6)使用 make 进行编译
make
(7)将 nginx 安装目录的 nginx 二级制可执行文件备份
mv /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginxold
(8)将编译后的 objs 中的 nginx 拷贝到 nginx sbin 目录下
cp objs/nginx /usr/local/nginx/sbin
(9)使用 make 进行升级
make upgrade
10 )在 nginx 配置文件中进行如下配置
server{
location ~/purge(/.*) {
proxy_cache_purge itcast itheima;
}
}

2.6Nginx设置资源不缓存

前面咱们已经完成了 Nginx 作为 web 缓存服务器的使用。但是我们得思考
一个问题就是不是所有的数据都适合进行缓存。比如说对于一些经常发
生变化的数据。如果进行缓存的话,就很容易出现用户访问到的数据不
是服务器真实的数据。所以对于这些资源我们在缓存的过程中就需要进
行过滤,不进行缓存。
Nginx 也提供了这块的功能设置,需要使用到如下两个指令
proxy_no_cache
该指令是用来定义不将数据进行缓存的条件。

配置实例
proxy_no_cache $cookie_nocache $arg_nocache
$arg_comment;
proxy_cache_bypass
该指令是用来设置不从缓存中获取数据的条件。

配置实例
proxy_cache_bypass $cookie_nocache $arg_nocache
$arg_comment;
上述两个指令都有一个指定的条件,这个条件可以是多个,并且多个条
件中至少有一个不为空且不等于 "0", 则条件满足成立。上面给的配置实例
是从官方网站获取的,里面使用到了三个变量,分别是
$cookie_nocache $arg_nocache $arg_comment
$cookie_nocache $arg_nocache
$arg_comment
这三个参数分别代表的含义是 :
$cookie_nocache
指的是当前请求的 cookie 中键的名称为 nocache 对应的值
$arg_nocache $arg_comment
指的是当前请求的参数中属性名为 nocache comment 对应的属性值
案例演示下 :
log_format params $cookie_nocache | $arg_nocache |
$arg_comment
server{
listen 8081;
server_name localhost;
location /{
access_log logs/access_params.log params;
add_header Set-Cookie 'nocache=999';
root html;
index index.html;
}
}
案例实现
设置不缓存资源的配置方案
server{
  listen 8080;
server_name localhost;
  location / {
  if ($request_uri ~ /.*\.js$){
set $nocache 1;
  }
  proxy_no_cache $nocache $cookie_nocache
$arg_nocache $arg_comment;
  proxy_cache_bypass $nocache $cookie_nocache
$arg_nocache $arg_comment;
  }
  }
nginx层负载均衡是通过TCP协议进行端口转发来实现的。它适用于转发非HTTP应用,比如TCP/80、TCP/443、TCP/3306、TCP/22和UDP/53等。层负载均衡可以解决七层负载均衡的高可用性问题,同时也可以解决七层负载均衡的端口数限制问题。相比于七层负载均衡,层转发的效率更高,但功能相对较弱,只支持TCP/IP协议。\[3\] 在nginx的配置文件中,可以通过在stream块中配置upstream来实现层负载均衡。例如,在nginx.conf文件中配置了一个upstream,指定了多个后端服务器的IP和端口,然后通过proxy_pass指令将请求转发给这些后端服务器。\[2\] 需要注意的是,nginx层负载均衡不能配置HTTP层,只能进行TCP协议的转发。如果需要进行HTTP层的负载均衡,需要在nginx.conf文件中进行配置。\[2\] #### 引用[.reference_title] - *1* [Nginx层负载均衡详解](https://blog.csdn.net/Yosigo_/article/details/117216333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [nginx实现层负载均衡](https://blog.csdn.net/m0_46090675/article/details/119830336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值