跳过正文

Nginx Funciton

86 字·1 分钟· loading · loading ·
nginx
小橘子Single
作者
小橘子Single
人生如戏,全靠演技

Nginx 的功能特性

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

基本HTTP服务

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

在Nginx提供的基本HTTP服务中,主要包含以下功能特性:

  • 处理静态文件(如HTML静态网页及请求);处理索引文件以及支持自动索引。
  • 打开并自行管理文件描述符缓存。
  • 提供反向代理服务,并且可以使用缓存加速反向代理,同时完成简单负载均衡及容错。
  • 提供远程FastCGI服务的缓存机制,加速访问,同时完成简单的负载均衡及容错。
  • 使用 Nginx的模块化特性提供过滤器功能。Nginx基本过滤器包括Gzip压缩ranges支持chunked响应XSLTSSI以及图像缩放功能等。其中,针对包含多个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 hashfair等。

  在默认情况下,内置策略会被编译进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_cacahefastcgi_cache两部分的功能已经比较完善,再配合第三方 的ngx_cache_purge模块,Nginx服务器已经具备了Squid所拥有的Web缓存加速功能和清除指定URL缓存的功能;同时,Nginx服务器对多核CPU的调度比Squid更胜一筹,性能高于Squid,而在反向代理,负载均衡代理等其他方面,Nginx也不逊于Squid。这使得Nginx服务器可以同时作为负载均衡服务器和Web缓存服务器来使用,基本可以取代Squid