Nginx反向代理为什么可以提高网站性能

Nginx反向代理为什么可以提高网站性能

从能够提高网站性能这点来说,当然是由于Nginx反向代理与负载均衡的超强优势啦。与Apache Tomcat比起来,Nginx可以承受的qps要大得多,这里除了底层原理的差异,与Nginx不负责处理业务逻辑,只负责接受转发请求的特点有分不开的关系。反向代理反向代理可以用于实现分布式,即对外虽然是一个完整的服务,但是其实这个服务对内是由部署在多台Tomcat的子服务共同组成的。

举个例子,一个购物网站,分为查询商品,下单,结算三个模块(极简举例),如果这三个子服务都写在同一个Tomcat上,那么所有的请求就都会发给这一台Tomcat。这样的部署有一个隐患:假设双十一之前,这个网站的压测没有做好,导致双十一当天0点的时候,结算的人太多,qps超过Tomcat可承受的上限,服务崩溃了,那么这时候,不仅是结算的人无法打开网页,连那些想查询商品,把商品放入购物车的用户也会发现打不开网页了。

即此时这个网站的服务由于单个子服务的原因,全线崩溃了。如果使用反向代理功能,就能从两个方面来缓解这个隐患:1 Nginx会将查询,下单与结算的请求分别发送给三个服务器,那么对于单独的服务器来说,瞬时间的请求量就会少很多,减少了挂掉的风险2 就算挂掉了,由于Tomcat是分开的,挂掉其中一个,另外两个依然可以运行,不影响用户其他操作

直接让web服务运行在80端不行吗?为什么要用nginx反向代理?

直接让web服务运行在80端不行吗为什么要用nginx反向代理

其实现在估计很少人会用80端口部署服务了,起码都是443端HTTPS服务了,因为HTTPS相对更安全。但是这不影响这个问题的解答,下面我以个人的一些看法说明下。一个服务器只有一个常用的端口我们都知道你只买了一台公网服务器,默认80端口是HTTP服务,443端口是HTTPS服务。而现在很多时候,微信、网站搜索引擎,默认都是用这些端口进行正常处理,当你有多个服务要对外开放,你如果A服务已经占用了80端口,那么B服务就不可以再占用80端口。

而你采用Nginx服务直接占用80或者443端口,那么我们根据Nginx的规则配置,就可以设置如下规则:访问url路径/api 走A服务,访问url路径/admin 走B服务。Nginx高性能熟悉Nginx性能的程序员,都知道Nginx的性能之高,这里就不展开说。因为有些编程语言框架,比如Flask,本身处理web请求就性能不高,通过Nginx可以提前处理web请求,而Flask就可以更多关注业务本身的逻辑。

Nginx负载均衡当你的web服务后台可以多实例部署,这时候你说的web服务直接运行80端口,那就不能支持多台实例。而通过nginx,就可以指向两台甚至多台实例的后端服务,而且可以设置策略进行负载请求。比如负载后端两个web服务,A机器性能配置强,那么我们就可以分配更多的请求到A机器。B机器性能一般,那么我们就可以减少请求到这台机器。

Nginx安全性因为有了Nginx服务器在前面进行处理请求,用户根本不知道后端是用什么语言进行处理,减少后端暴露的几率。不过由于使用Nginx的人很多,Nginx的漏洞也是备受关注,所以要及时关注Nginx的漏洞和最新稳定版本升级。这里提供一个检测Nginx稳定版本的视频解说:https://www.ixigua.com/6832886164081345038/ ,有兴趣的可以看看。


文章TAG:代理  反向  正向  nginx  
下一篇