谁能解释一下nginx反向代理是什么意思?

谁能解释一下nginx反向代理是什么意思?,第1张

nginx反向代理的意思:就是代理内部服务器对外进行服务的 nginx 代理服务。

nginx反向代理的反向性在于:Nginx作为负载均衡服务时Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。

反向代理的方向与正向代理相反,代表外部网络用户向内部服务器发出请求,即接收来自Internet上用户的连接请求,并将这些请求转发给内部网络上的服务器,然后将从内部服务器上得到的响应返回给Internet上请求连接的客户。

反向效果:对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。用户不需要知道目标服务器的地址,作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

扩展资料:

反向代理的优势:

1、加快了对内部服务器的访问速度

在内部服务器前放置两台反向代理服务器,分别连接到教育网和公网,这样公网用户就可以直接通过公网线路访问学校服务器,从而避开了公网和教育网之间拥挤的链路。同时反向代理服务器的缓存功能也加快了用户的访问速度。

2、节约了有限的IP资源

校园网内部服务器除使用教育网地址外,也会采用公网的IP地址对外提供服务,公网分配的IP地址数目是有限的,如果每个服务器有分配-个公网地址,那是不可能的,通过反向代理技术很好地解决了IP地址不足的问题。

-nginx

-反向代理

但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的代理服务是不能实现的,需要使用反向代理来实现。

一.反向代理的概念

Web服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某个WEB服务器时,通过DNS服务器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web服务器的IP地址,这时Reverse Proxy Server设备充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被卸载到反向代理服务上。不但能够防止外部网主机直接和web服务器直接通信带来的安全隐患,而且能够很大程度上减轻web服务器的负担,提高访问速度。

二.反向代理和其它代理的比较

下面将对几种典型的代理服务作一个简单的比较。在网络上常见的代理服务器有三种:

1. 标准的代理缓冲服务器

一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

2. 透明代理缓冲服务器

透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。

3. 反向代理缓冲服务器

反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

三.反向代理工作原理

代理主要用在网络连接方面,不同类型的代理用于不同类型的连接。有一些代理用于隐藏用户的身份,而另外一些代理用于隐藏服务器的信息。常见的代理类型有正向代理和反向代理。这两种代理的名字有些相近,不过差别却非常大。

正向代理也就是大家常说的“代理”。用户向代理服务器发送请求,代理服务器从网络中检索数据。正向代理最典型的应用场景就是绕过网络限制。比如你们学校或公司的网络限制访问抖音,可以通过设置一台代理服务器,然后不直接连接抖音的服务,而是走代理,让代理来访问抖音的服务。

目的服务收到的请求来源IP会是代理服务器的IP,而不是用户的IP。这使得代理服务器可以提供一定的匿名性。

与正向代理功能相近的是NAT,两者都可以通过私有IP地址提供互联网访问。不过这两种技术在TCP/IP协议栈中的位置不同。NAT工作在网络层,而代理工作在应用层。对使用者来说,NAT对各种应用程序都是透明的;而使用代理则必须在应用程序中指定代理服务器的主机地址。

比如,使用NAT访问网页,不需要在浏览器上进行任何配置;而要使用代理访问网页,必须要在浏览器中指定代理的IP地址,如果代理仅支持HTTP协议,则只能通过代理访问Web服务器,不能访问FTP服务器。

由于NAT并非针对应用程序,因此在访问互联网时,NAT提供了比代理更高的可伸缩性。不过,NAT无法提供基于用户名和密码的身份验证。而代理支持身份验证,可以配置代理服务器仅允许特定用户访问互联网。

Web代理是最常用的正向代理,用于代理HTTP请求。除了会把完整的url传递过去外,来自客户端的请求与常规HTTP请求几乎没有什么两样。下面是一个请求的例子:

代理服务器收到请求后,向目标服务器发起请求,并且返回响应,比如:

上面的例子只对HTTP协议生效。有一些Web代理允许通过HTTP CONNECT方法建立通信隧道,利用这个隧道,代理服务器可以转发任意TCP数据包。

通过CONNECT方法,客户端要求HTTP代理服务器将TCP连接转发到所需的目的地;然后,服务器代表客户端向目标服务器发起连接。服务器建立连接后,代理服务器将继续与客户端之间来回代理TCP数据流。在上面的过程中,只有初始的连接请求是HTTP,之后服务器仅代理建立的TCP连接。

客户端连接到代理服务器,在请求中指定主机和端口,例子如下:

如果代理服务器允许连接并且连接到指定的主机,返回2XX成功响应:

