【Nginx】什么是Nginx?
文章目录 什么是Nginx?Nginx能干什么?①反向代理②负载均衡Nginx负载均衡功能的两种策略:1)内置策略① 轮询② 加权轮询③ Ip hash 2)扩展策略 ③动静分离 为什么使用Nginx?
什么是Nginx?
Nginx就是一个高性能的HTTP 和 反向代理服务器。
高性能:就是响应更快、并发量更高
反向代理:就是我们希望有一个服务器帮助我们转发和控制后面其他服务器的请求;
那到底什么是反向代理?
这里我们先了解一下什么是正向代理
正向代理: 代理客户端
省略…
那么同时,就有安装在服务器端的代理,比如访问百度、kuangstudy等,这些后台服务器不可能部署到一个服务器上,但是我们感受不到,就像我们登陆一次后跳转服务,也不用重新登录,这是为什么?
这是因为服务端有一个代理,这个代理就是反向代理。
反向代理:代理服务器端
反向代理后:baidu后后台无论增加多少服务器,我们访问的都是它的域名
总结:反向代理就是代理服务器端,能够让我们无感知的浏览访问一下服务器资源,像www.baidu.com 、www.bilibili.com、www.kuangstudy.com等网站,反向代理也帮助服务更好的部署上线。
了解一下:Nginx同时提供IMAP/POP3/SMTP服务(邮件服务)
Nginx官网下载:nginx: download
Nginx能干什么?
主要是为了解决用户使用多、服务器压力大的情况。
以下是客户端访问服务器时的情景:
①客户端直接访问服务器,访问量小时:
②客户端访问量过大时:
如果一下子上限100000个用户,怎么处理?
笨办法:横向扩展服务器,多加几个服务器,tomcat跑到多个服务器上
这又有问题了:
服务器跑到多个tomcat上,但是session不共享,登录一次后,重写请求另外一台服务器,又不能登录了,那这个问题怎么解决?
方法:客户端和服务器之间加一层------中间件 来解决这个问题
我们现在的期望是:
通过一个代理服务器,帮我们把我们的请求代理到其他服务器上面,这样来完成一个请求和转发,解决session不共享导致问题。
那这个代理服务器需要做的工作有:
①反向代理
就是能够自动帮我们维持服务器的配置和服务器之间的关联,能够自动把用户的请求转发到服务器上;
②负载均衡
由于后面服务器的大小可能不一样,这就需要有个东西帮助我将更多的请求分配到服务器大的上面,将少一点的请求分配到服务器小的上面,这时候就希望有一个负载均衡的东西
目前采用Nginx
架构的核心精髓:架构上解决不了的问题,加一层就好,加一层解决不了,那就再加一层!
任何数量很大的问题,把他们加一层进行统一管理,像jdbc就是如此。
Nginx负载均衡功能的两种策略:
1)内置策略
① 轮询
后面三个服务器权重都一样,就一个一个轮;
第一次请求到达第一个服务器,第二次请求到达第二个,第三次请求到达第三个,第四个从头开始又到达第一个…
② 加权轮询
哪个服务器权重大,那么大量请求就会流到这个服务器去;权重小,那么流入的请求就会少;
这样保证服务器的性能最大化,这样就算是一个很小的服务器,也可以保证上线使用,从而节约成本;
③ Ip hash
Ip hash是Nginx默认带的一个操作;
什么是Ip hash? Ip hash能干什么?
Ip hash 是对客户端请求的ip进行hash操作,然后根据hash结果将一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
理解:
我们在写项目中经常有Session的问题,
一个项目中Session保存在Tomcat中,但是当我们有很多台服务器,启动了很多台Tomcat,比如启动了n个Tomcat,那就有n个Session,这个时候是不可能做Session共享的,我们通常通过加Redis解决Session共享这个问题,
Nginx也提供了一种默认的方法:通过Nginx的ip来计算,固定的Ip可以达到固定的一台服务器上,就可以保证Session一直在,
比如:xiaoming 服务器是 192.168.8.1
那xiaoming的所有请求通过hash运算之后,通过ip hash 就可以100%到达这台服务器上,这样Session就不会丢失;但是缺点是:性能差,如果192.168.8.1这台服务器挂了,那所有Session信息也就丢失了;
所以最终我们使用Redis来解决Session共享问题;
如何解决session共享问题:
推荐使用Redis,不推荐使用Nginx的Ip hash做session共享 2)扩展策略
扩展策略很多…
③动静分离
什么是动静分离?如何实现动静分离?为什么要实现动静分离?
静态文件:不需要后台处理的文件,如:css、html、jpg、js等文件。
动态文件:需要后台处理的文件;
项目中有很多像bootstrap、jquery等的js静态资源,每次都要从jar包中加载就非常麻烦,这时就希望有个静态服务器,直接从静态服务器那加载,Nginx就可以做到这一点;
就是说静态资源直接从Nginx返回,不会从项目中访问,优点:可以提升一定的访问速度。
为什么使用Nginx?
①占用内存小,1MB左右
②并发能力强,官网测试表明支撑5万个并发连接的响应
③实现 反向代理、负载均衡、动静分离
④Nginx代码使用C语言编写
⑤安装简单、配置文件简洁、Bug非常少的服务
⑥启动容易、可以7*24小时不间断运行、可以在不间断服务的情况下对软件版本进行升级