Nginx[读音:engine x
]是HTTP和反向代理服务器,邮件代理服务器,以及Igor Sysoev最初编写的通用TCP/UDP代理服务器。在很长一段时间以来,它一直在许多负载重的俄罗斯网站上运行,包括:Yandex,Mail.Ru,VK和Rambler。 根据Netcraft的说法,Nginx在2017年3月份服务或代理了28.50%
的最繁忙的网站。这里有一些成功案例:Netflix,Wordpress.com,FastMail.FM。
NGINX有什么不同? NGINX使用可扩展的事件驱动架构,而不是更传统的过程驱动架构。 这需要更低的内存占用,并且当并发连接扩大时,使内存使用更可预测。
在传统的Web服务器体系结构中,每个客户端连接作为一个单独的进程或线程处理,随着网站的流行度增加,并发连接数量的增加,Web服务器减慢,延迟了对用户的响应。
从技术的角度来看,产生一个单独的进程/线程需要将CPU切换到新的任务并创建一个新的运行时上下文,消耗额外的内存和CPU时间,从而对性能产生负面影响。
NGINX开发的目标是实现10
倍以上的性能,优化服务器资源的使用,同时也能够扩展和支持网站的动态增长。 因此,NGINX成为最知名的模块化,事件驱动,异步,单线程Web服务器和Web代理之一。
源代码和文档按照两条BSD类许可证分发。 商业支持可从Nginx,Inc.获得。
基本的HTTP服务器功能
- 提供静态和索引文件,自动索引; 打开文件描述符缓存;
- 加速反向代理与缓存; 负载均衡和容错;
- 通过缓存FastCGI,uwsgi,SCGI和memcached服务器来加速支持; 负载均衡和容错;
- 模块化架构。 过滤器包括gzip,字节范围,分块响应,XSLT,SSI和图像变换过滤器。 如果由代理或FastCGI/uwsgi/SCGI服务器处理,则单页内的多个SSI包含可以并行处理;
- SSL和TLS SNI支持;
- 支持具有加权和依赖关系优先级的HTTP/2。
其他HTTP服务器功能
- 基于名称和基于IP的虚拟服务器;
- 保持活动和管道连接的支持;
- 访问日志格式,缓冲日志写入,快速日志轮换和syslog日志记录;
3xx
-5xx
错误代码重定向;- 重写模块:使用正则表达式更改URI;
- 根据客户端地址执行不同的功能;
- 根据客户端IP地址,密码(HTTP Basic认证)和子请求结果进行访问控制;
- HTTP引用的验证
- PUT,DELETE,MKCOL,COPY和MOVE方法;
- FLV和MP4流媒体;
- 响应速度限制;
- 限制来自一个地址的同时连接或请求的数量;
- 基于IP的地理定位;
- A/B测试;
- 嵌入式Perl
- nginScript。
邮件代理服务器功能
- 使用外部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的通用代理;
- SSL和TLS SNI支持TCP;
- 负载均衡和容错;
- 基于客户地址的访问控制;
- 根据客户端地址执行不同的功能;
- 限制来自一个地址的同时连接数;
- 访问日志格式,缓冲日志写入,快速日志轮换和syslog日志记录;
- 基于IP的地理定位;
- A/B测试;
- nginScript。
架构和可扩展性
- 一个主和几个工作进程; 工作进程在非特权用户下运行;
- 灵活配置;
- 重新配置和升级可执行文件,而不会中断客户端服务;
- 支持kqueue(FreeBSD 4.1+),epoll(Linux 2.6+),/ dev / poll(Solaris 7 11/99 +),事件端口(Solaris 10),select和poll;
- 支持各种kqueue功能,包括EV_CLEAR,EV_DISABLE(临时禁用事件),NOTE_LOWAT,EV_EOF,可用数据数,错误代码;
- 支持各种epoll功能,包括EPOLLRDHUP(Linux 2.6.17+,glibc 2.8+)和EPOLLEXCLUSIVE(Linux 4.5+,glibc 2.24+);
- 支持sendfile(FreeBSD 3.1+,Linux 2.2+,macOS 10.5+),sendfile64(Linux 2.4.21+)和sendfilev(Solaris 8 7/01 +);
- 文件AIO(FreeBSD 4.3+,Linux 2.6.22+);
- DIRECTIO(FreeBSD 4.4+,Linux 2.4+,Solaris 2.6+,macOS);
- 接受过滤器(FreeBSD 4.1+,NetBSD 5.0+)和TCP_DEFER_ACCEPT(Linux 2.4+)支持;
- 10,000个不活动的HTTP保持连接大约需要
2.5M
内存; - 数据复制操作保持最小。
经测试的操作系统和平台
- FreeBSD 3 — 11 / i386; FreeBSD 5 — 11 / 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;
- macOS / ppc, i386;
- Windows XP, Windows Server 2003.
Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx 为我们选择了 epoll and kqueue 作为开发模型.
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。