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

根据响应时间来分配,响应时间短的优先分配

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

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

相关文章

matlab实现不同窗滤波器示例

1 汉明窗低通滤波器 : 在Matlab中使用汉明窗设计低通滤波器可以通过fir1函数实现。汉明窗通常用于设计滤波器,可以提供更突出的频率特性。 下面是一个示例代码,演示如何在Matlab中使用汉明窗设计低通滤波器: % 定义滤波器参数 fs …

景联文科技:引领战场数据标注服务,赋能态势感知升级

自21世纪初,信息化战争使战场环境变得更为复杂和难以预测,持续涌入的海量、多样化、多来源和高维度数据,加大了指挥员的认知负担,使其需要具备更强的数据处理能力。 同时,计算机技术和人工智能技术的飞速发展&#xff…

机试指南:Ch5:线性数据结构 Ch6:递归与分治

文章目录 第5章 线性数据结构1.向量 vector2.队列 queue(1)队列的特点、应用(2)基本操作(3)例题例题1:约瑟夫问题2 (难度:中等) (4)习题习题1:排队打饭 (难度:中等) 3.栈 stack(1)栈…

进程的通信以及信号的学习

一,进程的通信: 种类:1.管道 2.信号 3.消息队列 4.共享内存 5.信号灯 6.套接字 1.管道: 1.无名管道 无名管道只能用于具有亲缘关系的进程间通信 pipe int pipe(int pipefd[2]); 功能: 创建一个无名管道 …

NodeJS安装

1. NodeJS官网下载与安装 链接 2. 查看NodeJS安装版本  3. 查看npm版本  4.vscode安装4 https://code.visualstudio.com/

亚马逊自养号测评:如何安全搭建环境,有效规避风险

要在亚马逊上进行自养号测评,构建一个真实的国外环境至关重要。这包括模拟国外的服务器、IP地址、浏览器环境,甚至支付方式,以创建一个完整的国际操作环境。这样的环境能让我们自由注册、养号并下单,确保所有操作均符合国际规范。…

vue3+vite+ts配置多个代理并解决报404问题

之前配置接口代理总是报404,明明接口地址是对的但还是报是因数写法不对;用了vue2中的写法 pathRewrite改为rewrite 根路径下创建env文件根据自己需要名命 .env.development文件内容 # just a flag ENVdevelopment# static前缀 VITE_APP_PUBLIC_PREFIX"" # 基础模块…

xlive.dll文件丢失了要怎么处理?快速修复xlive.dll的方法

涉及到Windows系统上运行游戏或应用程序时,xlive.dll文件丢失可能成为一个影响体验的常见错误。这个DLL(动态链接库)文件是Microsoft Games for Windows LIVE的一部分,对于确保很多游戏和程序能够正常运行至关重要。如果您在尝试启…

如何运行github上的项目

为了讲明白这个过程,特意做了一个相对来说比较好读懂的原理图,希望和我一样初学的小伙伴也能很快上手哈😊 在Github中找到想要部署的项目,这里以BartoszJarocki/CV(线上简历📄)项目为例 先从头…

SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突

SQLSERVER 2014 删除数据库定时备份任务提示失败DELETE 语句与 REFERENCE 约束“FK_subplan_job_id“冲突 ,错误如图: 问题原因:不能直接删除作业 任务,需要先删除计划里面的日志、删除代理作业、删除子计划以后才能删除作业。 解…

java面试(网络)

TCP和UDP有什么区别?TCP三次握手不是两次? TCP:面向连接,可靠的,传输层通信协议。点对点,占用资源多,效率低。 UDP:无连接,不可靠,传输层通信协议。广播&…

如何在Linux使用Docker部署Nexus容器并实现公网访问本地仓库【内网穿透】

文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus Nexus是一个仓库管理工具,用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关,可…

服务器数据恢复-异常断电导致服务器硬盘离线的数据恢复案例

服务器数据恢复环境: dell某型号服务器中有一组通过raid卡组建的raid10,该raid阵列中一共有4块磁盘。上层部署XenServer虚拟化平台,作为网站服务器使用。 服务器故障: 服务器异常断电导致服务器上的一台虚拟机不可用。需要恢复这…

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理:Join 小技巧:提升数据的处理速度 本文是在原本sql闯关的基础上总结得来,加入了自己的理解以及疑问解答(by GPT4) 原活动链接 用到的数据:链接 提取码:l03e 目录 1. 课前小问…

神经网络系列---常用梯度下降算法

文章目录 常用梯度下降算法随机梯度下降(Stochastic Gradient Descent,SGD):随机梯度下降数学公式:代码演示 批量梯度下降(Batch Gradient Descent)批量梯度下降数学公式:代码演示 小…

五种查看Spring容器中bean的方法

五种查看Spring容器中bean的方法 在Spring应用程序中,了解和查看容器中的Bean是进行调试和问题排查的关键。Spring提供了多种方法来查看容器中注册的Bean,以便我们深入了解应用程序的内部结构和调试潜在问题。本文将介绍五种常用的查看Spring容器中Bean的…

如何在宝塔面板中设置FTP文件传输服务并实现远程文件管理

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能,用于设置和管理FTP服务。通过宝塔FTP,用户可以创建FTP账号,配置FTP用户权限…

Docker使用数据卷自定义镜像Dockerfile

目录 一、数据卷 1.1、简介 1.2、用途 1.3、特性: 1.4、数据卷相关操作 1.5、使用情况 二、自定义镜像Dockerfile 2.1、Dockerfile 2.1、使用情况 2.3、具体操作 a、自定义centos 创建文件 编辑内容 制作镜像 测试 b、自定义tomcat 创建文件 编…

人工智能到深度学习:药物发现的机器智能方法(综述学习)

Artificial intelligence to deep learning: machine intelligence approach for drug discovery - PubMed (nih.gov) 人工神经网络、深度神经网络、支持向量机、分类和回归、生成对抗网络、符号学习和元学习是应用于药物设计和发现过程的算法的例子。人工智能已应用于药物设计…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题?比方说一个算法,它的 input 和 output 是什么?问题的条件是什么) 这篇文章提…