内容纲要
nginx
官网:https://nginx.org/en/
文档:https://nginx.org/en/docs/
nginx [engine x]是一个HTTP和反向代理服务器,也是一个邮件代理服务器以及一个通用的TCP/UDP代理服务器,最初由Igor Sysoev编写。很长一段时间以来,它一直在俄罗斯的许多高负载网站上运行,包括Yandex、Mail.Ru、VK和Rambler。根据Netcraft的数据,在2023年9月,nginx为全球最繁忙的网站中的20.78%提供了服务或代理。以下是一些成功案例:Dropbox、Netflix、Wordpress.com和FastMail.FM。
该项目的源代码和文档都是根据类似于2条款的BSD许可证分发的。
此外,Nginx, Inc. 还提供商业支持服务。
nginx具有以下基本的HTTP服务器特性
- 提供静态和索引文件,自动索引功能;打开文件描述符缓存
- 加速支持缓存的反向代理;负载均衡和容错处理;
- 加速支持FastCGI、uwsgi、SCGI和memcached服务器;
- 模块化架构。过滤器包括gzip压缩、字节范围、分块响应、XSLT、SSI和图像转换过滤器。如果它们由代理或FastCGI/uwsgi/SCGI服务器处理,单个页面内的多个SSI包含可以并行处理;
- SSL 和 TLS SNI 支持;
- 支持HTTP/2,具备基于权重和依赖关系的优先级排序;
- 支持HTTP/3。
其他HTTP服务器特性
- 基于名称和基于IP的虚拟服务器;
- 支持Keep-alive和流水线连接;
- 访问日志格式,缓冲日志写入,快速日志轮换以及syslog日志记录;
- 3xx-5xx错误代码重定向;
- 重写模块:使用正则表达式更改URI;
- 根据客户端地址 执行不同的功能;
- 基于客户端IP地址的访问控制,通过密码(HTTP基本认证)以及通过子请求的结果进行控制;
- 验证HTTP referer(referer);
- 支持PUT、DELETE、MKCOL、COPY和MOVE方法;
- FLV和MP4流媒体支持;
- 响应速率限制;
- 限制来自同一地址的并发连接数或请求数量;
- 基于IP的地理位置定位;
- A/B测试;
- 请求镜像;
- 嵌入式Perl;
- njs脚本语言。
邮件代理服务器的特点
- 用户通过外部HTTP身份验证服务器重定向到IMAP或POP3服务器;
- 用户使用外部HTTP身份验证服务器进行身份验证,并将连接重定向到内部SMTP服务器;
- 身份验证方法:
- 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+)、事件端口(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);
Accept-filters(FreeBSD 4.1+,NetBSD 5.0+)和TCP_DEFER_ACCEPT(Linux 2.4+)支持; - 10,000个不活动的HTTP长连接约占用约2.5M内存;
- 数据复制操作被最小化。
已测试的操作系统和平台
- 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.