Py学习  »  NGINX

初识Nginx

Steven·Gu • 3 年前 • 274 次点击  

一、前言

今天我们就来详细谈一谈Nginx!既然提到Nginx我们就不得不先说一下什么是web服务器?什么是应用服务器?什么是正向代理?什么是反向代理?什么是动静分离?什么是负载均衡?Nginx的优劣势有那些?通过这边文章你将会对以上问题有一个深刻的了解,写的不好的或者用词不严谨的地方还希望大家多给博主提一些建议,同时大家有什么问题可以加博主联系方式QQ:2235001730、微信:StevenGu_,进行技术上的一些交流与沟通。

二、服务器

1、 Web服务器
理解Web服务器,首先你要理解什么是Web?你可以简单理解为你所看到的html页面就是web的数据元素,处理这些数据元素的应用软件就叫Web服务器,Web服务器也叫网页服务器或Web服务器。Web表现为三种形式,即超文本(hypertext)、超媒体(hypermedia)和超文本传输协议(http)。当Web服务器接收到一个http请求(request),会返回一个http响应(response)。比如我们经常会用到的:Apache、Nginx、IIS等,一般我们的Web项目包(war包)就存放在Web服务器上,比如html、css、javascript、图片等,当用户访问你的网站时,一般情况下是先访问80端口某个目录下的index.html文件,当你的Web服务器收到来自客户端的请求时,就先会将index.html响应给客户端,客户端收到响应后发现你的页面中还有一些图片、css、js文件,然后依次请求Web服务器,由Web服务器再响应这些文件,这样你整个的网站就在浏览器上加载出来了,简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request),Web服务器与客户端打交道,它要处理的主要信息有:session、request、response、HTML、JavaScript 、CSS等。
2、应用服务器
应用服务器如JSP,处理的是非常规性Web页面(JSP文件),它动态生成Web页面,生成的Web页面再发送给客户端,实际上当应用服务器处理完一个JSP请求并完成JSP生成html后它的任务就结束了,其余的就是Web处理的过程了。比如我们经常会用到的:Tomcat、JBoss、Weblogic、WebSphere等,而这些也可定义为web容器。一般很少有见Tomcat直接暴露给外面,而是和Nginx、Apache等配合,只让Tomcat处理JSP和Servlet部分。
**结言:**在某些情况下,服务器是紧密集成的,例如IIS和.NET运行时,IIS是Web服务器。当具有.NET运行时环境时,IIS能够提供应用程序服务。如Tomcat、IIS,既是Web服务器也是应用服务器。

三、代理

1、说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个中间人,顾名思义就是我代理你去做什么事情。
2、生活实例
(1)我想分期买一部手机但是我还没有成年,那这个时候我就去找我的哥哥让他以他的身份分期买一部手机,告诉我哥哥你要去楼下xxxx手机店买一部月白天青色的魅族17Pro(8+128GB)手机,然后他买完之后就把手机给我了。这个过程,卖手机的商家只知道我哥哥买手机,而不知道真正要买手机的人是我,而我既知道我哥的信息也知道手机店的信息。
(2)我今天要去中介租房子住,这时中介就会帮助你找一个合适房子,然后中介就会和房东沟通,这个时候你是不会知道房东的任何信息的,房东的信息只有中介才知道,而你只知道中介的信息。
3、正向代理
(1)“FQ” —— 就属于正向代理。
(2)客户端知道目标服务器地址,但由于网络限制等原因,无法直接访问。这时候需要先连接代理服务器,然后再由代理服务器访问目标服务器,这个过程就类似于我上面生活实例中的第一个。
(3)正向代理,“它代理的是客户端”,是一个位于客户端和目标服务器之间的服务器,为了从目标服务器获取数据,客户端向代理服务器发送一个请求并指定目标服务器。
(4)如图
正向代理隐藏的是客户端,Server是不知道Client的存在的,只知道Proxy的存在。 正向代理隐藏的是客户端,Server是不知道Client的存在的,只知道Proxy的存在。

4、反向代理
(1)客户端只知道代理服务器地址,而不知道真正响应数据的服务器的地址,需要通过代理服务器请求真正响应数据的服务器,,这个过程就类似于我上面生活实例中的第二个。
(2)反向代理,“它代理的是真正响应数据的服务器”,是一个位于客户端和真正响应数据的服务器之间的服务器,为了从真正响应数据的服务器获取数据,客户端向代理服务器发送一个请求,然后由代理服务器转发给真正响应数据的服务器,然后再由代理服务器响应给客户端。
(3)如图
反向代理隐藏的是真正响应数据的服务器,Client是不知道Server的存在的,只知道Proxy的存在。 反向代理隐藏的是真正响应数据的服务器,Client是不知道Server的存在的,只知道Proxy的存在。

四、Nginx优劣势

1、优势
(1)Web服务器 —— Nginx 静态处理性能比 Apache 至少高3倍以上,核心区别于Apache是同步多进程模型,一个连接对应一个进程,随着用户访问量的增大会占用很大的内存空间,而Nginx是异步的,多个连接(万级别)可以对应一个进程 ,占用内存相对于Apache来说极少。
(2)负载均衡 —— 支持7层负载均衡,Nginx 的负载能力比Apache高很多。
(3)抗并发 —— Nginx 处理请求异步非阻塞,而Apache 则阻塞型,高并发下nginx 能保持低资源低消耗高性能。
(4)高可用性 —— Nginx 支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24小时不间断地运行。
2、劣势
(1)Nginx 处理动态请求是鸡肋,一般动态请求要Apache中Tomcat去做,Nginx 只适合静态和反向。
(2)rewrite频繁对Nginx不太友好,所以rewrite频繁还是选择Apache。
(3)对比Apache不稳定,由于是单进程多线程,进程死掉会影响很多用户。

结言 一般Nginx采用动静态资源分离策略,运用 Nginx 的反向代理功能分发请求,所有动态资源的请求交给 Tomcat、Node.js启动的服务器,而静态资源的请求(例如图片、视频、CSS、JavaScript 文件等)则直接由 Nginx 返回到浏览器,这样能大大减轻应用服务器的压力。

五、负载均衡

负载均衡是将流量负载分摊到不同的服务单元,保证服务器的高可用,保证响应足够快,给用户良好的体验。服务器架构有很多种,例如:集群(一堆服务器互联)、负载均衡(一堆服务器分摊压力)、分布式(一堆服务器分开工作)等。当访问量和数据量增大,以及系统业务的复杂度增加时,并发量特别大的时候,单台服务器处理就会有很大地压力,很有可能会导致服务器直接崩溃,而 Nginx 的负载均衡策略可以把请求通过算法分发到各个不同的服务器进行处理,并且通过负载均衡只需要暴露一个公网IP地址,而负载均衡服务器只需要通过内网IP对请求进行分流,把请求分发到不同的服务器进行处理,这样隐藏了真实响应数据的IP地址,极大地提升了安全性和隐私性。而客户端是感受不到有多台服务器,只知道负载均衡这一台服务器,通过负载均衡你也可以准备一台备用机做备用,以免单台服务器死掉之后还能保证业务的正常运行。Apache超稳定,对PHP支持比较检单,Nginx需要配合其他后端用,处理动态请求有优势,建议使用前端Nginx抗并发,后端apache集群,配合起来会更好。
负载均衡

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/71556
 
274 次点击