[nginx官方网站](https://www.nginx.com/)
[nginx.org](http://nginx.org/)
[wiki](https://www.nginx.com/resources/wiki/)
[docs](http://nginx.org/en/docs/)
## Nginx的特性
* 模块化设计、较好扩展性
但不支持动态模块加载,编译时启用的模块在nginx启动时会全部加载;1.9.11部分模块支持DSO
* 高可靠性
master进程负责管理 worker进程的崩溃不会相互影响
* 低内存消耗
10000个keep-alive连接在Nginx仅消耗2.5MB
* 支持热部署
不停机而更新配置文件、更换日志文件、更新服务器程序版本
## 基本HTTP功能
* 提供静态文件和index文件,生成自动索引,缓存打开文件的描述符;
* 使用缓存加快反向代理和FastCGI访问;
* 模块化结构,过滤器包括gzip,字节range,chunk响应,XSLT,SSI(Server Side Include),图像大小调;整,被传到后台服务器的多个SSI指令在单个页面并行处理;
* 支持SSL和TLS SNI;
## 其他HTTP功能
* 基于名称和IP的虚拟服务器;
* 基于客户端IP和HTTP基本认证的访问控制;
* 支持keepalive和管道连接;
* 平滑的重新配置和在线升级;
* 定制访问日志格式,缓存日志写入和快速日志轮询;
* 3xx-5xx错误重定向,定制错误页面;
* 支持url rewrite;
* FLV流文件;
* 速度限制;
* 限制同时连接数或者来自同一个IP地址的请求;
## 邮件代理服务器
## 架构和可扩展性
* 一个主进程和多个工作进程,工作进程以非特权用户运行;
主进程必须以管理员身份启动(启动<1023端口必须使用管理员身份),主进程用来监控和管理工作进程;主进程加载配置文件后,若有错误,不会影响工作进程;重新再加载正确后,新的连接建立时使用新配置。
* 支持的事件机制的IO框架
kqueue(FreeBSD 4.1+)、epoll(Linux 2.6+)、rt signals(Linux 2.2.19+)、/dev/poll(Solaris 7 11/99+)、event ports(Solaris 10)、select以及poll(次之);
众多支持的kqueue特性包括EV\_CLEAR、EV\_DISABLE(临时禁止事件)、NOTE\_LOWAT、EV\_EOF,可用数据的数量,错误代码;
* 支持sendfile(FreeBSD 3.1+, Linux 2.2+, Mac OS X 10.5+)、sendfile64(Linux 2.4.21+)和sendfilev(Solaris 8 7/01+);
用户请求响应不经过用户空间,报文在内核完成http封装直接从内核响应给客户端,避免了响应报文从内核复制到用户空间,再从用户空间复制到内核空间在响应给客户,尽可能避免数据拷贝操作。
* 文件AIO(FreeBSD 4.3+, Linux 2.6.22+);
* DIRECTIO (FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, Mac OS X);
* 支持Accept-filters(FreeBSD 4.1+, NetBSD 5.0+)和 TCP\_DEFER\_ACCEPT(Linux 2.4+);
* 支持连接过滤器,限制连接数
* 10000个非活跃的HTTP keep-alive连接仅占用约2.5M内存;
## 模块类型
* 核心模块
* Standard HTTP modules 标准http模块
* Optional HTTP modules 可选http模块
* Mail modules 邮件模块
* 3rd party modules 第三方模块