nginx(三)实现反向代理客户端 IP透传

正常情况下,客户端去访问代理服务器,然后代理服务器再取访问真实服务器,在真实服务器上,只能显示代理服务器的ip地址,而不显示客户端的ip地址,如果想让客户端的ip地址也能在真实服务端看见,这一技术叫做IP透传
$http_x_forwarded_for:这个变量我们要赋值给它,并且会一直保留,每次都会追加
可以在主配置文件里面的日志文件里面看见这一选项


#proxy_set_header X-Real-IP $remote_addr; #只添加客户端IP到请求报文头部,转发至后端服务器proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部
如果有一个代理服务器,可以写第一个
如果有多个代理服务器,则下面的
如果既想看见客户端ip又想看见代理服务器 就添加第二行
在真实服务端的日制中查看,是看不见客户端或者代理服务器端的ip的

如果想看见真实访问的ip地址,就是客户端跟代理服务端的ip时 看以下操作
单机IP透传
在代理服务端(7-1) (nginx系统)
在子配置文件里面配置内容 X-Forwarded-For 这是一个变量

7-2真实服务器上(httpd系统)
用set list 可以查看时在196行(set nu可以看到多少行),然后进行添加 (只需要将次变量加入即可)
X-Forwarded-For


然后重启

然后再用另外一台客户端(7-3)去curl192.168.68.3的代理服务器

此时 再去7-2查看日志


多机IP透传 (把所有机器换成nginx,都是nginx系统)
在每个代理服务器上面都要设置:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #添加客户端IP和反向代理服务器IP到请求报文头部

在nginx中,变量 X-Forwarded-For已经写好了,都写在日志文件中了 只需要在每个代理服务端的配置文件中写入proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for即可

代理服务器1:192.168.68.3
代理服务器2:192.168.68.4
真实服务器:192.168.68.5
(访问代理服务器1 就跳转到代理服务器2 访问代理服务2 就跳转到真是服务器)
代理服务器1配置:

代理服务器二配置:

随后,重载

真实服务器 (7-3)
首先关闭防火墙
其次yum 安装nginx
yum install -y epel-release
yum install nginx -y
然后开启服务器nginx

yum安装的nginx的主页面 在/usr/share/nginx/html中

然后在代理服务器curl 192.168.68.3自己

最后,在真是服务器上面查看日志,会出现代理ip 跟客户端ip

http反向代理负载均衡 upstream


upstream 在http模块里面
调度算法:

代理服务器:192.168.68.3
真实服务器1:192.168.68.4
真是服务器2::192.168.68.5
代理服务器 :
修改主配置文件
加入服务器组

然后将子配置文件注释掉,如果不注释,不能进行下面的location操作

随后,在location里面修改

随后保存并退出

真实服务器1:

真实服务器2

随后,在代理服务器服务器上curl
一会7-2 一会7-3

以上为轮询算法(nginx默认),一人一次的意思
nginx有检测机制,如果有一台服务器挂掉,nginx只会去访问正常的那一台 (健康性检查)
举例说明:
当7-3 服务器挂了,nginx只能去访问7-2


然后再去代理服务器上面curl
验证成功 ,只能去健康的服务器访问

去关闭的那台真实服务器上查看
此时只有I个包,正常情况下,tcp三次握手最少应该有6个包 所以这边失败

加权轮询 weight

weight:5 意思为上面分5次 下面没写,默认一次
实例:
在代理服务器(192.168.68.3)上的主配置文件里面修改

随后,保存重载 然后在curl
可以看出192.168.68.4 出现3次 192.168.68.5出现一次


#server支持的parameters如下:
weight=number #设置权重,默认为1,实现类似于LVS中的WRR,WLC等
max_conns=number #给当前后端server设置最大活动链接数,默认为0表示没有限制
max_fails=number #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
fail_timeout=time #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒
backup #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器 sorry server 自己不能转自己
down #标记为down状态
resolve #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启Nginx
max_fails 表示链接次数,当检验计算机是否挂掉,max_fails=3 就表示尝试tcp连接次计算机三次 ,如果不行就认为挂掉
fail_timeout :如果检测到计算机还活着,等个多少秒再上线
backup:备份服务器,当前面几台服务器都挂掉的时候,可以使用备份服务器
演示备份服务器流程:
在第一台服务器7-1 主配置文件里面修改

第二步在备份服务器上面下载nginx



模拟192.168.68.4 跟192.168.68.5 损坏 就是将其nginx关掉

随后,再次进入到7-1 curl自己 会出现备份服务器上的网页

hash算法
hash的作用:保持会话一致
什么是会话?

ip hash 根据ip地址,然后得出一个值 这样就会永久保持会话。第一次访问1服务器 就永久访问1服务器
url hash 根据url 然后得出一个值 这样就会永久保持会话
ip hash实例:在7-1 代理服务上操作

因为第一次被curl到7-2上,所以一辈子都在7-2上

hash有个致命缺点,就是跟权重相关 例如权重是2,则hash/2 hash/(除以)总权重,所以会使用路径hash (url hash)
url hash
hash $requst_uri
在7-1 代理服务器主配置文件里面修改

然后再通过服务器7-1 去curl

cookie hash 缓存hash

案例根据cookic里面的关键字去查找
在7-1 代理服务器上主配置文件里面修改
然后重启

随后去curl