现在,客户端发送到代理服务器的所有数据都蒋被转发给远程主机。

流行的HTTP代理服务器软件有Haproxy、Apache、Squid等。

反向代理一般用于控制对专用网络上服务器的访问。它代表一个客户端从一个或多个服务器检索资源,然后将这些资源返回给客户端,好像资源源自代理服务器本身一样。

流行的Web服务器经常使用反向代理功能,从而屏蔽HTTP功能“较弱”的应用程序框架。这里的“较弱”主要指的是处理大量负载能力比较弱,以及处理不同形式的请求格式的能力比较弱,比如HTTP协议就有HTTP(S)1x,HTTP(S) 2x多个版本。反向代理可以将HTTPS请求转换为HTTP请求、暂时缓存请求以保护后端服务器、处理一些cookie和会话数据等等。

反向代理是非常有用的。常见用途如下:

与正向代理充当关联的客户端与任意服务器中介不同,反向代理是任意客户端与关联服务器的中介。换句话说,正向代理代表客户端,而反向代理代表服务器。

  一、反向代理:Web服务器的“经纪人”

  11 反向代理初印象

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

  Nginx搭建反向代理服务器过程详解

  从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发。

  12 反向代理的作用

  ①保护网站安全:任何来自Internet的请求都必须先经过代理服务器;Nginx搭建反向代理服务器过程详解

  ②通过配置缓存功能加速Web请求:可以缓存真实Web服务器上的某些静态资源,减轻真实Web服务器的负载压力;Nginx搭建反向代理服务器过程详解

  ③实现负载均衡:充当负载均衡服务器均衡地分发请求,平衡集群中各个服务器的负载压力;Nginx搭建反向代理服务器过程详解

  二、初识Nginx:简单却不平凡

  21 Nginx是神马?

  Nginx搭建反向代理服务器过程详解

  Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

  Source:Nginx(发音同engine x),它是由俄罗斯程序员Igor Sysoev所开发的。起初是供俄国大型的门户网站及搜索引擎Rambler(俄语:Рамблер)使用。此软件BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。

  说到Web服务器,Apache服务器和IIS服务器是两大巨头;但是运行速度更快、更灵活的对手:Nginx 正在迎头赶上。

  22 Nginx的应用现状

  Nginx 已经在俄罗斯最大的门户网站── Rambler Media(wwwramblerru)上运行了3年时间,同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。

  Nginx搭建反向代理服务器过程详解Nginx搭建反向代理服务器过程详解Nginx搭建反向代理服务器过程详解Nginx搭建反向代理服务器过程详解Nginx搭建反向代理服务器过程详解在国内,已经有 淘宝、新浪博客、新浪播客、网易新闻、六间房、56com、Discuz!、水木社区、豆瓣、YUPOO、海内、迅雷在线 等多家网站使用 Nginx 作为Web服务器或反向代理服务器。

  23 Nginx的核心特点

  (1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;(2)配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置;(3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。(这得益于Nginx使用了最新的epoll模型);PS:对于一个Web服务器来说,首先看一个请求的基本过程:建立连接—接收数据—发送数据,在系统底层看来 :上述过程(建立连接—接收数据—发送数据)在系统底层就是读写事件。

  ①如果采用阻塞调用的方式,当读写事件没有准备好时,必然不能够进行读写事件,那么久只好等待,等事件准备好了,才能进行读写事件,那么请求就会被耽搁 。

  ②既然没有准备好阻塞调用不行,那么采用非阻塞调用方式。非阻塞就是:事件马上返回,告诉你事件还没准备好呢,你慌什么,过会再来吧。好吧,你过一会,再来检查一下事件,直到事件准备好了为止,在这期间,你就可以先去做其它事情,然后再来看看事件好了没。虽然不阻塞了,但你得不时地过来检查一下事件的状态,你可以做更多的事情了,但带来的开销也是不小的。

  (4)事件驱动:通信机制采用epoll模型,支持更大的并发连接。

  ①非阻塞通过不断检查事件的状态来判断是否进行读写操作,这样带来的开销很大,因此就有了异步非阻塞的事件处理机制。这种机制让你可以同时监控多个事件,调用他们是阻塞的,但可以设置超时时间,在超时时间之内,如果有事件准备好了,就返回。这种机制解决了上面阻塞调用与非阻塞调用的两个问题。

  ②以epoll模型为例:当事件没有准备好时,就放入epoll(队列)里面。如果有事件准备好了,那么就去处 理;如果事件返回的是EAGAIN,那么继续将其放入epoll里面。从而,只要有事件准备好了,我们就去处理它,只有当所有事件都没有准备好时,才在 epoll里面等着。这样,我们就可以并发处理大量的并发了,当然,这里的并发请求,是指未处理完的请求,线程只有一个,所以同时能处理的请求当然只有一 个了,只是在请求间进行不断地切换而已,切换也是因为异步事件未准备好,而主动让出的。这里的切换是没有任何代价,你可以理解为循环处理多个准备好的事 件,事实上就是这样的。

  ③与多线程方式相比,这种事件处理方式是有很大的优势的,不需要创建线程,每个请求占用的内存也很少,没有上下文切换, 事件处理非常的轻量级,并发数再多也不会导致无谓的资源浪费(上下文切换)。对于IIS服务器,每个请求会独占一个工作线程,当并发数上到几千时,就同时 有几千的线程在处理请求了。这对操作系统来说,是个不小的挑战:因为线程带来的内存占用非常大,线程的上下文切换带来的cpu开销很大,自然性能就上不 去,从而导致在高并发场景下性能下降严重。

  总结:通过异步非阻塞的事件处理机制,Nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级。

  (5)Master/Worker结构:一个master进程,生成一个或多个worker进程。

  Nginx搭建反向代理服务器过程详解

  PS:Master-Worker设计模式核心思想是将原来串行的逻辑并行化, 并将逻辑拆分成很多独立模块并行执行。其中主要包含两个主要组件Master和Worker,Master主要将逻辑进行拆分,拆分为互相独立的部分,同 时维护了Worker队列,将每个独立部分下发到多个Worker并行执行,Worker主要进行实际逻辑计算,并将结果返回给Master。

  问:nginx采用这种进程模型有什么好处?

  答:采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,Master 进程则很快重新启动新的Worker进程。当然,Worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前Worker上的所有请求失 败,不过不会影响到所有请求,所以降低了风险。

  (6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M10=150M)。

  (7)内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问。

  (8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

  (9)稳定性高:用于反向代理,宕机的概率微乎其微。

  三、构建实战:Nginx+IIS构筑Web服务器集群的负载均衡这里我们主要在Windows环境下,通过将同一个Web网站部署到不同服务器的IIS上,再通过一个统一的Nginx反响代理服务器对外提供统一访问接入,实现一个最简化的反向代理和负载均衡服务。但是,受限于实验条件, 我们这里主要在一台计算机上进行反向代理、IIS集群的模拟,具体的实验环境如下图所示:我们将nginx服务和web网站都部署在一台计算机 上,nginx监听http80端口,而web网站分别以不同的端口号(这里是8050及8060)部署在同一个IIS服务器上,用户访问 localhost时,nginx作为反向代理将请求均衡地转发给两个IIS中不同端口的Web应用程序进行处理。虽然实验环境很简单而且有限,但是对于 一个简单的负载均衡效果而言,本文是可以达到并且展示的。

  Nginx搭建反向代理服务器过程详解

  31 准备一个ASPNET网站部署到IIS服务器集群中(1)在VS中新建一个ASPNET Web应用程序,但是为了在一台计算机上展示效果,我们将这个Web程序复制一份,并修改两个Web程序的Defaultaspx,让其的首页显示不同 的一点信息。这里Web1展示的是“The First Web:”,而Web2展示的则是“The Second Web”。

  Nginx搭建反向代理服务器过程详解

  (2)调试运行,看看两个网站的效果如何?

  ①Web1的展示效果:

  Nginx搭建反向代理服务器过程详解

  ②Web2的展示效果:

  Nginx搭建反向代理服务器过程详解

  ③部署到IIS中,分配不同的端口号:这里我选择了Web1:8050,Web2:8060Nginx搭建反向代理服务器过程详解

  (3)总结:在真实环境中,构建Web应用服务器集群的实现是将同一个Web应用程序部署到Web服务器集群中的多个Web服务器上。

  32 下载Nginx并部署到服务器中作为自启动的Windows服务(1)到Nginx官网下载Nginx的Windows版本:http://nginxorg/en/downloadhtml(这里我们使用nginx/Windows-147版本进行实验,本文底部有下载地址)(2)解压到磁盘任意目录,例如这里我解压到了:D:\Servers\nginx-147(3)启动、停止和重新加载服务:通过cmd以守护进程方式启动nginxexe:start nginxexe,停止服务:nginx -s stop,重新加载配置:nginx -s reload;Nginx搭建反向代理服务器过程详解

  (4)每次以cmd方式启动Nginx服务不符合实际要求,于是我们想到将其注册为Windows服务,并设置为自动启动模式。这里,我们使用一个 不错的小程序:“Windows Service Wrapper”,将nginxexe注册为Windows服务,具体的步凑如下:

  ①下载最新版的 Windows Service Wrapper 程序,比如我下载的名称是 “winsw-18-binexe”(本文底部有下载地址),然后把它命名成你想要的名字(比如: “nginx-serviceexe”,当然,你也可以不改名)②将重命名后的 nginx-serviceexe 复制到 nginx 的安装目录(比如,我这里是 “D:\Servers\nginx-147″)③在同一个目录下创建一个Windows Service Wrapper 的XML配置文件,名称必须与第一步重命名时使用的名称一致(比如我这里是 “nginx-servicexml”, 如果,你没有重命名,则应该是 “winsw-18-binxml”),这个XML的内容如下:

  <xml version="10" encoding="UTF-8" >

  <service>

  <id>nginx</id>

  <name>Nginx Service</name>

  <description>High Performance Nginx Service</description>

  <executable>D:\Servers\nginx-147\nginxexe</executable>

  <logpath>D:\Servers\nginx-147\</logpath>

  <logmode>roll</logmode>

  <depend></depend>

  <startargument>-p D:\Servers\nginx-147</startargument>

  <stopargument>-p D:\Servers\nginx-147 -s stop</stopargument>

  </service>

  ④在命令行下执行以下命令,以便将其注册成Windows服务:nginx-serviceexe installNginx搭建反向代理服务器过程详解

  ⑤接下来就可以在Windows服务列表看到Nginx服务了,这里我们可以将其设置为自动启动了:

  Nginx搭建反向代理服务器过程详解

  (5)总结:在Windows环境中,要对外提供的Windows服务一般都要将其启动类型设置为自动。

  33 修改Nginx核心配置文件nginxconf

  (1)进程数与每个进程的最大连接数:

  nginx进程数,建议设置为等于CPU总核心数

  单个进程最大连接数,那么该服务器的最大连接数=连接数进程数Nginx搭建反向代理服务器过程详解

  (2)Nginx的基本配置:

  监听端口一般都为http端口:80;

  域名可以有多个,用空格隔开:例如 server_name wwwha97com ha97com;Nginx搭建反向代理服务器过程详解

  (3)负载均衡列表基本配置:

  location / {}:对aspx后缀的进行负载均衡请求,假如我们要对所有的aspx后缀的文件进行负载均衡时,可以这样写:location ~ \aspx$ {}

  proxy_pass:请求转向自定义的服务器列表,这里我们将请求都转向标识为http://cuitccolcom的负载均衡服务器列表;Nginx搭建反向代理服务器过程详解

  在负载均衡服务器列表的配置中,weight是权重,可以根据机器配置定义权重(如果某台服务器的硬件配置十分好,可以处理更多的请求,那么可以 为其设置一个比较高的weight;而有一台的服务器的硬件配置比较差,那么可以将前一台的weight配置为weight=2,后一台差的配置为 weight=1)。weigth参数表示权值,权值越高被分配到的几率越大;Nginx搭建反向代理服务器过程详解

  (4)总结:最基本的Nginx配置差不多就是上面这些内容,当然仅仅是最基础的配置。(详细的配置内容请下载底部的nginx-147详细查看)34 添加Nginx对于静态文件的缓存配置

  为了提高响应速度,减轻真实服务器的负载,对于静态资源我们可以在反向代理服务器中进行缓存,这也是反向代理服务器的一个重要的作用。

  (1)缓存静态资源之文件

  root /nginx-147/staticresources/image:对于配置中提到的jpg/png等文件均定为到/nginx-147/staticresources/image文件夹中进行寻找匹配并将文件返回;expires 7d:过期时效为7天,静态文件不怎么更新,过期时效可以设大一点,如果频繁更新,则可以设置得小一点;TIPS:下面的样式、脚本缓存配置同这里一样,只是定位的文件夹不一样而已,不再赘述。

  Nginx搭建反向代理服务器过程详解

  (2)缓存静态资源之样式文件

  Nginx搭建反向代理服务器过程详解

  (3)缓存静态资源之脚本文件

  Nginx搭建反向代理服务器过程详解

  (4)在nginx服务文件夹中创建静态资源文件夹,并要缓存的静态文件拷贝进去:这里我主要将Web程序中用到的image、css以及js文件拷贝了进去;Nginx搭建反向代理服务器过程详解

  (5)总结:通过配置静态文件的缓存设置,对于这些静态文件的请求可以直接从反向代理服务器中直接返回,而无需再将这些静态资源请求转发到具体的Web服务器进行处理了,可以提高响应速度,减轻真实Web服务器的负载压力。

  35 简单测试Nginx反向代理实现负载均衡效果(1)第一次访问http://localhost/Defaultaspx时从127001:8050处理响应返回结果(2)第二次访问http://localhost/Defaultaspx时从127001:8060处理响应返回结果(3)多次访问http://localhost/Defaultaspx时的截屏:

  Nginx搭建反向代理服务器过程详解

  学习小结

  在本文中,借助了Nginx这个神器简单地在Windows环境下搭建了一个反向代理服务,并模拟了一个IIS服务器集群的负载均衡效果。从这个 DEMO中,我们可以简单地感受到反向代理为我们所做的事情,并体会负载均衡是怎么一回事。但是,在目前大多数的应用中,都会将Nginx部署在 Linux服务器中,并且会做一些针对负载均衡的优化配置,这里我们所做的仅仅就是一个小小的使用而已(just修改一下配置文件)。不过,万丈高楼平地 起,前期的小小体会,也会帮助我们向后期的深入学习奠定一点点的基础。

  突然在QQ空间里看到了朋友送的礼物,猛然发现今天居然是我的阳历生日,好吧,我祝我自己生日快乐,希望自己在未来的日子中能够做更多的实践,分享更多的内容。当然,如果你觉得本文还可以,那也麻烦点个赞,不要吝啬你的鼠标左键哟。

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;此时就涉及到两个角色,一个是被代理角色,一个是目标角色。

被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店,客人到 adidas 专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是 adidas 厂家,目标角色就是用户。

说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。

在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的。

此时大家可能都会用一个操作 FQ 进行访问,FQ 的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!

上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

来看个示意图(我把客户端和正向代理框在一块,同属于一个环境,后面我有介绍):

客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的 IP 地址,还有代理程序的端口。

如下图:

明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我国的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了。

此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题。

某宝网站中大部分功能也是直接使用 Nginx 进行反向代理实现的,并且通过封装 Nginx 和其他的组件之后起了个高大上的名字: Tengine 。有兴趣的童鞋可以访问 Tengine 的官网查看具体的信息

那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图(我把服务器和反向代理框在一块,同属于一个环境,后面我有介绍):

通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。

此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,Nginx 扮演的就是一个反向代理角色。

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

项目场景

通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在同一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。

具体的拓扑图如下:

截了一张图来说明正向代理和反向代理二者之间的区别,如下图:

我们已经明确了所谓代理服务器的概念,那么接下来,Nginx 扮演了反向代理服务器的角色,它是依据什么样的规则进行请求分发的呢?不用的项目应用场景,分发的规则是否可以控制呢?

这里提到的客户端发送的、Nginx 反向代理服务器接收到的请求数量,就是我们说的负载量。请求数量按照一定的规则进行分发,到不同的服务器处理的规则,就是一种均衡规则。

所以将服务器接收到的请求按照规则分发的过程,称为负载均衡。

负载均衡在实际项目操作过程中,有硬件负载均衡和软件负载均衡两种,硬件负载均衡也称为硬负载,如 F5 负载均衡,相对造价昂贵成本较高。

但是数据的稳定性安全性等等有非常好的保障,如中国移动中国联通这样的公司才会选择硬负载进行操作。

更多的公司考虑到成本原因,会选择使用软件负载均衡,软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

Nginx 支持的负载均衡调度算法方式如下:

Web 服务器对比

源自: https://baijiahaobaiducom/sid=1652608869911988442&wfr=spider&for=pc

1、基于IP代理

2、基于域名代理

3、基于端口代理

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占用内存少,并发能力强,是我们在Web开发中最常用的工具之一。

Nginx反向代理的主要作用

Nginx配置反向代理时,是安装在目的主机端,主要用于转发客户机请求,后台有多个http服务器提供服务,Nginx的功能就是把请求转发给后面的服务器,决定哪台目标主机来处理当前请求。

此外,Nginx能提供性能稳定、并且提供配置灵活的转发功能。它可以根据不同的正则匹配,采取不同的转发策略,并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,它可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

在了解正向代理与反向代理之前,我们要普及一个小知识,即Web服务器。

Web Server中文名称叫网页服务器或Web服务器,它可以解析(handles)HTTP协议。Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。

接下来进入主题,什么是正向代理?

正向代理服务器,用户可以知道Web服务的数据库等系统的IP地址和端口号等敏感息,由于暴露了这些关键信息,容易遭受到恶意攻击所以安全性比较差。

正向代理的典型应用就是为火墙内局域网局域网客户端提供访问Internet的途径。其次使用正向代理还可以实使用缓冲特性减少网络使用率以及权限验证等功能,如上网权限。

一般对于企业内部管理系统,使用正向代理的方式,释放专门的网络带宽,特定域名实现某些功能只能有部分员工有权限访问。

什么又是反向代理?

反向代理用到了反向代理服务器,使用反向代理,典型的应用是将防火墙后面的服务器提供给Intenet用户访问,隐藏了Web应用服务,如数据库的IP地址、端口号等信息,提高了系统的安全性等。同时使用反向代理还可以实现多台服务器的负载均衡,启用高级的URL和管理技术,使处于不同Web服务器系统的Web界面同时存在一个URL空间下,提高系统性能。

对于互联网行业,如理财应用,为实现系统的安全性,采用反向代理的方式,对用户隐藏的后台应用的部署方式、结构等敏感信息,提供一个统一的域名和给用户访问。

用一句话概述的话:正向代理与反向代理的区别在于代理的对象不一样,正向代理代理的对象是客户端,反向代理代理的对象是服务端。

反向代理: reverse proxy, 指的是代理外网用户的请求到内部的指定的服务器, 并将数据返回给用户的一种方式, 这是用的比较多的一种方式

Nginx除了可以为企业提供高性能的web服务之外, 另外还可以将Nginx本身不具备的请求通过某种预定义的协议转发至其他服务器处理, 不同的协议就是Nginx服务器与其他服务器进行通信的一种规范, 主要在不同的场景使用以下模块实现不同的功能

生成环境部署架构:

访问逻辑图:

Nginx反向代理http服务:

1 proxy_pass

2 proxy_hide_header field

修改前, 响应报文头部会携带ETag信息

修改后ETag信息被隐藏

3 proxy_pass_header field

4 proxy_pass_request_body

5 proxy_pass_request_headers

6 proxy_set_header

由于proxy_set_header只是修改了请求报文的头部信息, 添加了自定义的字段, 因此, 还需要在后端服务器修改日志定义格式, 才能方便将客户端ip记录到日志信息中

注意1:通过set_proxy_header自定义变量只是给请求报文添加了一个自定义的字段, 其字段值是人为根据系统内置变量设定的

注意2: 这种方法, 在多级代理的情况下, 并不能将客户端ip, 逐层的传给后端服务器, 而是需要利用$proxy_add_x_forwarded_for变量实现

注意3: 如果一定要使用proxy_set_header去传递客户端ip和每一层代理的ip地址, 那么需要在每一层nginx代理都开启proxy_set_header, 并且设置不同的自定义变量去引用nginx自带变量$remote_addr, 这样每一级nginx都会记录上一级, 也就包括客户端的ip地址, 同时, 在后端服务器的日志格式中, 要添加多个nginx自定义的变量, 这样也可以把客户端ip和中间经过的代理的ip全部传递给后端的服务器

proxy_add_x_forwarded_for实现多级**地址透传示例: 需要在每一级代理都开启

实验环境:

7 有关反向代理时间的几个参数

8 proxy_ignore_client_abort

9 hash表大小的设置

客户端 ----- http协议 ------- nginx(代理服务器,100086) ----- http --- apache (100085)

客户端, 通过访问nginx上定义的虚拟主机中的server_name域名, 通过内部定义的location匹配规则, 被转发到100085服务器

代理服务器与后端服务器连接出现问题可能发生的报错:

如果后端服务器想把资源放到固定的目录下, 也可以自定义, 比如存到/var/www/html/static, 那么nginx的location就要修改为如下:

缓存功能相关参数:

实验环境:

proxy_pass 可以让Nginx将客户端请求转发至后端单台服务器, 但是无法转发至特定的一组服务器, 而且不能对后端服务器提供相应的服务器状态监测

Nginx可以基于 ngx_http_upstream_module 模块提供服务器分组转发, 权重分配, 状态监测, 使用不同的调度算法等高级功能

关于ip_forward

注意: 本实验过程要先关闭缓存

访问固定的URI会被调度到相同的服务器

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 谁能解释一下nginx反向代理是什么意思?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情