反向代理是nginx应用场景中一个极为重要的功能,也是我们在系统架构时,选用nginx所使用的主要功能,基于反向代理,可以影射出很多应用场景和需求的解决方案。
上网的正常流程,用户 => 网关 => 外网
网关:
平时访问网络时,需要连接路由器,把数据包全部发送给路由器,路由器再发送到下一个网关或代理,路由器就等于是一个网关。
正向代理:
在很多公共场合,有时不用密码就可以连接到一些wifi,比如移动CMCC网络、医院的网络等,虽然连接不受限,但真正能上网,还需登录账号密码才可以,账密可能是有时限的,这就需要它们自己有相关服务做认证,也就是通过他们的服务器做代理,才可以正常上网,这种在用户端的代理方式,叫做正向代理。
在一些国企以及保密性较强的企业,也会有类似操作,通过一层代理服务器,去验证安全性,控制哪些能访问,哪些不能访问。
通俗来讲,正向代理,用户不能直接访问互联网,需要经过一个代理服务器才可以。
反向代理:
我们能正常通过网关访问外网,但在服务端,并不能直接访问服务器中的PHP或Tomcat等应用服务器,需要借助Nginx做中继来传递数据,这时候Nginx就等于代理服务器。
由于Nginx是服务提供方所提供,本来该由用户一侧主动提供的代理服务器,却因我们不能直接访问到PHP等应用服务器,只能由服务端反着来提供的代理,所以叫做反向代理。
正向代理和反向代理在网络拓扑的本质上是一样的,都需要代理服务器和要访问的网络,就看代理服务器是谁提供的,就能区别出正向代理和反向代理了。
代理服务器实际就是网关,绕不过去。
Nginx做反向代理的不足之处:
平时上网,带宽再大,但路由器跟不上,网络传输速度会受限,在Nginx做反向代理时,同样有多连接大数据传输速度的问题。
如果只是注册登录这些功能,每次传输几KB的数据,Nginx可以代理很多服务器。如果下载使用,比如电影、软件等比较大的数据包,在传递数据时,Nginx就会成为网络的瓶颈,这种情况如果想使用Nginx做反向代理,建议多配几个Nginx,分组去代理
Nginx传输数据模型:隧道式代理。在比较高的IO情况下,Nginx做反向代理不太合适,这时可以使用LVS-DR模型。
LVS-DR模型:
LVS是一个更高性能的负载均衡器,比Nginx性能更高,但是功能简单,不像Nginx可以做更多的二次开发,开发的模型和工具也不多。
LVS是专业的负载均衡器,在做反向代理时,既可以做隧道式代理,也可以做DR模型。
LVS提供的DR模型:请求接入时通过代理服务器连接到应用服务器,返回时应用服务器数据不再通过的代理,直接把数据返回给用户。
应用服务器主动连不进网络,只能往外传,连接时必须通过代理做中继。
LVS是一个比较简单的软件,直接内嵌在Linux(CentOS)内核中,甚至不需要再装额外的软件,就可以直接用LVS
下一篇:Nginx配置反向代理