fair
根据响应时间来分配,响应时间短的优先分配
相关文章:
nginx(三)实现反向代理客户端 IP透传
正常情况下,客户端去访问代理服务器,然后代理服务器再取访问真实服务器,在真实服务器上,只能显示代理服务器的ip地址,而不显示客户端的ip地址,如果想让客户端的ip地址也能在真实服务端看见,这一…...
深入Java日志框架及其最佳实践
概述 在Java应用开发中,日志框架是确保应用稳定性和可观察性的关键组件。它帮助开发者记录应用的行为、诊断问题,并监控系统的健康状况。随着Java生态系统的不断发展,各种日志框架也应运而生,各有特点和优势。本文将详细探讨几个…...
threejs显示本地硬盘上的ply文件,通过webapi
由于ply文件是第三方提供的,threejs无法用绝路路径的方式显示ply 所以想通过webapi把ply通过url地址的方式给threejs 1.webapi部分 /// <summary>/// 获取PLY文件/// </summary>/// <returns></returns>[HttpPost(Name "GetPly&qu…...
代码随想录day10(2)字符串:反转字符串Ⅱ (leetcode541)
题目要求:给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前…...
【MySQL】_联合查询基础表
联合查询也称为多表查询,是将多个表联合到一起进行查询; 笛卡尔积是联合查询的基础,笛卡尔积其实就是一种排列组合,把两张表的记录尽可能地排列组合出n种情况: 以两张表:班级表与学生表为例,计…...
InnoDB存储引擎对MVCC的实现
MVCC MVCC的目的 在搞清楚MVCC之前,我们要搞懂一个问题,MVCC到底解决的是什么问题? 我用一句话概括,那就是为了解决读-写可以一起的问题! 在我们的印象里,InnoDB可以读读并发,不能读写并发,或者写写并发 这是很正常的想法,因为如果读写并发的化,会有并发问题 而对于写写…...
【精选】Java项目介绍和界面搭建——拼图小游戏 中
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 …...
C++ //练习 10.16 使用lambda编写你自己版本的biggies。
C Primer(第5版) 练习 10.16 练习 10.16 使用lambda编写你自己版本的biggies。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*******************************************************************…...
【misc | CTF】BUUCTF 二维码
天命:这题使用到脚本暴力破解压缩包文件里面的密码,还是比较有意思的 一开始是一个二维码,扫码进去有一个假flag 扔进图片隐写工具,啥也没有,都是同一个二维码 使用工具:foremost,直接分离图片&…...
OSCP靶场--Resourced
OSCP靶场–Resourced 考点(1.rpc枚举 2.crackmapexec密码喷洒,hash喷洒 3.ntds.dit system提取域hash 4.基于资源的约束委派攻击rbcd) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.188.175 --min-rate 2000 Starting Nmap 7.9…...
Vue路由(黑马程序员)
路由介绍 将资代码/vue-project(路由)/vue-project/src/views/tlias/DeptView.vue拷贝到我们当前EmpView.vue同级,其结构如下: 此时我们希望,实现点击侧边栏的部门管理,显示部门管理的信息,点击员工管理,显…...
【Java程序员面试专栏 算法思维】一 高频面试算法题:排序算法
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊排序算法,包括手撕排序算法,经典的TOPK问题以及区间合并,所以放到一篇Blog中集中练习 题目关键字解题思路时间空间快速排序双指针+递归+基准值分…...
sql注入之sqli-labs-less-1 错误注入
输入?id1 得到登录页面: 通过order by 函数试探: 5的时候报错 试探到3 的时候返回正确的值: 然后继续注入:?id -1 union select 1,2,3 -- 查看回显点: 开始查看数据库内容:id-1 union select 1,databa…...
React withRouter的使用及源码实现
一 基本介绍 作用: 把不是通过路由切换过来的组件中,将react-router 的 history、location、match 三个对象传入props对象上。比如首页! 默认情况下必须是经过路由匹配渲染的组件才存在this.props,才拥有路由参数,才能…...
c++之旅——第四弹
大家好啊,这里是c之旅第三弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 本篇文章的主…...
Mysql整理-主从复制
MySQL的主从复制是一种常见的数据复制和分布式数据共享方法。在这种架构中,一个MySQL服务器充当主(master)服务器,而一个或多个其他MySQL服务器充当从(slave)服务器。数据从主服务器复制到从服务器,实现数据的分布和备份。这种设置主要用于数据备份、读取扩展、灾难恢复…...
100个百万阅读公众号爆文案例
100个100万公众号爆文案例 自从公众号流量推送修改之后,原来的私域玩法一去不复返,公域公众号正在崛起 现在公众号的玩法就是找爆款,去对标,去学习,努力使自己的公众号进入流量池,然后吃流量主的收益 这里…...
UnityAPI的学习——Transform类
Transform类继承自Component类,并实现了IEnumberable接口。Transform是GameObject必须拥有得一个组件,用来管理所在GameObject对象的坐标位置、选择角度、和大小缩放。 Transform实现了IEnumberable接口,因此可以在程序中使用foreach()方法快…...
(全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
研究生英语读写教程基础级教师用书PDF 研究生英语读写教程提高级教师用书PDF pdf下载(完整版下载) (1)研究生英语读写教程基础级教师用书PDF (2)研究生英语读写教程基提高级教师用书PDF...
GO基本类型
Go语言同时提供了有符号和无符号的整数类型。 有符号整型:int、int8、int64、int32、int64无符号整型:uint、uint8、uint64、uint32、uint64、uintptr 有符号整型范围:-2^(n-1) 到 2^(n-1)-1 无符号整型范围: 0 到 2^n-1 实际开发中由于编…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
