文档地址:about nginx
nginx(engine X),是一个HTTP服务器,反向代理服务器,邮件代理服务器,以及一般的TCP/UDP代理服务器。作者是:Igor Sysoev。很长一段时间,它被运行在俄国的一些大型网站上。网络调查发现:截止2016年9月,27.6%的商业网站使用nginx服务或代理。
基本HTTP服务特性(基本配置项,很多不做翻译了)
- 提供静态和索引文件(index配置),打开的文件描述符缓存自动索引
- 通过缓存实现反向代理加速,负载均衡及容错处理
- FastCGI,uwsgi,SCGI以及memcached服务器,通过缓存,实现加速
- 模块化的体系结构。过滤器包括gzipping,字节范围,分块响应,XSLT,SSI,图像变换滤波器。当包含多个SSI的单页面,被代理或者FastCGI/uwsgi/SCGI服务器处理,支持并行处理
- SSL和TLS SNI的支持
- 对HTTP/2的加权和基于依赖的优先次序的支持
其他HTTP服务特性
- 基于name&基于IP的虚拟服务器
- Keep-alive&管道连接的支持
- 访问日志格式,日志缓存,快速日志轮询,记录日志到syslog(系统日志)
- 3xx-5xx的错误代码的重定向
- rewrite模块支持:使用正则改变URI
- 根据客户端地址,执行不同的功能块
- 基于客户IP地址的访问控制,通过密码(HTTP Basic 认证)以及通过子请求结果,进行控制
- HTTP referer的验证
- HTTP的put,delete,mkcol,copy,move方法
- FLV,MP4流支持
- 响应速率的限制
- 限制同一地址的访问和请求的并发数量
- 基于IP的地理位置
- A/B测试
- 嵌入式Perl模块
邮件代理服务特性
- 通过外部HTTP的认证服务器,使用户重定向到IMAP或POP3服务器
- 使用外部HTTP认证服务器的用户认证以及链接重定向到内部的SMTP服务器
- 认证方法:
- POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
- IMAP:LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
- SMTP:AUTH LOGIN/PLAIN/CRAM-MD5;
- SSL 支持
- STARTTLS以及STLS 支持
- TCP/UDP代理服务特性
- TCP/UDP的一般代理
- 对TCP提供SSL终端以及SNI的支持
- 负载均衡以及容错处理
- 基于客户端IP的访问控制
- 根据客户端地址,执行不同的功能块
- 限制同一地址连接的并发数量
- 访问日志格式,日志缓存,快速日志轮询,记录日志到syslog(系统日志)
- 基于IP的地理位置
- A/B测试
体系结构和可扩展性
- 一个主进程以及多个工作进程;工作进程运行在一个非特殊权限的用户上
- 灵活的配置
- 不中断客户端服务,友好的执行重新配置和升级
- 支持 kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), /dev/poll (Solaris 7 11/99+), event ports (Solaris 10), select, and poll
- 支持 kqueue的多个特性,包括:EV_CLEAR, EV_DISABLE (to temporarily disable events), NOTE_LOWAT, EV_EOF, number of available data, error codes
- 支持 epoll的多个特性,包括:POLLRDHUP (Linux 2.6.17+, glibc 2.8+) and EPOLLEXCLUSIVE (Linux 4.5+, glibc 2.24+);
- 支持 sendfile (FreeBSD 3.1+, Linux 2.2+, Mac OS X 10.5+), sendfile64 (Linux 2.4.21+), and sendfilev (Solaris 8 7/01+)
- 支持 File_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+) and TCP_DEFER_ACCEPT (Linux 2.4+)
- 10000个活跃HTTP keep-alive 连接,占用2.5M内存
- 数据复制操作保持在最小值
已经测试过的系统和平台
- FreeBSD 3 — 10 / i386; FreeBSD 5 — 10 / amd64;
- Linux 2.2 — 4 / i386; Linux 2.6 — 4 / amd64; Linux 3 — 4 / armv6l, armv7l, aarch64, ppc64le;
- Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;
- AIX 7.1 / powerpc;
- HP-UX 11.31 / ia64;
- Mac OS X / ppc, i386;
- Windows XP, Windows Server 2003.