vlambda博客
学习文章列表

一天入门Nginx系列之----开门介绍篇

关注上方浩道linux,回复资料,即可获取海量linux、Python、网络通信等学习资料!

前言

大家好,这里是浩道linux,主要给大家分享linux、python、网络通信相关的IT知识平台。


一天入门Nginx系列之----开门介绍篇


本文是Nginx序列的开门篇,当然得从Nginx的诞生背景、现实功能、应用场景说起。


Nginx介绍

一、背景介绍

Nginx (engine x) 是一个高性能的HTTP反向代理的web服务器,同时也提供了POP3/SMTP/IMAP。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。


Nginx是一款轻量级的Web 服务器、反向代理服务器电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。


二、Nginx相关概念介绍

1、WEB服务器

WEB服务器也叫网页服务器,英文名叫Web Server,主要功能是为用户提供网上信息浏览服务。


2、HTTP

HTTP超文本传输协议的英文缩写,是用于从WEB服务器传输超文本到本地浏览器的传输协议,也是互联网上应用最为广泛的一种网络协议。HTTP是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务端是网站,通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口的HTTP请求。


3、POP3/SMTP/IMAP服务

POP3(Post Offic Protocol 3)邮局协议的第三个版本;

SMTP(Simple Mail Transfer Protocol)简单邮件传输协议;

IMAP(Internet Mail Access Protocol)交互式邮件存取协议;


通过以上协议,不难看出,Nginx也可以作为电子邮件代理服务器


4、反向代理

反向代理相对立的是正向代理,所以很有必要先搞清楚什么是正向代理,这样才能更好去理解反向代理。

(1)正向代理

我们把一个局域网以外的互联网想象成一个巨大的资源库,此时如果局域网中的客户端要访问互联网,则需要通过代理服务器去访问,这种代理服务就称为正向代理。

如当前国内用户需要访问谷歌网站,此时就需要在客户端浏览器中设置代理服务器后,通过该代理服务器才能进行谷歌网站的访问。如下拓扑所示:

一天入门Nginx系列之----开门介绍篇

1)如拓扑所示,局域网内的用户是作为客户端的代表,如果需要访问局域网外的外部服务器,往往客户端是不能直接访问到的,此时就需要借助一台可以访问外部服务器的服务器进行访问,即要借助图中的代理服务器进行访问。

正常访问流程是:客户端把请求发给代理服务器,由代理服务器客户端请求转发给外部服务器外部服务器处理客户端请求后将数据转发给代理服务器,再由代理服务器转发给客户端


(2)反向代理

在反向代理中,我们同样以一个拓扑展开,如下图所示:

一天入门Nginx系列之----开门介绍篇


1)如拓扑所示,用户作为客户端,此时对于代理服务器以及真实服务器来说就是外部网络了。客户端对于代理服务器是没有感知的,因为此时客户端不需要任何配置就可以访问所需要访问的资源。


nginx就常用做这样的代理服务器,称为反向代理服务器。


5、负载均衡

我们知道客户端访问服务器资源的大概流程是:客户端发送多个请求到服务器,服务器收到请求后,进行处理相关请求,有一些请求可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。


但是我们应该能够想得到,随着业务飞涨,服务器访问量增多、并发量大的时候,就很容易造成服务器由于压力过大,处理不过来,导致服务器崩溃。


而如果解决服务器资源紧张的问题,第一个能够想到的无非就是加大服务器的硬件配置,如加大CPU、内存等配置。但是这种方法会造成金钱消耗过大不说,也会随着业务量会不断扩大硬件配置,有这诸多限制。


有没有其它方法应对这种情况呢?此时集群的解决方案出来了,单个服务器没有办法处理这么多请求,就增加服务器数量进行处理,即通过将客户端请求转发到多台服务器上进行处理。相对于将客户端请求转发到单台服务器进行处理,这种方法是将客户端请求改为转发到多台服务器上,也就是将负载分发到了不同的服务器,起到了缓解服务器资源的作用,被称为负载均衡


