Nginx 了解

Nginx 概述

Nginx(读作 "engine x")是一款高性能的 HTTP 服务器、反向代理服务器,同时支持 IMAP/POP3/SMTP 邮件代理。由俄罗斯程序员 Igor Sysoev 于 2004 年开源发布,历经二十年发展,已成为全球最流行的 Web 服务器之一。

六大核心特性

特性

说明

🧩 模块化架构

功能按需组合,编译时可自由裁剪,支持动态加载/卸载模块,扩展性强

🛡️ 高可靠性

Master 进程监控 Worker,Worker 崩溃后自动 fork 恢复,进程间完全隔离

💾 内存效率

事件驱动 + 异步非阻塞,空闲连接仅占 ~260 字节(1 万长连接仅需约 2.5 MB)

♨️ 热部署能力

通过信号控制平滑升级,Master 持续运行,Worker 逐步替换,零用户感知停机

🚀 高并发处理

基于 epoll 多路复用,单 Worker 可管理数万连接,静态文件可达 10 万+ QPS

⚖️ 负载均衡

内置轮询/加权轮询/IP_Hash/最少连接数,生产环境推荐一致性哈希解决扩容缓存失效问题

关键性能指标速记

指标

参考值

单连接内存占用

~260 字节(1 万连接 ≈ 2.5 MB)

官方宣称并发上限

5 万连接

静态文件 QPS(8C16G)

8 万 ~ 10 万

Worker 进程数建议

= CPU 核心数

实际生产并发

2 万 ~ 3 万连接(稳定区间)

极限场景(淘宝 Tengine)

24 GB 内存机器可支撑 200 万并发请求

Nginx 是一款基于事件驱动的异步非阻塞反向代理服务器,单进程即可管理海量连接,内存占用极低、并发能力极强、支持热更新,通过 Master-Worker 架构保障服务高可用。

通俗理解 I/O 模型

以「取快递」为例:

I/O 模型

生活类比

同步阻塞

亲自去驿站,盯着小哥翻找,没找到就原地干等,啥也不做

同步非阻塞

亲自去驿站,小哥找的时候你在旁边刷手机,每隔 5 分钟问一句「找到了吗」

异步阻塞

让机器人替你去驿站傻等,机器人原地发呆(资源浪费),实际场景极少存在

异步非阻塞

小程序下单「快递到件通知我」,该干嘛干嘛,收到推送再去取

Nginx 采用的就是「异步非阻塞」模型——也就是最高效的那种。

Nginx 核心功能速查表

分类

功能

关键指令/说明

静态资源

托管 HTML/CSS/JS/图片

sendfile on; 零拷贝传输

反向代理

HTTP/HTTPS/SMTP/POP3/IMAP 代理

proxy_pass 转发请求 + 缓存后端响应

动态应用代理

FastCGI(PHP)、uWSGI(Python)、SCGI

fastcgi_pass、uwsgi_pass、scgi_pass

模块扩展

Gzip 压缩 / SSL 加密 / 图片缩放

gzip on;、ssl_certificate、image_filter

负载均衡

轮询 / 加权轮询 / IP_Hash / 最少连接数

upstream 块配置 + 健康检查

虚拟主机

多站点隔离(域名 / IP / 端口)

server_name 区分不同站点

访问控制

IP 黑白名单 / HTTP 基础认证

allow/deny、auth_basic

流量治理

限并发数 / 限传输速率

limit_req、limit_rate

URL 重写

伪静态 / 重定向

rewrite + 正则表达式

路径处理

root(追加路径)/ alias(替换路径)

root /var/www; → /index.html = /var/www/index.html

日志定制

自定义记录字段 / 日志切割

log_format 定义格式

长连接

TCP 复用减少握手

keepalive_timeout

热部署

平滑加载配置 / 不停服升级

nginx -s reload、信号控制

Nginx 是全能型流量网关——前端扛静态资源、中间做反向代理、后端调度负载均衡,集安全管控、流量治理、日志监控于一体,是现代微服务架构的标配组件。

负载均衡策略

负载均衡是将用户请求分发到多台后端服务器上,从而分担单台服务器的压力,提高系统的可用性、吞吐量和容错能力。

策略总览

策略名称

配置指令

是否内置

轮询

无(默认)

✅ 内置

加权轮询

weight=n

✅ 内置

IP哈希

ip_hash

✅ 内置

最少连接

least_conn

✅ 内置

随机

random

✅ 内置(1.15.1+)

一致性哈希

hash

✅ 内置(1.7.2+)

最少时间

least_time

❌ Nginx Plus 付费版

💡 生产环境建议:缓存场景优先用一致性哈希(避免扩容时缓存雪崩),无状态应用用加权轮询即可。

Nginx vs Apache 全方位对比

对比维度

Nginx

Apache

并发模型

异步非阻塞(事件驱动)

同步阻塞(进程/线程池)

并发上限

数万级(官方 5 万)

数千级(通常 < 1 万)

内存占用

极低(每连接 ~260 字节)

较高(每请求数 MB)

静态文件处理

⭐⭐⭐⭐⭐ 极快(零拷贝)

⭐⭐⭐ 一般

动态内容处理

需配合 PHP-FPM/uWSGI 等外部处理器

⭐⭐⭐⭐ 内置模块支持良好(mod_php)

配置难度

简洁,语法清晰

较复杂,指令繁多

模块机制

支持静态/动态模块,编译时可裁剪

模块丰富,DSO 动态加载

操作系统兼容

全平台(重点优化 Linux)

全平台(Windows 支持更好)

市场占有率

~34%(2024 年数据,全球第一)

~27%(全球第二)

选型建议

  • 静态资源高并发、反向代理、API 网关 → Nginx

  • 动态内容(如 PHP 传统项目)、.htaccess 重度依赖 → Apache

  • 现代架构 → Nginx 做前端负载均衡 + Apache/Tomcat 处理后端动态逻辑

三大服务器架构类比

餐厅服务模式对比

服务器

经营模式

人员配置

并发上限

Apache

🍽️ 传统点餐餐厅

每来一桌客人就雇一个专属服务员,1000 桌就需要 1000 个服务员(资源耗尽!)

⚠️ 受限人力成本

Nginx

🍱 自助餐厅

只有少数几个服务员穿梭巡视,客人举手即响应(异步非阻塞),1 万客人也只需要几个服务员

✅ 可无限扩展

Tomcat

🍕 快餐店

固定窗口排队,每个窗口配一个厨师(线程池),忙时排队等待

⚠️ 受窗口(线程)数限制

技术架构对比速览表

服务器

架构类型

核心组件

并发模型

处理单元

Apache

多进程/多线程架构

MPM 模块(Prefork/Worker/Event)

同步阻塞

进程 / 线程

Nginx

事件驱动 + 多进程架构

Master + Worker + epoll(Linux)

异步非阻塞

Worker 进程(事件循环)

Tomcat

多线程 + 组件化架构

Connector + Container + 线程池

同步阻塞(NIO 优化后接近异步)

线程