介绍
背景
Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也提供了IMAP/POP3/SMTP服务。 ,是由 Igor Sysoev -伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。
核心功能
- 反向代理:Nginx 可以作为反向代理服务器,将客户端的请求转发到后端服务器。
- 负载均衡:Nginx 支持多种负载均衡算法,如轮询(Round Robin)、IP 哈希(IP Hash)、最少连接(Least Connections)等。
- 静态文件服务:Nginx 能够高效地提供静态文件,如 HTML、CSS、JavaScript、图片等。
- HTTP 缓存:Nginx 提供了缓存机制,能够缓存 HTTP 请求的响应内容,提升访问性能。
- SSL/TLS 支持:Nginx 完全支持 SSL/TLS 协议,能够为 HTTPS 服务提供支持。
- 反向代理与负载均衡结合:Nginx 能将请求转发到多个后端服务器上,分担流量,提供高可用性。
- WebSocket 支持:Nginx 支持 WebSocket 协议,能够处理长连接。
请求处理流程 Nginx 的请求处理流程可以分为以下几个阶段:
接收请求:Nginx 监听客户端的请求并将其加入事件队列。
解析请求:在事件驱动模型的驱动下,Nginx 会解析客户端请求的 HTTP 请求头(如 URL、方法、主机名等)。
选择合适的服务:根据配置文件中的指令,Nginx 会选择合适的后端服务器进行请求转发,或者直接提供静态资源。
生成响应:Nginx 会根据后端服务器的响应或者本地的静态文件,生成响应数据并将其发送回客户端。
日志记录:Nginx 会记录请求的日志,供运维人员和开发人员分析和调试。
工作原理
事件驱动模型
Nginx 采用的是事件驱动的架构设计。与传统的多线程或多进程模型不同,Nginx 使用的是单进程模型,并通过异步事件驱动来处理客户端的连接请求。每当有新的请求到达时,Nginx 会将请求放入事件队列,由主线程统一调度。
通过这种方式,Nginx 可以在单个进程中处理大量并发连接,同时避免了传统的多线程带来的上下文切换和内存消耗问题。
开源版:http://nginx.org
商业版 plus: https://www.nginx.com; f5,对微服务、云原生、k8s大量支持,无需自研
openresty: http://openresty.org;nginx+lua
tengine: http://tengine.taobao.org;
