什么是反向代理

         通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。

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

 

如下图:

nginx反向代理服务器_nginx


代理服务器与反向代理服务器


代理服务器通常分为两类,即转发代理(forwardproxy)服务器和反向代理(reverse proxy)服务器。转发代理服务器又通常简称为代理服务器,我们常提到的代理服务器就指的是转发代理服务器。

 

转发代理服务器

 

普通的转发代理服务器是客户端与原始服务器之间的一个中间服务器。为了从原始服务器获取内容,客户端发送请求到代理服务器,然后代理服务器从原始服务器中获取内容再返回给客户端。客户端必须专门地配置转发代理来访问其他站点,如在浏览器中配置代理服务器地址及端口号等。

 

转发代理服务器的一个典型应用就是为处于防火墙后的内部客户端提供访问外部Internet网,比如校园网用户通过代理访问国外网站,公司内网用户通过公司的统一代理访问外部Internet网站等。转发代理服务器也能够使用缓存来缓解原始服务器负载,提供响应速度。

 

反向代理服务器

 

而反向代理服务器则相反,在客户端来看它就像一个普通的Web服务器。客户端不要做任何特殊的配置。客户端发送普通的请求来获取反向代理所属空间的内容。反向代理决定将这些请求发往何处,然后就好像它本身就是原始服务器一样将请求内容返回。

 

反向代理服务器的一个典型应用就是为处于防火墙后的服务器提供外部Internet用户的访问。反向代理能够用于在多个后端服务器提供负载均衡,或者为较慢的后端服务器提供缓存。此外,反向代理还能够简单地将多个服务器映射到同一个URL空间。

 

两者区别

 

两者的相同点在于都是用户和服务器之间的中介,完成用户请求和结果的转发。主要的不同在于:

 

(1)转发代理的内部是客户端,而反向代理的内部是服务器。即内网的客户端通过转发代理服务器访问外部网络,而外部的用户通过反向代理访问内部的服务器。

 

(2)转发代理通常接受客户端发送的任何请求,而反向代理通常只接受到指定服务器的请求。如校园网内部用户可以通过转发代理访问国外的任何站点(如果不加限制的话),而只有特定的请求才发往反向代理,然后又反向代理发往内部服务器。

 

所谓的反向代理就是指代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个Web服务器,但是此服务器上不存在任何资源,用户所请求的数据全部在内部网络中,因此如果受到被人的攻击,直接攻向的目标是反向代理服务器,内网数据不会直接受到破坏。

反向代理服务器一个很好的应用是CDN(Content Delivery Network),即就是内容分发网络。基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,有效解决网络拥挤的状况,提高用户访问网站的响应速度。

反向代理(Reverse Proxy)

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

当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。


举个例子,假如你想买韩国的化妆品,由于地理位置的限制你买不到你想要的产品,这时候你只能让代购帮你购买你想要的产品,这里代购就是代理服务器。

如果你在天猫国际买你想要的产品,这里天猫国际就是反向代理服务器。


​ 如果还不理解什么是反向代理请看这里​

nginx+tomcat反向代理

1  需求

         两个tomcat服务通过nginx反向代理,本例子使用三台虚拟机进行测试,

         nginx服务器:192.168.101.3

         tomcat1服务器:192.168.101.5

         tomcat2服务器:192.168.101.6

如下图:

nginx反向代理服务器_代理服务器_02

 

 

1.2.2  启动tomcat

         tomcat使用apache-tomcat-7.0.57版本,在192.168.101.5和192.168.101.6虚拟机上启动tomcat。

 

1.2.3  nginx反向代理配置

根据上边的需求在nginx.conf文件中配置反向代理,如下:

tomcat1服务器

upstream tomcat_server1 {
server 192.168.101.5:8080;
}


#配置一个代理即tomcat2服务器

   

upstream tomcat_server2 {
server 192.168.101.6:8080;
}


 

#配置一个虚拟主机

   

server {
listen 80;
server_name aaa.test.com;
location / {
#域名aaa.test.com的请求全部转发到tomcat_server1即tomcat1服务上
proxy_passhttp://tomcat_server1;
#欢迎页面,按照从左到右的顺序查找页面
index index.jsp index.htmlindex.htm;
}

}


 

  

server {
listen 80;
server_name bbb.test.com;

location / {
#域名bbb.test.com的请求全部转发到tomcat_server2即tomcat2服务上
proxy_passhttp://tomcat_server2;
index index.jsp index.htmlindex.htm;
}
}


 

1.2.4  测试

分别修改两个tomcat下的webapps/ROOT/index.jsp的内容,使用tomcat1和tomcat2两个服务首页显示不同的内容,如下:

tomcat1下的index.jsp修改后:

nginx反向代理服务器_代理服务器_03

 

tomcat2下的index.jsp修改后:

nginx反向代理服务器_tomcat_04

 

分别访问aaa.test.com、bbb.test.com测试反向代理。

 

请求访问aaa.test.com通过nginx代理访问tomcat1,请求访问bbb.test.com通过nginx代理访问tomcat2。