6、动静分离

为加快网站的解析速度,可以把动态页面和静态页面由不同的服务器进行解析,这样就加快了解析速度,同样可以降低原来单个服务器的压力。这种把动态资源和静态资源分开部署的方式就称为动静分离。


7、高可用




Nginx优点

大家可以自行去了解对比当前比较主流的WEB服务器,如Apache、Microsoft-IIS、google Servers、Nginx、Tomcat等等,就会得出Nginx具有不可替代的优势。以下是它比较突出的几个优点:


1、速度更快、并发更高

Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。


单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一方面,在高峰期(如有数以万计的并发请求),Nginx比其他Web服务器更快的响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能原因在于Nginx采用了多进程和I/O多路复用(epoll)的底层实现


2、配置简单,扩展性强

Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。


3、高可靠性

Nginx采用的是多进程模式运行,其中有一个master主进程N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务。


4、支持热部署

当前互联网项目都要求以7*24小时进行服务的提供,针对于这一要求,Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能。


5、成本低、BSD许可证

BSD是一个开源的许可证,世界上的开源许可证有很多,现在比较流行的有六种分别是GPL、BSD、MIT、Mozilla、Apache、LGPL。


Nginx本身是开源的,我们不仅可以免费的将Nginx应用在商业领域,而且还可以在项目中直接修改Nginx的源码来定制自己的特殊要求。这些点也都是Nginx为什么能吸引无数开发者继续为Nginx来贡献自己的智慧和青春。OpenRestry [Nginx+Lua]   Tengine[淘宝]。


Nginx功能特性及常用功能

Nginx提供的基本功能服务从大体上归纳为:基本HTTP服务高级HTTP服务邮件服务等三大类。


一、Nginx功能特性

1、基于HTTP服务的功能特性

Nginx可以提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。

(1)处理静态文件、处理索引文件以及支持自动索引;

(2)提供反向代理服务器,并可以使用缓存加上反向代理,同时完成负载均衡和容错;

(3)提供对FastCGI、memcached等服务的缓存机制,,同时完成负载均衡和容错;

(4)使用Nginx的模块化特性提供过滤器功能。Nginx基本过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI以及图像缩放等。其中针对包含多个SSI的页面,经由FastCGI或反向代理,SSI过滤器可以并行处理;

(5)支持HTTP下的安全套接层安全协议SSL.;

(6)支持基于加权和依赖的优先权的HTTP/2;


2、基于高级HTTP服务的功能特性

(1)支持基于名字和IP的虚拟主机设置;

(2)支持HTTP/1.0中的KEEP-Alive模式和管线(PipeLined)模型连接;

(3)自定义访问日志格式、带缓存的日志写操作以及快速日志轮转;

(4)提供3xx~5xx错误代码重定向功能;

(5)支持重写(Rewrite)模块扩展;

(6)支持重新加载配置以及在线升级时无需中断正在处理的请求;

(7)支持网络监控;

(8)支持FLV和MP4流媒体传输;


3、基于邮件服务的功能特性

Nginx提供邮件代理服务也是其基本开发需求之一,主要包含以下特性:

(1)支持IMPA/POP3代理服务功能;

(2)支持内部SMTP代理服务功能;


二、Nginx常用功能

1、静态资源部署

2、反向代理

3、负载均衡

4、高可用

5、WEB缓存


结语

本文主要从nginx诞生背景说起,让大家真正了解为什么需要nginx,只有了解了其应用场景之后,我们才能更好的去学习如何使用它。

更多精彩

浩道linux,专注于linux系统的相关知识、网络通信python相关知识以及涵盖IT行业相关技能的学习,适合零基础的有兴趣的人员入门,同时会一步步更深入学习,真正让你在学习工作中真正去用到所学。同时也会分享一些面试经验,助你找到高薪offer,让我们一起去学习,一起去进步,一起去涨薪!期待您的加入~~~关注回复“资料”可免费获取学习资料(含有电子书籍、视频等)。

喜欢的话,记得点“赞”“在看”