Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特色是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,有报告代表能支持高 达 50,000 个并发链接数。国内京东,淘宝,阿里,新浪皆有使用Nginx。css
Nginx一般被用来实现正向代理,反向代理,负载均衡,以及动静分离这四个功能。nginx
本篇文章做为基础篇,将主要讲解这四个Nginx应用中最基础的概念,帮助你们更好的理解,从而为下一章的代码配置作准备:git
不废话,直接上干货。github
在说什么是反向代理以前,咱们须要先了解一下什么是正向代理,正如你们所知,因为某些不可抗拒的因素,咱们没有办法在中国大陆直接访问Google等网站,或者说访问GitHub这些国外网站网速比较慢,不管是正向代理仍是反向代理,都其实能够看做是代理模式的衍生版本。下面咱们经过一个小栗子来理解正向代理在这里面起的做用:数据库
阿呆这几天愁眉苦脸的,工做中某些业务须要用到谷歌邮箱,但是如今别说谷歌邮箱了,谷歌都打不开,这可急坏了阿呆,正当阿呆束手无策之际,忽然想到二呆刚被公司派去俄罗斯北极圈推销冰箱了,本身上不了谷歌,可是二呆能上啊,并且二呆的电脑并无被限制访问,因而阿呆就想出了一个天才的办法,阿呆在公司远程控制二呆的电脑访问Google邮箱,这么一来问题便获得了完美解决。后端
而这个例子中的请求路径是这样的,咱们先发送请求到咱们的代理服务器,而后代理服务器再去请求Google的服务器,最后将请求到的内容返回给咱们本机。而这样一种模式呢,咱们就称之为正向代理。如图所示(图画的丑,下次还丑):浏览器
在了解了什么是正向代理以后,反向代理就容易理解多了。正向代理中咱们的代理服务器是做为一个消费者存在的,而反向代理中咱们则对外提供服务,咱们来看下面这个例子:服务器
二呆从俄罗斯回来以后,业绩上是一无所得,好在公司不至于太过绝情,因而给了二呆一次将功补过的机会。工做内容也很简单,要求二呆去组织一个暖气事业部为未来非洲的暖气业务作准备,这固然没问题,刚开始的时候,二呆感受还好,由于公司部门很少,因此能够很方便叫某我的的编号去安排工做,好比8080,你去处理这个请求,8081你去处理这个,8082你去问问非洲人民的意见怎么样,但是慢慢随着公司在此项目上投入的愈来愈多,部门员工也排到了10000多,这下二呆还要记住每一个人的编号就不太现实了,**因而二呆设立了一台代理服务器,让代理服务器去记住这些人的编号和功能,而二呆只须要记住代理服务器的编号就好了,因而整个部门在二呆眼里慢慢变成了一个总体,而具体有多少人二呆则是彻底不关心了,甚至二呆都不须要知道部门中都有哪些员工,**如图所示:session
而反向代理和正向代理最大的区别就是客户端彻底感知不到代理的存在,好比咱们正向代理访问Google,可能须要在本地软件好比小飞机上设置相应的代理服务器的地址和端口,而反向代理则彻底不须要设置,好比淘宝,当客户端去访问淘宝的时候,可彻底不知道淘宝开了多少台服务器,每一个服务器的地址是多少,只须要像往常同样在浏览器中输入:taobao.com就行,至于双十一将至,阿里又额外开了多少台服务器,客户端则是彻底感知不到的,全部的请求则是经过代理服务器经过负载均衡的方式分发到不一样的服务器中了。并发
一句话总结:
反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。
负载均衡,其实不算是一个新的概念,负载均衡实际上是在反向代理基础之上实现的,若是说反向代理的目的是为了隐藏真实服务器的IP地址的话,负载均衡则是提供了一组策略来将请求从代理服务器上分发到这些真实的服务器上去。
在Nginx中,一共提供了三种负载均衡策略供开发者灵活选择:
一句话总结:
增长服务器的数量,而后将请求分发到各个服务器上,将原先请求集中到单个服务器上的状况改成将请求分发到多个服务器上,将负载分发到不一样的服务器,也就是咱们所说的负载均衡
当咱们的应用初具规模,服务器后端须要面对大量请求的话,原来的动静混合打包发布的方式就再也不那么适用了,由于咱们服务器一边须要去处理客户端发过来的动态请求,好比数据库的查询,计算等,又同时要处理客户端发过来的静态请求,好比图片,css样式等静态文件,大量的请求毫无疑问会增长咱们后端的压力,挤占咱们用于处理动态请求的性能,为了解决这个问题呢,因而就有了动静分离这种部署的方式。
动静分离就是把不多会发生修改的诸如图像,视频,css样式等静态资源文件放置在单独的服务器上,而动态请求则由另一台服务器上进行,这样一来,负责动态请求的服务器则能够专一在动态请求的处理上,从而提升了咱们程序的运行效率,与此同时,咱们也能够针对咱们的静态资源服务器作专属的优化,增长咱们静态请求的响应速度。
Nginx 动静分离简单来讲就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,能够理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来说大体分为两种,
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另一种方法就是动态跟静态文件混合在一块儿发布,经过 nginx 来分开,具体如何配置,后期Nginx实战会详细说明。
以下图所示:
本篇文章做为Nginx的第一篇,主要侧重讲了如下Nginx的四个基本概念,也是咱们平常开发中遇到的最为频繁的四个功能,下一节呢,咱们则从实际的代码入手,经过编写相应的代码,一步一步的完成反向代理,负载均衡,动静分离的配置。而正向代理呢,若是有兴趣的小伙伴能够自行查阅相关资料(狗头保命)。
相关笔记已经同步开源至本人github,欢迎star:
最后,欢迎点赞,关注我,有你好果子吃(滑稽)