反向代理和负载均衡

目录

步骤1 代理技术介绍

代理技术常见的类型

正向代理的用途

反向代理的作用

步骤2 反向代理配置

步骤3 负载均衡

1、路由模式(推荐)

2、桥接模式

3、服务直接返回模式

  4、负载均衡算法介绍

1、轮询法

2、随机法

3、最小连接法

步骤4 nginx负载均衡配置

修改配置文件

负载均衡配置说明

其他负载均衡配置策略

1、ip_hash

2、weight

3、fair(第三方)

4、url_hash


步骤1 代理技术介绍

代理技术,又称为代理服务器技术,是一种网络通信的中间设备。代理服务器作为客户端和目标服务器之间的中转站,可以接收客户端的请求并将其转发给目标服务器,然后将目标服务器的响应返回给客户端。代理服务器常常被用于提高网络访问速度、保护网络安全和隐藏客户端的真实IP地址。

代理技术常见的类型

  1. 正向代理:客户端通过正向代理服务器访问目标服务器。正向代理可以帮助客户端绕过网络限制,例如访问被封锁的网站。同时,正向代理也可以缓存客户端请求的内容,提高访问速度。

  2. 反向代理:客户端不直接与目标服务器通信,而是通过反向代理服务器来访问目标服务器。反向代理可以根据负载均衡算法将客户端请求分发到多个目标服务器上,实现请求的分流和负载均衡。此外,反向代理还可以提供安全性和高可用性,隐藏了真实的服务器IP地址,有效保护了服务器的安全。

  3. 透明代理:透明代理是指在不需要客户端进行任何特殊设置的情况下,将客户端的请求转发给目标服务器。透明代理可以在不影响网络体验的情况下为客户端提供网络优化和安全服务。

  4. 缓存代理:缓存代理可以在代理服务器上缓存目标服务器返回的数据,当客户端再次请求同样的数据时,可以直接从缓存中获取,提高访问速度。

  5. SSL代理:SSL代理是一种特殊类型的代理服务器,用于处理SSL/TLS加密的网络连接。SSL代理可以在客户端和目标服务器之间建立安全的加密通信,保护敏感信息的传输安全。

代理技术在网络通信中有着广泛的应用,既可以提高网络性能和安全性,也可以实现负载均衡和访问控制等功能。

