Nginx 的功能特性
Nginx
提供的基本功能从大体上归纳为基本的HTTP服务
、高级HTTP服务
和邮件服务
等三大类。
基本HTTP服务
Nginx
提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。
在Nginx提供的基本HTTP服务中,主要包含以下功能特性:
- 处理静态文件(如HTML静态网页及请求);处理索引文件以及支持自动索引。
- 打开并自行管理文件描述符缓存。
- 提供反向代理服务,并且可以使用缓存加速反向代理,同时完成简单负载均衡及容错。
- 提供远程
FastCGI
服务的缓存机制,加速访问,同时完成简单的负载均衡及容错。 - 使用
Nginx
的模块化特性提供过滤器功能。Nginx
基本过滤器包括Gzip压缩
、ranges支持
、chunked响应
、XSLT
、SSI
以及图像缩放功能等。其中,针对包含多个SSI
的页面,经由FastCGI或反向代理,SSI过滤器可以并行处理。 - 支持HTTP下的安全套接层安全协议SSL。
高级HTTP服务
在Nginx提供的高级HTTP服务中,主要包含以下功能特性:
- 支持基于名字和IP的虚拟主机配置。
- 支持
HTTP/1.0
中的keep-alive
模式和管线(PipLined)模型连接。 - 支持重新加载配置以及在线升级时,无须中断正在处理的请求。
- 自定义访问日志格式、带缓存的日志写操作以及快速日志轮转。
- 提供3xx ~ 5xx错误代码重定向功能。
- 支持重写(Rewrite)模块扩展。
- 支持
HTTP DAV
模块,从而为HTTP WebDAV
提供PUT、DELETE、MKCOL、COPY以及MOVE方法
。 - 支持
FLV
流和MP4
流传输。 - 支持网络监控,包括基于客户端IP地址和HTTP基本认证机制的访问控制、速度限制】来自同一地址的同时连接数或请求数限制等。
- 支持嵌入
Perl
语言。
邮件代理服务
Nginx提供邮件代理服务也是其基本开发需求之一,主要包含以下功能特性:
- 支持使用外部HTTP认证服务器重定向用户到IMAP/POP3后端,并支持IMAP认证方式
(LOGIN、AUTH LOGIN/PLAIN/CRAM-MD5)
和POP3
认证方式(USER/PASS、APOP、AUTH LOGIN/PLAIN/CRAM-MD5)
。 - 支持使用外部HTTP认证服务器认证用户后重定向连接到内部SMTP后端,并支持SMTP认证方式
(AUTH LOGIN/PLAIN/CRAM-M5)
。 - 支持邮件代理服务器下的安全套接层安全协议
SSL
。 - 支持纯文本通信协议的扩展协议
STARTTLS
。
HTTP 代理和反向代理
代理服务器和反向代理服务是Nginx
服务器作为Web
服务器的主要功能之一,尤其是反向代理服务,是应用
十分广泛的功能。
在提供反向代理服务方面,Nginx
服务器转发前端请求性能稳定,并且后端转发与业务配置相互分离,配
置相当灵活。在进行Nginx
服务器配置时,配置后端转发请求完全不用关心网络环境如何,可以指定任意的IP地址和端口号,或其他类型的链接、请求等。
Nginx
服务器的反向代理服务功能并不只有这些,提供的配套功能相当丰富。首先,它支持判断表达式。
通过使用正则表达式进行相关配置,可以实现根据不同的表达式,采取不同的转发策略。其次,它对后端返回情况进行了异常判断,如何返回结果不正常,则重新请求另一台主机(即将前端请求转向另一后端IP),并自动剔除返回异常的主机。它还支持错误页面跳转功能。
负载均衡
负载均衡,一般包含两方面的含义。一方面是,将单一的重负载分担到多个网络节点上做并行处理,每个
节点处理结束后将结果汇总返回给用户,这样可以大幅提高网络系统的处理能力;第二个方面的含义是,将大量的前端并发访问或数据流量分担到多个后端网络节点上分别处理,这样可以有效减少前端用户等待响应的时间。Web
服务器、FTP
服务器、企业关键应用服务器等网络应用方面谈到的负载均衡问题,基本隶属于后一方面的含义。因此,Nginx
服务器的负载均衡主要是对大量前端访问和流量进行分流,以保证前端用户访问效率。在绝大多数的Nginx
应用中,都会或多或少涉及它的负载均衡服务。
Nginx
服务器的负载均衡策略可以划分为两大类:即内置策略和扩展策略。内置策略主要包含轮询、加权
轮询和IP hash
三种;扩展策略主要通过第三方模块实现,种类比较丰富,常见的有url hash
、fair
等。
在默认情况下,内置策略会被编译进Nginx
内核,使用时只需要在Nginx
服务器配置中设置相关参数即可。扩展策略不会编译进Nginx
内核,需要手动将第三方模块编译到Nginx
内核。
负载均衡策略实现原理
轮询策略: 就是将每个前端请求按顺序(时间顺序或排列次序)逐一分配到不同的后端节点上,对于出现问题的后端节点自动排除。
加权轮询策略: 就是在基本的轮询策略上考虑后端节点接受请求的权重,指定各后端节点被轮询的几率。加权轮询策略主要用于后端节点性能不均的情况。根据后端节点性能的实际情况。我们可以在Nginx
服务器的配置文件中调整权重值,使得整个网络对前端请求达到最佳的响应能力。
IP hash策略: 是将前端的访问IP
进行hash
操作,然后根据hash
结果将请求分配给不同的后端节点。这种策略可以看作是一种特殊的轮询策略。通过Nginx
的实现,每个前端访问IP
会固定访问一个后端节点。这样做的好处是避免考虑前端用户的session
在后端多个节点上共享的问题。
url hash策略: 扩展中的url hash
在形式上和ip hash
相近,不同之处在于,IP hash
策略是对前端访问IP进行hash
操作,而url hash
策略是对前端请求的url
进行了hash
操作。url hash
策略的有点在于,如果后端有缓存服务器,它能够提高缓存效率,同时也解决了session
的问题;缺点是,如果后端节点出现异常,它不能自动排除该节点。在实际使用过程中发现,后端节点出现异常会导致Nginx
服务器返回503错误。
fair策略: 扩展的第三方模块fair
则是从另一个角度来实现Nginx
服务器负载均衡策略的。该模块将前端请求转发到一个最近负载最小的后台节点。那么,负载最小怎么判断呢? Nginx
通过后端节点对请求的响应时间来判断负载情况。响应时间短的节点负载相对就轻。得出判断后,Nginx
就将前端请求转发到选中的负载最轻的节点。
Web 缓存
Squid
在Web服务器领域中是一款相当流行的开源代理服务器和Web
缓存服务器。作为网页服务器的前端
缓存服务器,在很多优秀的站点中,它被用以缓存前端请求,从而提高Web
服务器的性能,它还可以缓存万维网、域名系统或者其他网络搜索等,为一个集体提供网络资源共享服务。
Nginx
服务器从0.7.48版本开始,也支持了和squid
类似的缓存功能。
Nginx
服务器的Web缓存服务主要由proxy_cache
相关指令集和fastcgi_cache
相关指令集构成。其
中,proxy_cache
主要用于在Nginx服务器提供反向代理服务时,对后端资源服务器的返回内容进行URL缓存;fastcgi_cache
主要用于对FastCGI
的动态程序进行缓存。另外还有一款常用的第三方模块ngx_cache_purge
也是Nginx
服务器Web缓存功能中经常用到的。它主要用于清除Nginx服务器上指定的URL
缓存。
到Ngnx
0.8.32版本,proxy_cacahe
和fastcgi_cache
两部分的功能已经比较完善,再配合第三方
的ngx_cache_purge
模块,Nginx
服务器已经具备了Squid
所拥有的Web
缓存加速功能和清除指定URL
缓存的功能;同时,Nginx
服务器对多核CPU
的调度比Squid
更胜一筹,性能高于Squid
,而在反向代理,负载均衡代理等其他方面,Nginx
也不逊于Squid
。这使得Nginx
服务器可以同时作为负载均衡服务器和Web
缓存服务器来使用,基本可以取代Squid
。