nginx反向代理之缓存 客户端IP透传 负载均衡

一 缓存功能

缓存功能可以加速访问,如果没有缓存关闭后端服务器后,图片将无法访问,缓存功能默认关闭,需要开启。

相关选项:

​
proxy_cache zone_name | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http   必须放在http语句中#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m;   #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端

实验:为代理服务器开启缓存功能

① 主配置文件的http模块中添加配置

[root@localhost ~]# vim /apps/nginx/conf/nginx.conf   #主配置文件
proxy_cache_path /data/nginx/proyxcache   levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
#开启缓存         缓存路径              生成文件夹比例是3级  从内存中借调20M专门存放缓存  有效期120秒    最大存储空间为1g
[root@localhost ~]# mkdir /data/nginx/
[root@localhost ~]# nginx -t 注意:路径不存在或者错误

② 子配置文件添加配置

proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;

如何清理nginx代理服务器缓存

方法1  rm -rf 缓存目录

方法2: 第三方扩展模块ngx_cache_purge

②自定义添加响应报文头部信息

基于可以实现对后端服务器响应给客户端的报文中添加指定的响应首部字段

Syntax: add_header name value [always];
Default;
Context: http,server,location,if in location#添加响应报文的自定义首部:
add_header name value [always];#示例:
add_header X-Via  $server_addr; #当前nginx主机的IP
add_header X-Cache $upstream_cache_status; #是否缓存命中
add_header X-Accel $server_name;  #客户访问的FQDNadd_header X-Via   
add_header X-Cache 
add_header X-Accel

实验1:自定义添加响应报文头部信息

add_header X-Via     $server_addr;             #当前nginx主机ip

add_header X-Cache $upstream_cache_status;   #是否缓存命中,hit命中,miss未命中add_header X-Accel   $server_name;             #客户端访问的FQDN

server {listen 80;server_name www.pc.com;root /data/;proxy_cache proxycache;proxy_cache_key $request_uri;#proxy_cache_key $host$uri$is_args$args;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;add_header ip     $server_addr;             #当前nginx主机ipadd_header status $upstream_cache_status;   #是否缓存命中,hit命中,miss未命中add_header name   $server_name;             #客户端访问的FQDNlocation ~* /api {proxy_pass http://192.168.190.100;}location ~* \.(jpg|jpeg|png|gif|bmp)$ {proxy_pass http://192.168.190.101;}
}

② 查看新增头部字段信息

二 客户端ip透传

一级代理

在Nginx中,代理客户端IP透传是指将客户端的真实IP地址(也称为远程IP地址)传递给后端服务器。这在一些情况下非常有用,例如,当Nginx作为反向代理服务器时,我们希望后端服务器能够获取到客户端的真实IP地址,而不是Nginx服务器的IP地址。

在代理服务器7-1写配置文件

