Appearance
什么是Nginx
nginx(engin x)是一个 HTTP Web 服务器、反向代理、内容缓存、负载均衡器、TCP/UDP 代理服务器和邮件代理服务器。它最初由Igor Sysoev编写,并以2 条款 BSD 许可证 发布 。
nginx 以其灵活性、高性能和低资源占用率而闻名:
- 全球最受欢迎的网络服务器 [ Netcraft ];
- DataDog 一直是最受欢迎的 Docker镜像之一;
- 为多个 Kubernetes Ingress 控制器提供支持,包括 我们自己的控制器。
F5 公司提供 企业发行、商业支持和培训。
HTTP 服务器基本功能
- 提供静态文件和 索引 文件, 自动索引; 打开文件描述符缓存;
- 加速反向代理(带缓存)、 负载均衡和容错;
- 加速支持FastCGI、 uwsgi、 SCGI和 memcached服务器 的缓存 ; 负载均衡和容错;
- 模块化架构。过滤器包括 gzip 压缩、字节范围、分块响应、 XSLT、 SSI和图像转换过滤器。如果单个页面中的多个 SSI 包含项由代理服务器或 FastCGI/uwsgi/SCGI 服务器处理,则可以并行处理;
- SSL和TLS SNI支持;
- 支持 基于加权和依赖关系的 HTTP/2优先级排序;
- 支持HTTP/3。
其他 HTTP 服务器功能
- 基于名称和基于 IP 的 虚拟服务器;
- 支持 保持连接和流水线连接;
- 访问日志格式、 缓冲日志写入、 快速日志轮换和 系统日志记录;
- 3xx-5xx 错误代码 重定向;
- 重写模块: 使用正则表达式更改 URI;
- 根据 客户端地址执行不同的功能;
- 基于 客户端 IP 地址、 密码(HTTP 基本身份验证)和 子请求结果的访问控制;
- 验证 HTTP引用页;
- PUT 、DELETE、MKCOL、COPY 和 MOVE方法;
- FLV 和 MP4 流媒体;
- 响应速率限制;
- 限制来自同一地址的 并发连接 数 或 请求数;
- 基于 IP 的地理位置定位;
- A/B 测试;
- 请求镜像;
- 嵌入式Perl;
- njs脚本语言。
邮件代理服务器功能
- 使用外部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和 TLS SNI ;
- 负载均衡和容错;
- 基于 客户端地址的访问控制;
- 根据 客户端地址执行不同的功能;
- 限制来自同一地址的 并发连接 数 ;
- 访问日志格式、 缓冲日志写入、 快速日志轮换和 系统日志记录;
- 基于 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 keep-alive 连接大约占用 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、Windows 11。