Nginx 是什么?一文带你读懂Nginx – wiki词典

Nginx 是什么?一文带你读懂Nginx

什么是 Nginx?

Nginx(发音为 “engine-x”)是一个高性能的 HTTP 和反向代理服务器,也是一个邮件代理服务器和一个通用 TCP/UDP 代理服务器。最初由 Igor Sysoev 为俄罗斯 Rambler 网站开发,并于 2004 年公开发布。Nginx 因其卓越的性能、稳定性、丰富的功能集、简单的配置以及低资源消耗而迅速普及。

在互联网领域,Nginx 已经成为许多高流量网站和应用程序不可或缺的一部分,例如 Netflix、WordPress.com、GitHub 和 Cloudflare 等。

Nginx 的核心功能

Nginx 之所以强大,得益于它提供的一系列核心功能:

  1. 静态文件服务:Nginx 在提供静态内容(如 HTML、CSS、JavaScript 文件和图片)方面表现出色,其性能远超许多传统的 Web 服务器。它能以极高的效率处理并发请求,这对于需要快速加载大量静态资源的网站至关重要。

  2. 反向代理 (Reverse Proxy):这是 Nginx 最常用和最强大的功能之一。作为反向代理,Nginx 接收来自客户端的请求,然后将这些请求转发给后端服务器(如 Apache、Tomcat、Node.js 应用等),最后将后端服务器的响应返回给客户端。

    • 优点
      • 负载均衡:可以将请求分发到多台后端服务器,避免单点故障,提高系统的可用性和扩展性。
      • 安全性:隐藏了后端服务器的真实 IP 地址和架构,增加了安全性。
      • SSL/TLS 终结:Nginx 可以处理加密连接(HTTPS),减轻后端服务器的负担。
      • 缓存:可以缓存后端服务器的响应,加快对重复请求的处理速度。
  3. 负载均衡 (Load Balancing):配合反向代理功能,Nginx 可以实现多种负载均衡策略,将客户端请求有效地分发到集群中的多台后端服务器上,以优化资源使用、最大化吞吐量、最小化响应时间并避免任何一台服务器过载。

    • 常见的负载均衡算法
      • 轮询 (Round Robin):默认策略,按顺序依次将请求分发给每台服务器。
      • 权重 (Weighted Round Robin):根据服务器的权重比例分配请求,权重越高,分配到的请求越多。
      • IP Hash:根据客户端 IP 地址的哈希值分配请求,确保来自同一客户端的请求总是发送到同一台服务器,适用于需要会话持久性的场景。
      • 最少连接 (Least Connections):将请求发送给当前活动连接数最少的服务器。
  4. HTTP 缓存:Nginx 可以作为缓存服务器,存储后端服务器返回的内容。当再次收到相同请求时,如果缓存有效,Nginx 会直接返回缓存中的内容,而无需再次请求后端服务器,从而显著提高响应速度并减轻后端服务器的压力。

  5. URL 重写 (URL Rewriting):Nginx 允许管理员根据规则修改传入的 URL,例如将旧的 URL 重定向到新的 URL,或实现更友好的 URL 结构。

  6. TLS/SSL 终结:Nginx 可以作为 TLS/SSL 代理,处理所有加密和解密操作。这使得后端服务器无需配置和处理 SSL 证书,简化了后端配置并降低了其 CPU 消耗。

  7. WebSockets 代理:Nginx 可以很好地代理 WebSockets 连接,这对于现代实时 Web 应用程序(如聊天应用、在线游戏)非常重要。

  8. 流媒体服务器:Nginx 也可以用于流媒体服务,支持 HTTP FLV、HTTP MP4 等协议,提供视频点播服务。

Nginx 的工作原理

Nginx 采用事件驱动 (event-driven)异步非阻塞 (asynchronous, non-blocking) 的架构,这与传统的基于进程/线程的模型(如 Apache 的 prefork 或 worker 模式)有显著区别。

  • Master-Worker 进程模型:Nginx 启动时会有一个 Master 进程,负责读取和评估配置文件,以及管理 Worker 进程。Master 进程不会处理客户端请求。
  • Worker 进程:Master 进程会生成一个或多个 Worker 进程。所有的客户端请求都由 Worker 进程处理。
  • 事件驱动模型:每个 Worker 进程都能够处理数千个并发连接。这是因为 Worker 进程不会为每个连接创建一个新的进程或线程,而是通过事件循环 (event loop) 来监听和处理事件(如新的连接、数据可读、数据可写等)。当一个连接有数据到来时,Worker 进程会处理它;当数据处理完成后,Worker 进程不会等待下一个数据到来,而是去处理其他连接的事件。这种机制使得 Nginx 可以在有限的资源下处理大量并发请求,从而实现高性能和低资源消耗。

Nginx 与 Apache 的比较

Nginx 和 Apache 都是非常流行的 Web 服务器,但它们在设计哲学和性能表现上有所不同:

特性 Nginx Apache HTTP Server
架构 事件驱动、异步非阻塞 多进程、多线程(支持 prefork, worker, event)
并发处理 擅长处理大量高并发连接 在高并发下性能可能不如 Nginx
静态内容 性能卓越,资源消耗低 性能良好,但在高并发下可能资源消耗较高
动态内容 通常作为反向代理与后端应用服务器配合 直接处理动态内容(如 PHP 模块)
配置 简洁,模块化配置 灵活强大,但有时可能略显复杂
用途 常用作反向代理、负载均衡、静态文件服务器 全功能 Web 服务器,适用于各种场景
资源消耗 内存和 CPU 消耗低 相对较高

为什么选择 Nginx?

  • 高性能和可扩展性:在处理大量并发连接时表现出色,非常适合高流量网站。
  • 稳定性:其事件驱动架构使其即使在重负载下也能保持稳定。
  • 低资源消耗:相比其他服务器,Nginx 占用更少的内存和 CPU。
  • 强大的反向代理和负载均衡能力:是构建高可用、可扩展系统的重要组件。
  • 灵活性和可配置性:简洁的配置文件和丰富的指令集使其易于配置和扩展。
  • 活跃的社区和丰富的文档:遇到问题时容易找到解决方案和支持。

总结

Nginx 不仅仅是一个 Web 服务器,它是一个功能强大、高性能、高可靠性的多功能网络服务平台。从提供静态内容到作为反向代理、负载均衡器、API 网关,Nginx 在现代 Web 架构中扮演着越来越重要的角色。对于需要处理大量并发请求、追求高性能和高可用性的 Web 应用程序而言,Nginx 是一个理想的选择。

滚动至顶部