NGinxnginx作者是一个俄罗斯人,供职于Rambler Media,nginx全称:engine X分支有:某宝的Tengine,另外一个是Registy,陌陌貌似使用的是这个版本nginx在研发是调用了libevent,libevent是一个高性能的网络库,可试下你epoll(),基于事件驱动的开发套件nginx特性:1,模块化设计,扩展性较高,开发人员可自行开发,但是他并不支持动态化卸载,也就意味着你必须首次编译进来,随nginx启动而启动,但是tengine支持DSO2,高可靠性,nginx是由一个主进程和多个子进程组成的。master是主控进程,负责读取验证配置,套接字管理,生产多个worker进程,worker又分为多个种类,其主进程解析配置文件,启动关闭worker进程,而worker进程则负责:如缓存加载,响应用户请求,cache管理3,低内存消耗。由于他是一个线程响应多个请求,所以对内存的消耗非常低,10000个keep-alive模式下链接,nginx只需要2.5MB内存4,支持热部署。如果配置文件更新,不用重启nginx,新配置可以生效,甚至于版本更新,老版本不用停机,新版本则可以上线。在或者更换日志文件,日志文件滚动 nginx支持事件驱动机制,支持AIO,支持MMAPnginx基本功能:1,静态资源的web服务器,能缓存打开的文件描述符2,支持http,smtp,pop3协议的反向代理服务器3,反向代理本来是客户端直接访问web服务器,web服务器响应客户端。但是反向代理加入后,他会插在中间,向外声称,我就是web服务器,客户端都来访问我把,客户端的用户请求到达代理后,代理负责把请求接入用户空间,将允许的请求封装后在送往后端真实web主机,对于后端web主机来讲,他响应的只是代理,而不是客户端请求当你快件一件物品,首先快递公司要确定物件是可以运输的,其次快递公司要保证运输是安全的,也就是快递公司按照他们自己的安全模式打包,最终收货方打开快件即可,但是对于代理来讲,收货方是不知道真正的发件人的,他会认为是快递公司发的,而不是发快件人发的。像以上两种,自己声称自己的是web服务器,接受客户端对web的请求,但是却又不负责提供任何内容,只是把请求封装交给后端服务器,从后端服务器取回内容,在将取回内容封装成客户端响应请求。这种方式则是反向代理!4,正向代理正向代理则是,代理客户端向外请求某个网站,反向代理则是接受用户请求,到某些或某个服务器上取回内容的,所以,反代是将自己扮演成特定的服务器的样子或某些。而正向代理则是代理成所有服务器的样子!5,而代理不止可以代理,还可以提供缓存加速!这种缓存是键值缓存,通常存在内存中,(键:URL,值:数据流)当不同用户请求同一段内容,缓存尚未失效,则直接取出缓存内容响应客户端!减轻后端服务器压力!6,支持负载均衡机制当在反代时,后端主机可以是多个,负载均衡和反代在一起时,他可能还需要回话保持,至于上面的缓存加速也在反代时实现7,LNMP ,fpm-fastcgi,uWSGI(python)8, 支持模块化,非DSO机制,支持过滤器zip等,支持SSI机制以及图像的大小调整9,支持SSL。提供https服务扩展功能:基于名称和IP的虚拟主机 ,支持keepalive,支持平滑升级,支持定制访问日志,支持使用日志缓冲区提供日志存储性能,支持url rewrite重写,支持路径别名,支持基于IP及用户端访问控制(借助于httpasswd实现),支持速度限制,支持并发数限制nginx基本架构特性:主进程;master进程,生成一个或多个worker进程事件驱动:epoll边缘触发,如果是bsd则基于kqueue机制,如果是suse则是/dev/poll复用器:select,poll,rt signal支持sendfile,sendfile64(支持更大的文件响应)支持AIO支持非阻塞,支持MMAP(内存映射)nginx工作模式:非阻塞,事件驱动,由一个master生成多个worker线程,每个worker响应N个请求nginx模块类型:核心模块标准http模块:Standard HTTP module可选模块:optional HTTP modulesmail module3rd party modulessendfile:AIO 静态网址用户请求-->网卡设备-->注册监听80端口的内核套接字绑定,根据用户请求目标端口,从而使得实现向用户空间的web转发,当web收到请求的是一个静态资源-->向内核发起IO请求--->内核把资源从硬盘加载到内存--->内核内存复制给进程内存,进程构建响应报文,从进程内存发往内核内存,在发往网卡响应客户端请求。httpd也支持sendfile