Nginx 知识

Nginx与Apache的异同

  Nginx和Apache都是HTTP服务器软件,在功能实现上都采用模块化的结构设计,都支持通用的语言接口,如PHP,PERL,PYTHON等,同时还支持正反向代理,虚拟主机,URL重写,压缩传输,SSL加密传输。

  二者之间的最大差别是Apache的处理速度很慢且占用较多内存资源,nginx则不然。

在功能实现上,Apache的所有模块都支持动静态编译,而nginx则都是静态编译的,同时Apache对FCGI的支持不好。而nginx则非常好

在处理连接方式上,nginx支持epoll,而Apache则不支持

在空间使用上,nginx安装包仅几百K,而Apache则较nginx庞大

注:FCGI 像是一个常驻(long-live)型的CGI,可一直运行者,只要激活,不需每次花时间去fork一次,同时还支持分布式运算,即FCGI程序可以在网站服务器以外的主机上执行,并接受来自其他网站服务器的请求。

  FCGI是跟语言无关的,可伸缩架构的CGI的开放扩展,其主要行为是将CGI解释器进程保持在内存中,以获得较高的性能,众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI进程保持在内存中,并接受FCGI管理器的调度,则可获得较高的性能,伸缩性,fail-over特性等。

   epoll 是Linux内核为处理大批量文件描述符而作的改进的poll,是Linux多路复用I/O接口,select/poll的增强版本,它能显著提高程序在大量并发中只有少量活跃下的CPU的利用率

  

  nginx 优势

  作为WEB服务器,NGINX处理静态文件,索引文件,自动索引效率高

  作为web代理服务器,nginx可实现无缓存的反向代理加速,提高网站运行速度

  作为负载均衡服务器,nginx可以在内部之间支持PHP,也可支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡

  在性能方面,nginx是专门为性能优化而开发的,在实现上注重效率,同时采用poll模型,可以支持更多并发连接,最大50000个并发连接,且占内存资源低

  在稳定性方面,nginx采用了分段资源分配技术,使得CPU与内存的占用率很低,保持10000个无活动的连接,只占用2.5M内存。因此具有很强的抗DOS攻击能力

  在高性能方面,nginx支持热部署,启动快,因此可以在不间断服务器的情况下对软件版本或配置升级。

  Nginx 的模块与工作原理

  nginx由内核和模块组成,内核设计微小简洁,完成的工作也非常简单,仅通过查找配置文件将client端请求映射到一个location block,而在location中所配置的每个指令将启动不同的模块去完成相应的工作。

  nginx模块从结构上分为核心模块,基础模块和第三方模块,HTTP模块,event模块和mail模块属核心模块,HTTP access模块,HTTP FCGI模块,HTTP PROXY模块,HTTP rewrite模块属第三方模块 ,而HTTP upstream request hash模块,notice模块和HTTP access key模块属第三方模块。

  nginx的模块从功能上分如下三类,

handlers(处理器模块),此类模块直接处理请求,并进行输出内容和修改headers信息等操作,handlers处理器模块一般只能有一个

filters (过滤模块)此类模块主要对 处理器模块输出的内容进行修改操作,最后由nginx输出。

proxies(代理类模块)。此类模块是nginx的HTTP upsteram 之类的模块,这些模块主要与后端一些服务比如FCGI等进行交互,实现服务代理和负载均衡等功能。

  在工作方式上,nginx分为单工作进程和多工作进程两种模式,在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的,在多工作模式下,每个工作进程包含多个线程,nginx默认为单工作进程模式

 nginx的模块直接编译进nginx,因此属静态编译方式,启动后,模块自动加载,Apache则首先将模块编译为一个.so文件,然后在配置文件中定是否加载,在解析配置文件时,nginx每个模块都可能去处理某个请求,但是同一个处理请求只能有一个模块完成。

end!

以上内容整理自《高性能Linux服务器实战》。

原文地址:https://www.cnblogs.com/changbo/p/4966578.html