反向代理和负载均衡

news2024/11/19 5:51:12

目录

步骤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://www.coloradmin.cn/o/1955321.html

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

相关文章

数据结构:队列(顺序存储和链式存储)

文章目录 1. 队列的概念和结构2. 队列的链式存储实现2.1 初始化2.2 判断队列是否为空2.3 入队列2.4 出队列2.5 取队头数据2.6 取队尾数据2.7 队列有效数据的个数2.8 打印队列数据2.9 销毁2.10 源代码 3. 队列的顺序存储实现(循环队列)3.1 初始化3.2 判断队列是否为空3.3 判断队…

五、获取树形结构数据递归写法

1、mysql库表字段 学习&#xff1a;构建表结构时的规范&#xff0c;字段类型的选择 CREATE TABLE pms_category (cat_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 分类id,name char(50) DEFAULT NULL COMMENT 分类名称,parent_cid bigint(20) DEFAULT NULL COMMENT 父分类…

2024年必知:9大项目成本管理系统推荐

本文将分享9大优质项目成本管理系统&#xff1a;PingCode、Worktile、中望软件、用友、智慧工地云平台、SAP ERP、Microsoft Project、Wrike、Zoho Projects。 在项目管理领域&#xff0c;控制成本往往是最挑战的一环&#xff0c;特别是在预算和资源受限的情况下。选择合适的项…

从0开始搭建vue + flask 旅游景点数据分析系统(二):搭建基础框架

这一期目标是把系统的布局给搭建起来&#xff0c;采用一个非常简单的后端管理风格&#xff0c;可以参考官方的页面 https://element.eleme.cn/#/zh-CN/component/container 下面我们开始搭建&#xff0c;首先&#xff0c;安装一下vue-router&#xff0c;element-ui npm insta…

【前端 12】js事件绑定

JavaScript 事件绑定 在Web开发中&#xff0c;事件绑定是实现用户与网页交互的重要机制。JavaScript 提供了多种方式来绑定和处理事件&#xff0c;使得开发者能够灵活地控制网页的行为。本文将详细介绍JavaScript中事件绑定的两种主要方式&#xff0c;并通过实例演示如何应用这…

查找(find)磁盘分区 压缩

一&#xff1a;查找的应用 find 查找位置 选项 参数 按用户查找 属主是root find /root -user root 按文件类型查找 文件类型为普通文件的 find /root -type f 文件类型为目录的 find /root -type d fin…

机器学习算法——常规算法,在同的业务场景也需要使用不同的算法(一)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

渗透测试——prime1靶场实战演练{常用工具}端口转发

文章目录 概要信息搜集 概要 靶机地址&#xff1a;https://www.vulnhub.com/entry/prime-1,358 信息搜集 nmap 扫网段存活ip及端口 找到除了网关外的ip&#xff0c;开放了80端口&#xff0c;登上去看看 是一个网站&#xff0c;直接上科技扫一扫目录 python dirsearch.py -u …

YUV/NV12、ARGB8888图像同比例缩放,不拉伸处理

1&#xff09;图像处理入门级程序设计&#xff0c;分享给将要学习或者正在学习图像开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 需求&#xff1a;基于SigmaStar平台SSC375&#xff0c;实…

深入源码:解析SpotBugs (2) 检测运行流程

1. 架构概述 SpotBugs的架构设计主要围绕以下几个核心组件展开&#xff1a; 分析引擎&#xff1a;这是SpotBugs的核心&#xff0c;负责读取Java字节码&#xff08;.class文件&#xff09;&#xff0c;并应用预定义的规则集来检测潜在的代码问题。规则集&#xff1a;一组预定义…

『 Linux 』线程控制

文章目录 线程库线程的创建线程库中的线程ID线程等待及线程退出C11 中的线程库线程库的线程与轻量型进程 线程库 在Linux内核中没有实际的线程概念,只有轻量级进程的概念,即使用task_struct内核数据结构模仿线程; 所以本质上在Linux内核中无法直接调用系统调用接口创建线程,只能…

人工智能学习①

LLM背景知识介绍 大语言模型 (LLM) 背景 用于理解和生成人类语言&#xff0c;能够处理诸如文本分类、问答、翻译和对话等多种自然语言任务。 语言模型 (Language Model, LM) &#xff1a;给定一个短语&#xff08;一个词组或者一句话&#xff09;语言模型可以生成&#xff0…

机器学习数学基础(1)--线性回归与逻辑回归

声明&#xff1a;本文章是根据网上资料&#xff0c;加上自己整理和理解而成&#xff0c;仅为记录自己学习的点点滴滴。可能有错误&#xff0c;欢迎大家指正。 1 线性回归和逻辑回归与机器学习的关系 线性回归属于机器学习 – 监督学习 – 回归 – 线性回归&#xff0c; 逻辑…

Apache DolphinScheduler Worker Task执行原理解析

大家好&#xff0c;我是蔡顺峰&#xff0c;是白鲸开源的高级数据工程师&#xff0c;同时也是Apache DolphinScheduler社区的committer和PMC member。今天我要分享的主题是《Worker Task执行原理》。 整个分享会分为三个章节&#xff1a; Apache DolphinScheduler的介绍Apache …

数据结构——二叉树定义

一、二叉树概念 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常称为左子节点和右子节点。每个子节点本身又可以是一个二叉树。二叉树在计算机科学中有着广泛的应用&#xff0c;例如在搜索算法、排序算法等领域 二叉树(Binary Tree)是n(n…

告别繁琐,2024年PDF合并神器搜罗

有时候我们下载得到的PDF文件可能是被拆分成多份文档&#xff0c;这样对于我们查看文件就会造成一定的困扰。这时候如果把他们合并为一份文件就能方便很多。这次我就介绍几款pdf合并工具来解决这个问题吧。 第一款EIDTOR 福昕PDF 链接&#xff1a;https://editor.foxitsoftwar…

C++ STL 容器之deque

deque与vector同属C STL容器&#xff0c;二者有些相似。deque 采用动态数组来管理元素&#xff0c;提供随机存取&#xff0c;它与vector 几乎一摸一样的接口。不同的是&#xff1a;deque的动态数组头尾都开放&#xff0c;能在头尾两端进行快速安插和散出。下面是deque与vector的…

android前台服务

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、使用2.1 添加权限2.2 新建…

nginx 版本升级

Nginx 的版本最开始使用的是 Nginx-1.18.0 &#xff0c; 由于服务升级&#xff0c;需要将 Nginx 的版本升级到 Nginx-1.19.7 &#xff0c;要求 Nginx 不能中断提供服务。 为了应对上述的需求&#xff0c;提供两种解决方案&#xff1a; 方案1&#xff1a; make upgrade 完成升…