1、Nginx 简述
Nginx (“engine x”) 是两个高效能的 HTTP 和逆向全权伺服器,特征是占据缓存少,mammalian潜能强,实际上
nginx 的mammalian潜能的确在同类型的页面伺服器中整体表现良好,我国内地采用 nginx 中文网站采用者有:腾讯、京
东、新浪、网易、腾讯、淘宝网等
(1)Nginx是两个高效能的HTTP和路径全权伺服器
(2)选用C词汇撰写
(3)全力支持的作业系统为数众多,windows、linux、MacOS X
(4)可靠性高,外间根本无法出访nginx所处伺服器,nginx将允诺转贴外部伺服器。初始化后,回到初始化的
结论
(5)可与此同时实现阻抗平衡
(6)Rewrite采用方便
2、Nginx做为 web 伺服器
Nginx 能做为静态页面的 web 伺服器,与此同时还全力支持 CGI 协定的静态词汇,比如说 perl、php等。但
不全力支持 java。Java 流程根本无法透过与 tomcat 相互配合顺利完成。Nginx 专为操控性强化而合作开发,操控性是其最重要的
权衡,与此同时实现上十分著重工作效率 ,能抵挡高阻抗的挑战,有调查报告说明能全力支持高达 50,000 个mammalian通话量。
3、萨德基全权
Nginx 不但能做逆向全权,与此同时实现阻抗平衡。还能用于萨德基全权来展开玩游戏等机能。
萨德基全权:假如把以太网外的 Internet 想像成两个十分大的深外,则以太网中的应用流程要访
问 Internet,则需要透过全权伺服器来出访,这种全权服务就称为萨德基全权
(1)需要在客户端配置全权伺服器展开指定中文网站出访 )需要在应用流程配置全权伺服器展开指定中文网站访
问 )需要在应用流程配置全权伺服器展开指定中文网站出访 )
4、逆向全权
逆向全权,其实应用流程对全权是无感知的,因为应用流程不需要任何配置就能出访,我们只需要将允诺
全权伺服器和目标伺服器对外就是两个伺服器,暴露的是全权伺服器地址,隐藏了真实服务器 IP 地
址。
暴露的是全权伺服器 地址,隐藏了真实暴露的是全权伺服器 地址,隐藏了真实暴露的是全权伺服器 地
址,隐藏了真实IP地址
在实际项目合作开发中,运用最多的也是路径全权,这里就示范下:
1、在本机下载tomacat,运行起来
2、修改nginx配置文件,在默认的80端口的配置下,增加location配置并保存
3、重启nginx服务
4、分别在虚拟机外部和宿主机出访nginx的80端口
5、在宿主机(安装VMware的机器)上出访nginx的80端口
5、阻抗平衡
应用流程发送多个允诺到伺服器,伺服器处理允诺,有一些可能要与数据库展开交互,伺服器处理完毕
后,再将结论回到给应用流程。
这种架构模式对于早期的系统相对单一,mammalian允诺相对较少的情况下是比较适合的,成本也低。但随
着信息数量的不断增长,出访量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服
务器相应应用流程的允诺日益缓慢,mammalian量特别大的时候,还容易造成伺服器直接崩溃。很明显这是由于
伺服器操控性的瓶颈造成的问题,那么如何解决这种情况呢?
我们首先想到的可能是升级伺服器的配置,比如说提高 CPU 执行频率,加大缓存等提高机器的物理操控性
来解决此问题,但我们知道摩尔定律的日益失效,硬件的操控性提升已经不能满足日益提升的需求了。
最明显的两个例子,天猫双十一当天,某个热销商品的瞬时出访量是极其庞大的,那么类似上面的系统
架构,将机器都增加到现有的顶级物理配置,都是不能够满足需求的。那么怎么办呢?
上面的分析我们去掉了增加伺服器物理配置来解决问题的办法,也就是说纵向解决问题的办法行不通
了,那么横向增加伺服器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加伺服器
的数量,然后将允诺分发到各个伺服器上,将原先允诺集中到单个伺服器上的情况改为将允诺分发到多
个伺服器上,将阻抗分发到不同的伺服器,也就是我们所说的阻抗平衡。
设置阻抗平衡之后,tomcat的session,会发生不存再的情况,解决办法
1.最简单,不常用
存储在cookie中
2.常用
存放再redis中
5.1、ip_hash(透过应用流程允诺ip展开hash,再透过hash值选择后端server):
当你服务端的两个特定url路径会被同两个采用者连续出访时,假如阻抗平衡策略还是轮询的话,那该采用者
的多次出访会被打到各台伺服器上,这显然并不高效(会建立多次http链接等问题)。
甚至考虑一种极端情况,采用者需要分片上传文件到伺服器下,然后再由伺服器将分片合并,这时假如用
户的允诺到达了不同的伺服器,那么分片将存储于不同的伺服器目录中,导致无法将分片合并。所以,
此类场景能考虑选用nginx提供的ip_hash策略。既能满足每个采用者允诺到同一台伺服器,又能满足不
同采用者之间阻抗平衡。
5.2、url_hash(透过允诺url展开hash,再透过hash值选择后端server):
一般来讲,要用到url_hash,是要相互配合缓存命中来采用。
举两个我遇到的实例:有两个伺服器集群A,需要对外提供文件下载,由于文件上传量十分大,没法存储
到伺服器磁盘中,所以用到了第三方云存储来做文件存储。伺服器集群A收到应用流程允诺之后,需要从
云存储中下载文件然后回到,为了省去不必要的网络带宽和下载耗时,在伺服器集群A上做了一层临时
缓存(缓存两个月)。
由于是伺服器集群,所以同两个资源多次允诺,可能会到达不同的伺服器上,导致不必要的多次下载,
缓存命中率不高,以及一些资源时间的浪费。在此类场景下,为了使得缓存命中率提高,很适合采用
url_hash策略,同两个url(也就是同两个资源允诺)会到达同一台机器,一旦缓存住了资源,再此收到请
求,就能从缓存中读取,既减少了带宽,也减少的下载时间。
6、 动静分离为了加快中文网站的解析速度,能把静态页面和静态页面由不同的伺服器来解析,加快解析速度。降低原
来单个伺服器的压力。
总结:
Nginx是目前比较主流的HTTP逆向全权伺服器(其企业版提供了基于TCP层的逆向全权插件),对于构
建大型分布式web应用,具有举足轻重的作用。简单来说,nginx有2个主要的机能:动/静态资源分
离、阻抗平衡。