nginx [引擎 x] 是一个HTTP和反向代理服务端、一个邮件代理服务端和一个常用的TCP/UDP代理服务端,最初由 Igor Sysoev编写。经过很长一段时间,它已经在许多重[zhong]【高负荷】加载的俄罗斯网站上运行,包括Yandex,Mail.Ru,VK和Rambler。据Netcraft统计,在2023的3月份,nginx已经服务和代理了21.37%的高运作的站点。这里有一些成功的故事Dropbox, Netflix, Wordpress.com, FastMail.FM。
源代码和文档以2-clause BSD-like license的约定发行。
可以在Nginx, Inc.获取社区支持
基本的HTTP服务端功能特性
- 服务运行时相关的static和index文件,默认index设置autoindexing;文件描述符_缓存open file descriptor cache:
- 利用缓存加速反向代理;负载均衡和容错
- 支持通过FastCGI, uwsgi, SCGI和memcached服务的缓存进行加速;负载均衡和容错;
- 模块化架构。过滤器包含gzipping,二进制流byte ranges,分块响应chunked responses,XSLT, SSI和图像转换image transformation过滤器。单页面包含的多个SSI可以平行运行,借助于FastCGI/uwsgi/SCGI 服务的代理;
- SSL 和 TLS SNI 支持;
- 支持具有加权和基于依赖关系的优先级的HTTP/2
其他的HTTP服务端功能特性
- 基于名称和基于IP的动态服务端virtual servers
- Keep-alive和管道连接的支持
- 获取日志格式化,缓冲日志写入,快速日志滚动和syslog日志记录
- 3xx-5xx 响应码重定向
- 重写模块:使用正则表达式改变URI;
- 基于客户端地址 执行不同的函数
- 基于客户端IP地址、密码认证(HTTP基本的认证)和[子请求结果]
- HTTP referer认证【调用链认证】
- PUT, DELETE, MKCOL, COPY, 和 MOVE 方法;
- FLV 和 MP4 流;
- 响应速率限制
- 限制来自一个地址并发的连接或请求数量
- 基于IP的地理定位
- A/B测试
- 请求镜像
- 嵌入式Perl
- njs脚本语言
邮件代理服务端功能特性
- 用户使用额外的HTTP认证服务端跳转到IMAP或POP服务端
- 认证方法【特殊名词,不译】:
- SSL支持
- STARTTLS 和 STLS 支持。
TCP/UDP代理服务端功能特性
- TCP和UDP的通用代理
- 支持TCP的SSL和TLS SNI
- 负载均衡和容错
- 基于客户端地址的获取权限控制
- 基于客户端地址执行不同的函数
- 限制来自一个地址并发的连接数量
- 获取日志格式化,缓冲日志写入,快速日志滚动和syslog日志记录
- 基于IP的地理定位
- A/B测试
- njs脚本语言
架构和可扩展性
- 一个主进程和多个工作进程;工作进程在非特权用户下运行
- 弹性配置;
- 再次配置 和 执行后更新 不会中断客户端服务
- 对与 kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), /dev/poll (Solaris 7 11/99+), event ports (Solaris 10), select, 和 poll的支持;
- 支持多种kqueue【这是一种IO复用技术】功能特性 包含 EV_CLEAR, EV_DISABLE (临时禁用事件), NOTE_LOWAT, EV_EOF, 可获取数据的数量, 错误码error codes; 【功能特性支持,暂时不译】
- 支持多种 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+) 支持;
- File AIO (FreeBSD 4.3+, Linux 2.6.22+);
- DIRECTIO (FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, macOS);
- Accept-filters (FreeBSD 4.1+, NetBSD 5.0+) 和 TCP_DEFER_ACCEPT (Linux 2.4+) 支持;
- 10,000 个非活 HTTP 保持活跃连接占用大约 2.5M 内存。
- 最低限度的数据复制操作。
测试 OS and 平台
- FreeBSD 3 — 12 / i386; FreeBSD 5 — 12 / amd64; FreeBSD 11 / ppc; FreeBSD 12 / ppc64;
- Linux 2.2 — 4 / i386; Linux 2.6 — 5 / amd64; Linux 3 — 4 / armv6l, armv7l, aarch64, ppc64le; Linux 4 — 5 / s390x;
- Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v; Solaris 11 / x86;
- AIX 7.1 / powerpc;
- HP-UX 11.31 / ia64;
- macOS / ppc, i386, x86_64;
- Windows XP, Windows Server 2003, Windows 7, Windows 10.