正向代理 类似一个跳板机,代理访问外部资源。
    举个例子:
  我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
  客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。

 例如之前使用过这类软件例如CCproxy,[http://www.ccproxy.com](http://www.ccproxy.com/)/ 需要在浏览器中配置代理的地址。


  总结来说:正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
  

正向代理的用途

  (1)访问原来无法访问的资源,如google
  (2) 可以做缓存,加速访问资源
  (3)对客户端访问授权,上网进行认证
  (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息


  

反向代理的作用

  反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
  大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。


  (2)负载均衡,通过反向代理服务器来优化网站的负载

二者区别
  借用知乎两张图来表达:https://www.zhihu.com/question/24723688


步骤2 反向代理配置

cd /usr/local/nginx/conf/

mkdir vhost

编辑nginx.conf,在中间加入以下语句

include /usr/local/nginx/conf/vhost/*.conf;

这语句的意思是把vhost文件夹下的所有.conf文件加载过来(注意是.conf后缀名的文件),这么做的原因是方便以后维护,把每个域名做成一个.conf文件,通过主配置include进来,这样以后想维护某个域名,就只需直接对那个对应的.conf进行操作,而不会影响到其它的域名。

添加域名进行测试

编辑/etc/hosts文件

添加如下内容

192.168.116.130 www.xuyang.edu    (以本人姓名拼音举例)

在vhost目录下创建.conf文件并添加以下内容

server {

 listen 80;

 autoindex on;

 server_name www.testwyn.edu;

 access_log /usr/local/nginx/logs/access.log combined;

 index index.html index.htm index.jsp index.php;

 #error_page 404 /404.html;

 if ( $query_string ~* ".*[\;'\<\>].*" ){

 return 404;

 }

 location / {

 proxy_pass http://192.168.30.2;

 add_header Access-Control-Allow-Origin *;

 }

 }

虚拟机里浏览器访问www.xuyang.edu/ecshop/admin出现ecshop管理界面

外面浏览器访问需修改Windows hosts文件

以上是通过解析域名,代理到网页

下面是通过域名,访问文件

编辑/etc/hosts文件

添加

server {

 listen 80;

 autoindex off;

 server_name www.filewyn.org;

 access_log /usr/local/nginx/logs/access.log combined;

 index index.html index.htm index.jsp index.php;

 #error_page 404 /404.html;

 if ( $query_string ~* ".*[\;'\<\>].*" ){

 return 404;

 }

 location ~ /(mmall_fe|mmall_admin_fe)/dist/view/* {

 deny all;

 }

 location / {

 root /tmp/;

 add_header Access-Control-Allow-Origin *;

 }

 }

访问www.filexy.org/hello.txt

文件里的下一级时,浏览器会显示403Forbidden没有权限。但是直接通过网址域名来访问其子目录是可以的,只不过是不能通过主页面进入下一级。

步骤3 负载均衡

  负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。

1、路由模式(推荐)

路由模式的部署方式,服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。

2、桥接模式

桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。
  由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。

3、服务直接返回模式

这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。


  4、负载均衡算法介绍


  现有的负载均衡算法主要分为静态和动态两类。静态负载均衡算法以固定的概率分配任务,不考虑服务器的状态信息,如轮转算法、加权轮转算法等;动态负载均衡算法以服务器的实时负载状态信息来决定任务的分配,如最小连接法、加权最小连接法等。

1、轮询法

轮询法,就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。

2、随机法

随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因素。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。

3、最小连接法

最小连接法,将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个节点收到一个任务后连接数就会加1,当节点故障时就将节点权值设置为0,不再给节点分配任务。
  最小连接法适用于各个节点处理的性能相似时。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确的分配到剩余处理能力强的机器上。


步骤4 nginx负载均衡配置


  设置nginx的配置文件,实现负载均衡。顾名思义就是将多个请求分发到不同的服务上,实现均衡的负载,减小单个服务的压力。

修改配置文件

vim /usr/local/nginx/conf/nginx.conf

配置upstream,在http{}里 新增 upstream 指向启动另外两台服务器。webservers 可以起一个自己容易辨识的名字。

upstream webservers{

         server  192.168.30.2:8081;

         server  192.168.30.4:80;

}

在 server{} 里添加一个location,并且配置 proxy_pass(转发到负载服务上),(注意不要有同名的 比如已经有一个 location / 了,你再添加重启Nginx就会报错)

location / {

         proxy_pass http://webservers;     

}

默认 location / 可以注释掉,也可以在上面修改,我是直接注销掉的。
这里的 webservers 要和你配置 upstream 时起的名字一样。

修改完成后重启Nginx或重新加载配置

# 重新加载(要到Nginx安装目录执行)

systemctl daemon-reload

# 重新启动服务 (如果你添加了服务)

systemctl restart nginx.service

浏览器访问:192.168.30.3多访问几次,你会发现是轮训的

负载均衡配置说明

默认情况下,直接按照上面的配置后,如果后端有多个服务,采用的是轮询策略;

常用的可选配置包括:

weight 多台机器,可以配置权重值,权重高的服务将会优先被访问
down 某个服务配置down之后,这台服务将不会被访问
backup 配置了这个参数后,除非其他的服务都挂掉了,否则这台服务将不会被访问到

以weight 为例做简单的说明,在上面的配置中,补充weight参数

upstream webservers{

      server  192.168.30.2:8081 weight=8;

      server  192.168.30.4:8082 weight=2;

   }

重新加载配置,按照上面的测试步骤再次刷新页面,这时候可以发现,8081对于的这个服务将会被更多的访问到;

其他负载均衡配置策略

默认情况下,nginx采用的是轮询策略,nginx还提供了其他几种常用的负载均衡配置

1、ip_hash

每个请求按访问IP的hash结果进行分配,这样每个访客就可以固定访问一个后端服务,一定程度上可以解决session问题;

upstream webservers {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> ip_hash; server 192.168.30.2:80; server 192.168.30.3:8081; server 192.168.30.4:80;}

2、weight

weight代表权重,默认为1,权重越高,被分配的客户端请求就会越多

upstream webservers{

     server  192.168.30.3:8081 weight=8;

     server  192.168.30.4:80 weight=2;

  }

3、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的将会被优先分配

upstream webservers{

        server 192.168.30.3:8081;

        server 192.168.30.4:80;

        fair;

}

4、url_hash

按访问URL的hash结果分配。这样相同的url会被分配到同一个节点,主要为了提高缓存命中率。比如,为了提高访问性能,服务端有大量数据或者资源文件需要被缓存。使用这种策略,可以节省缓存空间,提高缓存命中率

upstream webservers{

    least_conn;

    server 192.168.30.3:8081;

    server 192.168.30.4:80;

}

以上不同的负载均衡策略均有各自不同的使用场景,请结合自身的实际情况进行合理的选择,同时,各自配置策略在实际使用的时候也不是孤立的,比如最小连接数可以搭配权重数一起使用。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

客户在哪儿AI——做真正管用的大客户获客方案

我们的目标是要打造一个真正“管用”的ToB大客户获客方案。以下是两个100%真实的案例&#xff0c;所有数据均为真实经营数据。一个是证明客户在哪儿AI对市场工作的颠覆性提升&#xff0c;另一个是证明客户在哪儿AI对决策层和销售工作的颠覆性提升。 客户在哪儿AI生产的是企业全…

唉~~量化策略越改越差了

最近收到藏经阁群友私信&#xff0c;问能不能在最近发布的轮动策略当中加入持仓时间的限制条件&#xff0c;买入某个ETF后&#xff0c;必须持有够7天才可以卖出。 其目的有二&#xff0c;第一是想减少市场杂音&#xff0c;减少不必要的交易&#xff0c;第二就是如果场外操作的话…

【JavaScript】详解Day.js:轻量级日期处理库的全面指南

文章目录 一、Day.js简介1. 什么是Day.js&#xff1f;2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…

Qt背景与环境搭建

目录 ​编辑 一、Qt背景 1.行业岗位介绍 2.什么是Qt 3.Qt的发展史 4.Qt支持的平台 5.Qt的版本和优点 5.1 版本 5.2 优点 6.Qt的应用场景 7.Qt 的成功案例 8.Qt 发展前景 二、环境搭建 1.Qt 的开发工具概述 2.Qt SDK 的下载和安装 2.1 Qt SDK 的下载 ​编辑 2…

Ascend算子开发

Device侧 1. 存储API 1.1 GlobalTensor 1.2 LocalTensor 可获取、设置值、获取大小。页可以通过[]获取 1.3 数据类型 2. Add样例 数据搬入&#xff1a;DataCopy调用计算接口&#xff1a;Add数据搬出&#xff1a;LocalTensor、EnQue、DeQue 2.1 核函数定义 x、y输入&#xff…

『 Linux 』线程概念

文章目录 什么是线程执行流线程与进程的关系页表构造及线程资源分配线程的轻量化线程的特点 什么是线程 线程本质上是进程的一个执行分支,用于处理进程中的代码和数据; 每个线程都可以执行独立不同的代码片段,这意味着在一个进程中可以同时执行多个任务; 同一个进程中的所有线程…

基于微信小程序+SpringBoot+Vue的社区超市管理系统(带1w+文档)

基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 为了让商品信息的管理模式进行升级&#xff0c;也为了更好的维护商品信息&#xff0c;社区超市管理系统的开发运用就显得很有必要&#xff0c;因为它不仅可…

全球奈拉滨市场规模预测:未来六年年复合增长率CAGR为1.1%

据恒州诚思研究&#xff0c;2023年全球奈拉滨市场规模大约为3.8亿元&#xff0c;预计未来六年年复合增长率CAGR为1.1%&#xff0c;到2030年市场规模将接近4.2亿元。这一增长反映了奈拉滨在全球医药行业中的重要性及其在未来发展中的潜在机会。随着科学的进一步发展和市场的扩展…

全网最详细Gradio教程系列5——Gradio Client: curl

全网最详细Gradio教程系列5——Gradio Client: curl 前言本篇摘要5. Gradio Client的三种使用方式5.3 Curl查询Gradio Apps5.3.1 安装5.3.2 获取Gradio程序的URL5.3.3 HF_TOKEN和身份认证1. POST/GET示例2. 整合命令&#xff1a;awk和read3. HF_TOKEN4. 身份认证 5.3.4 POST&am…

21 Python常用内置函数——zip()

zip() 函数用来把多个可迭代对象中的元素压缩到一起&#xff0c;返回一个可迭代的 zip 对象&#xff0c;其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组&#xff0c;最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。 可以这样理解这个函…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃&#xff0c;通过查看崩溃日志如下&#xff1a; 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常&#xff0c;进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

强者具备的三个思维

强者具备的三个思维&#xff0c;看看你占了几条&#xff1f; 一、不看自己需要什么&#xff0c;而是看环境和别人需要什么。满足他们&#xff0c;你就能把事情做成。 二、不追求稳定&#xff0c;而是享受不稳定。稳定的工作和生活&#xff0c;并不意味着你的技能已经娴熟。而…

SpringBoot上传超大文件导致Cannot read more than 2,147,483,647 into a byte array,问题解决办法

问题描述 报错: java.lang.IllegalArgumentException: Cannot read more than 2,147,483,647 into a byte array at org.apache.commons.io.IOUtils.lambda$toByteArray$0(IOUtils.java:2403) ~[commons-io-2.11.0.jar:2.11.0] at org.apache.commons.io.output.Thre…

C++学习日记 | LAB 10 运算符重载与友元函数

资料来源&#xff1a;南科大 于仕琪 C/C Program Design LINK&#xff1a;CPP/week10 at main ShiqiYu/CPP GitHub 一、本节内容 本节首先以一个例子具体演示和回顾操作符重载、友元函数以及重载<<操作符。习题部分则为各种运算符重载以及输入输出重载 1.1 Operator o…

支持向量机回归及其应用(附Python 案例代码)

使用支持向量机回归估计房价 让我们看看如何使用支持向量机&#xff08;SVM&#xff09;的概念构建一个回归器来估计房价。我们将使用sklearn中提供的数据集&#xff0c;其中每个数据点由13个属性定义。我们的目标是根据这些属性估计房价。 引言 支持向量回归&#xff08;SV…

WHAT - 一个 Github 仓库的 License 如何解读

目录 一、背景二、解读许可证说明的作用常见的开源许可证类型使用他人代码仓库时需要注意的事项结论 实践作为开发者1. 选择许可证类型2. 在 README 文件中编写许可证信息 作为使用者1. 确定权限2. 了解和遵守条款 总结 一、背景 我们经常在一些 Github 仓库里看到 License 部…

Cache 替换策略--PLRU算法详解

一、引言 LRU&#xff08;Least Recently Used&#xff09;是 cache 的经典替换策略之一&#xff0c;但当 Cache 的路数比较大时&#xff08;多路组相连结构&#xff09;&#xff0c;实现 LRU 的硬件开销就会变得很大。现代处理器一般会考虑使用 PLRU&#xff08;pseudo-LRU&a…

Vue.js 2 项目实战(八):小黑记事本组件版

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计初衷是通过采用简洁且强大的结构&#xff0c;使前端开发变得更简单和高效。以下是对 Vue.js 的详细介绍&#xff1a; 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&#xff0c;通过数据绑…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…

xctf--debug

第一眼看着给我吓了一跳 我还以为是什么很牛逼壳 结果就是dnspy打开 这个函数什么ID都没有 只能一个一个点 但是逻辑真的很清晰 之前BUU写的题太复杂了,感觉可以看看这些题静下心 这个时候看着 攻防世界逆向高手题之debug_攻防世界debug-CSDN博客 这个博主的(我好多东西…