server{ listen 80;       root /data/;server_name www.mcb.com;add_header X-Via   $server_addr;add_header X-Cache $upstream_cache_status;add_header X-Accel $server_name;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location  / {proxy_pass http://192.168.11.8;}
}

当前访问192.168.11.9代理服务器跳转的是192.168.11.8后端真实服务器

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部

② 添加后端服务器11.9web文件,开启httpd服务,关闭防火墙,并实时查看访问日志

④ 观察后端服务器11.8新增日志信息

二级代理

实现目标:7-0服务器日志可以查看到客户端ip和反向代理服务器ip。

二 负载均衡

在上一个节中Nginx可以将客户端的请求转发至单台后端服务器,但是无法转发至特定的一组的服务器,而且不能对后端服务器提供相应的服务器状态监测,Nginx可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能。

1 调度算法 

1.1轮询算法

默认算法是轮询算法即反向代理服务器处理用户请求时,每个后端服务器都轮流提供响应。

3.2 加权轮询算法

在默认轮询的基础上增加权重,weight=number。如果后端有2个服务器其中一个配置权重为weight=5另外一个不配置默认是1,则有用户访问时分配给给有权重的服务器和不配置权重的服务器的比例为5:1。

 最小连接数算法

最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC。按照nginx反向代理服务器和后端服务器的连接数分配请求,连接越少的分配处理请求优先级越高。例如最小连接数(least_conn;)是设置是3,1号后端服务器有2个请求在处理,而后2号后端服务器只有1个请求在处理,则新请求交给后端服务器2。

 ip_hash算法

基于客户端IP地址的负载均衡算法。它会根据客户端的IP地址,将该客户端的所有请求都发送到同一个后端服务器上。这样可以保证同一个客户端的所有请求都被发送到同一个后端服务器,从而保证了会话的一致性。

3.5 fair算法

基于后端服务器的负载均衡算法。它会根据后端服务器的响应时间,将请求发送到响应时间最短的服务器上。这样可以保证请求被发送到处理能力最强的服务器上,从而提高系统的性能。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708198.shtml

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

相关文章

MySql-多表设计-一对一

目录 一对一 一对一 一对一关系表在实际开发中应用起来比较简单,通常是用来做单表的拆分,也就是将一张大表拆分成两张小表,将大表中的一些基础字段放在一张表当中,将其他的字段放在另外一张表当中,以此来提高数据的操…

kali linux通过aircrack-ng命令破解wifi密码

相关阅读:如何破解攻击WiFi 百度安全验证https://baijiahao.baidu.com/s?id1764248756021219497&wfrspider&forpc上面2篇文章写得都很不错 一、前期准备工作 1、将无线网卡挂载到Kali上 ​ 将无线网卡插到电脑上,如果弹出检测到新的USB设备&…

10、电源管理入门之OPP介绍

目录 1. 什么是OPP,怎么用? 2. 系统初始化加载OPP信息 3. 触发使用 4. API介绍 之前的文章设置clock的时候多次提到了(Operating Performance Point)OPP,例如DEVFreq、CPUFreq等,在现代SoC上存在有Power Domain,也可以以Power Domain为单位进行OPP的电压频率定义。 …

成人年龄判断(个人学习笔记黑马学习)

结合前面学习的input输入语句,完成如下案例: 1.通过input语句,获取键盘输入,为变量age赋值。(注意转换成数字类型) 2.通过if判断是否是成年人,满足条件则输出提示信息,如下: 欢迎来到黑马儿童游乐场&#x…

什么是Rust 语言

Rust 是一种专注于性能和内存安全的系统编程语言,其设计目标包括提供:零开销抽象、移动语义、内存安全、线程无数据竞争、类型安全和实时 gc 等功能。Rust 使用 RAII(Resource Acquisition Is Initialization)管理资源&#xff0c…

Window系统安装USB Redirector结合cpolar实现远程访问本地USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序,它提供了共享和访问本地或互联网上的U…

图论|207. 课程表 210. 课程表 II

207. 课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 …

Spark Bloom Filter Join

1 综述 1.1 目的 Bloom Filter Join,或者说Row-level Runtime Filtering(还额外有一条Semi-Join分支),是Spark 3.3对运行时过滤的一个最新补充   之前运行时过滤主要有两个:动态分区裁剪DPP(开源实现&am…

MongoDB聚合运算符:$concat

文章目录 语法举例 $concat聚合运算符返回多个字符串连接后的结果。 语法 { $concat: [ <expression1>, <expression2>, ... ] }<expression>可以是任何可以解析为字符串的表达式。如果表达式解析为null或引用的字段不存在&#xff0c;则返回null。 举例 …

迭代器模式:分离遍历逻辑与数据结构,实现统一访问接口与灵活扩展

文章目录 一、引言二、应用场景与技术背景三、模式定义与实现四、优缺点分析总结&#xff1a; 一、引言 ​ 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种方法顺序访问聚合对象的元素&#xff0c;而又不暴露其底层表示。迭…

DFS中的连通性和搜索顺序

宽搜一般要手写一个队列&#xff0c;深搜一般是用系统栈来实现的。 DFS之连通性模型 1112. 迷宫 - AcWing题库 import java.util.*;public class Main{static int N 110, ha, la, hb, lb, n;static char[][] g new char[N][N];static boolean[][] st new boolean[N][N];st…

顶顶通呼叫中心中间件-使用http接口方式把在通话的机器人话术手动转给人工坐席分机操作步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-机器人话术中手动转接到人工坐席分机上讲解(mod_cti基于FreeSWITCH) 需要了解呼叫中心中间件可以点此链接添加联系方式顶顶通小孙 一、操作步骤 1、自动外呼进入机器人话术 这里就不详细说了&#xff0c;可以去参考我的这一篇文章自动外呼进入机器人 …

nginx 日志,压缩,https功能介绍

一&#xff0c; 自定义访问日志 &#xff08;一&#xff09;日志位置存放 1&#xff0c;格式 2&#xff0c; 级别 level: debug, info, notice, warn, error, crit, alert, emerg 3&#xff0c;示例 服务机定义 错误日志存放位置 客户机错误访问 查看错误日志 4&#xff…

DAY9-防病毒AV概述

DNS过滤 URL过滤和DNS过滤对比

C#面:ref 和 out 的区别

ref 关键字&#xff1a; 在使用 ref 关键字时&#xff0c;传递的参数必须在方法调用之前进行初始化。在方法内部&#xff0c;对 ref 参数的任何修改都会影响到原始变量。ref 参数在方法内部和外部都必须具有相同的类型。 out 关键字 out 参数在方法内部必须被赋值。在使用 ou…

广和通5G智能模组SC171支持Android、Linux和Windows系统,拓宽智能物联网应用

世界移动通信大会2024期间&#xff0c;广和通宣布&#xff1a;5G智能模组SC171除支持Android操作系统外&#xff0c;还兼容Linux和Windows系统&#xff0c;帮助更多智能终端客户快速迭代产品&#xff0c;拓宽智能化应用覆盖范围。 广和通SC171系列基于高通QCM6490物联网解决方案…

oracle with check option 学习

with check option保证了通过视图进行的修改&#xff0c;必须也能通过该视图看到修改后的结果&#xff1b; 你插入&#xff0c;那么插入这条记录在刷新视图后必须可以看到&#xff1b; 如果修改&#xff0c;修改完的结果也必须能通过该视图看到&#xff1b; scott登录了以后创…

【Java程序设计】【C00320】基于Springboot的招生宣传管理系统(有论文)

基于Springboot的招生宣传管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的招生宣传管理系统&#xff0c;本系统有管理员以及招生人员二种角色&#xff1b; 前台&#xff1a;首页、专业介绍、师资力量、联…

Vue3.0+TS管理系统基础使用之变量声明、计算属性、监听属性

将近一年没写过管理系统了&#xff0c;上一次用的还是vue2js&#xff0c;这次接手的项目是Vue3ts&#xff0c;一眼看过去好熟悉的style&#xff0c;第二眼开始蒙&#xff0c;数据写哪&#xff1f;计算属性咋写啊&#xff1f; 这里用到了一个第三方库vue-property-decorator。 …

Spring Boot项目中如何上传头像?

在我们常见的各大App中&#xff0c;或多或少我们都见过上传头像的功能吧&#xff1f;&#xff1f; 但是在Spring Boot项目中如何上传头像呢&#xff1f; 上传头像主要用到RequestPart注解 来看一下小编的代码吧&#xff01; RestController RequestMapping("/param"…