nginx一直是个热度高的词语,那么我们如何更加深切的了解nginx。
我们从网上百度出来的,只是对nginx有一个笼统的介绍,但我们不能更深刻的理解nginx的作用,今天,我们一起来学习nginx的用途。
我们需要考虑的主要问题是,nginx用来做什么?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务
Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的
第一个公开版本0.1.0发布于2004年10月4日
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名
2011年6月1日,nginx 1.0.4发布
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行
其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好
中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝
(1)适用于高并发
在连接高并发的情况下,Nginx是Apache服务不错的替代品
Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一
能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型
(2)可以做负载均衡服务器和HTTP服务器
Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务
也可以支持作为 HTTP代理服务对外进行服务,Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多
处理静态文件,索引文件以及自动索引,打开文件描述符缓冲
无缓存的反向代理加速,简单的负载均衡和容错
FastCGI,简单的负载均衡和容错
模块化的结构,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter
如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待
支持 SSL 和 TLSSNI
(3)代码的特点
Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统
包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows
Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函
而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库
(4)可以作为代理服务器
作为邮件代理服务:Nginx 同时也是一个非常优秀的邮件代理服务
(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验
Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务
Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动
你还能够不间断服务的情况下进行软件版本的升级
nginx的有点也决定了nginx可以用来做什么
首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端。
Nginx是一款轻量级的Webserver/反向代理server以及电子邮件代理server。并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口站点及搜索引擎Rambler使用。
其特点是占有内存少。并发能力强。其实nginx的并发能力确实在同类型的网页server中表现较好。
Nginx相较于Apache\lighttpd具有占有内存少。稳定性高等优势,而且依靠并发能力强。丰富的模块库以及友好灵活的配置而闻名。
Nginx本身也是一个静态资源的服务器
当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来
动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
(1)什么是反向代理?
客户端本来可以直接通过HTTP协议访问某网站应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器。
(2)client(用户A)向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将推断向何处(原始server)转交请求,并将获得的内容返回给client。而client始终任务它訪问的事原始serverB而不是serverZ。
因为防火墙作用。仅仅同意serverZ进出,防火墙和反向代理共同作用保护了院子资源serverB。
既然服务器可以直接HTTP访问,为什么要在中间加上一个反向代理,不是多此一举吗?反向代理有什么作用?继续往下看,下面的负载均衡、虚拟主机等,都基于反向代理实现,当然反向代理的功能也不仅仅是这些。
当网站访问量非常大,网站站长开心赚钱的同时,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。
Nginx可以通过反向代理来实现负载均衡。
负载均衡也是Nginx常用的一个功能
负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等
从而共同完成工作任务,简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理
负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡
而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略
有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。
正向代理是一个位于clientA和原始server(serverB)之间的server(代理serverZ),为了从原始server取得内容,用户A向代理serverZ发送一个请求并指定目标(serverB)。然后代理serverZ向serverB转交请求并将获得的内容返回给client。client必需要进行一些特别的设置才干使用正向代理。
用途:在防火墙内的局域网client提供訪问Internet的途径。还能够使用缓冲特性降低网络使用率。
从安全性角度讲:
正向代理同意client通过它訪问随意站点而且隐藏client自身,因此你必须採取安全措施以确保仅为经过授权的client提供服务。
反向代理对外都是透明的。訪问者并不知道自己訪问的是一个代理。
同样点:
1、都是HTTPserver软件
2、功能上都採用模块化结构设计
3、都支持通用的语言接口。如PHP、Perl、Python等
4、支持正向、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输
不同点:
1、Apache处理速度非常慢。占用非常多内存资源
2、功能上,Apache全部模块支持动静态编译,Nginx模块都是静态编译的
3、对Fcgi的支持:Apache支持的非常不好,Nginx支持非常好
4、处理连接方式:Nginx支持epoll,Apache不支持
5、空间使用上:Nginx安装包仅几百K
那么在当今的使用中,nginx占据的优势:
1、作为Webserver,Nginx处理静态文件、索引文件,自己主动索引的效率很高
2、作为代理server,Nginx能够实现无缓存的反向代理加速,提高站点执行速度
3、作为负载均衡server,Nginx既能够在内部直接支持Rails和PHP。也能够支持HTTP代理server对外进行服务,同一时候还支持简单的容错和利用算法进行负载均衡
4、在性能方面,Nginx是专门为性能优化而开发的。实现上非常注重效率。
它採用内核Poll模型。能够支持很多其它的并发连接。最大能够支持对5万个并发连接数的响应,并且仅仅占用非常低的内存资源
5、在稳定性方面,Nginx採取了分阶段资源分配技术,使得CPU与内存的占用率很低。Nginx官方表示。Nginx保持1万个没有活动的连接,而这些连接仅仅占用2.5MB内存,因此,类似DOS这种攻击对Nginx来说基本上是没有不论什么作用的
6、在高可用性方面,Nginx支持热部署,启动速度特别迅速。因此能够在不间断服务的情况下。对软件版本号或者配置进行升级,即使执行数月也无需又一次启动,差点儿能够做到7x24小时不间断地执行
Nginx具有非常高的稳定性;支持热部署。代码质量非常高。代码非常规范,手法成熟。模块扩展也非常easy。