Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。
Nginx 因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是 Apache2.2+mod_proxy_balancer 的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到 Apache 的近 2/3。对 proxy 和 rewrite 模块的支持很彻底,还支持 mod_fcgi、ssl、vhosts ,适合用来做 mongrel clusters 的前端 HTTP 响应。
目前 Nginx 在国内很多大型企业都有应用,且普及率呈逐年上升趋势。选择 Nginx 的理由也很简单:
---面向客户的总入口。
---一台机器为不同的域名/ip/端口提供服务
---使用反向代理,整合后续服务为一个完整业务
---mvvm 模式中,用来发布前端 html/css/js/img
---使用 upstream,负载多个 tomcat
与其他web服务器相比,Nginx特点:
nginx使用预读、连接池、内存池等技术,使得单次HTTP请求速度更快。
Nginx的结构是“核心+模块”的结构,Nginx本身就是一个Epool或Kqueue的事件处理和分发架构,后面会讲到模块知识。
Nginx的核心由一个任务很轻的管理进程(master进程)和若干工作进程(worker进程)组成。具体的HTTP请求在工作进程内负载均衡,如果某个工作进程异常终止了,管理进程会迅速重启一个新的工作进程接替该进程。
一般情况下,10000个非活跃HTTP保活连接仅占用2.5MB内存。ngx_lua每扩展10000个连接也仅占2.xMB内存。
部署在万级以上的场合下。
Nginx全异步、非阻塞I/O的思想贯彻在核心、模块以及ngx_lua 模块中,无论是自己实现的模块,还是通过lua实现的脚本代码,都是非阻塞的高速运行。
由于Nginx的管理进程和工作进程是分开设计的,所以能够实现热部署功能。也就是系统不间断的情况下升级可执行程序,更新配置文件,更新日志。
高度模块化的设计是 Nginx 的架构基础。Nginx 服务器被分解为多个模块,每个模块就是
一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则。
Nginx 模块图
核心模块是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、
事件驱动机制、进程管理等核心功能。
标准 HTTP 模块提供 HTTP 协议解析相关的功能,如:端口配置、网页编码设置、HTTP
响应头设置等。
可选 HTTP 模块主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,如:
Flash 多媒体传输、解析 GeoIP 请求、SSL 支持等。
邮件服务模块主要用于支持 Nginx 的邮件服务,包括对 POP3 协议、IMAP 协议和
SMTP 协议的支持。
第三方模块是为了扩展 Nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua
支持等。