认识Nginx(engine-x)
Nginx同Apache一样都是web服务器,基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。
Nginx是一个轻量级、高性能的web服务器,但它不仅仅是一个web服务器,而且还可以用作反向代理和IMAP/POP3邮件服务器。
与基于进程的web服务器Apache不同,Nginx是异步的web服务器。这意味着Nginx将产生非常少的线程来支持并发请求或者不产生线程,而Apache Web服务器的每个并发请求都需要一个新线程。因此,Nginx所提供的最出色功能之一就是在高流量负载下只占用很少量的内存。
Nginx的特点
-
更快
一反面,在正常情况下,单次请求会得到更快的响应;另一方面,在数以万计的并发请求下,Nginx可以比其他Web服务器更快地请求响应。 -
高扩展性
Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。 -
高可靠性
Nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定。 -
低内存消耗
-
单机支持10万以上的并发链接
-
热部署
master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置、更换日志文件等功能。 -
最自由的BSD许可协议
BSD许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数开发者继续为Nginx贡献自己的智慧。
Nginx的代理
实践中客户端无法直接跟服务端发起请求的时候,我们就需要代理服务。代理可以实现客户端与服务端之间的通信,Nginx也可以实现相应的代理服务。代理分为正向代理和反向代理。
正向代理
在如今的网络环境下,我们通过浏览器是没有办法访问国外的某些网站。所以我们想要访问国外的网站,大多数的做法是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!
我们可以把上面的代理模式称为“正向代理”。可以看出,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
下面贴一张示意图,简单表示正向代理:
总结来说:正向代理,“它代理的是客户端”,是一个位于客户端和原始服务器(Origin Server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器)。
然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
-
访问原来无法访问的资源,如 Google。
-
可以做缓存,加速访问资源。
-
对客户端访问授权,上网进行认证。
-
代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。
反向代理
我国的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了。这个时候我们可以通过部署多台服务器来解决访问人数限制的问题,也就是“分布式部署”。
那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图
图片来源:http://m.imooc.com/article/details?article_id=17148
通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,Nginx 服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。
反向代理的作用:
-
保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网。
-
负载均衡,通过反向代理服务器来优化网站的负载。
项目场景
通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在同一个应用场景中,正向代理代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。
具体的拓扑图如下:
下图说明了正向代理和反向代理之间的区别:
实际上,Proxy 在两种代理中做的事情都是替服务器代为收发请求和响应,不过从结构上看正好左右互换了一下,所以把后出现的那种代理方式称为反向代理了。
这一篇我带大家认识了Nginx,提到了它的特点以及代理服务。下一篇,我将和大家一起认识Nginx的负载均衡以及它的几个配置文件。