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 优化后接近异步) | 线程 |
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法