Nginx简介 #
一、Nginx概述 #
Nginx(发音为"engine-x")是一款轻量级、高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。由俄罗斯程序员Igor Sysoev于2004年首次发布,现已成为全球最流行的Web服务器之一。
Nginx以其高并发、低内存占用、稳定性强而闻名,被广泛应用于高流量网站。根据Netcraft的统计,Nginx已成为全球第二大Web服务器软件。
二、Nginx发展历史 #
2.1 诞生背景 #
2002年,Igor Sysoev开始开发Nginx,目的是解决C10K问题(同时处理10000个客户端连接)。当时的Apache服务器在处理高并发连接时存在性能瓶颈,Nginx应运而生。
2.2 主要版本演进 #
| 版本 | 发布年份 | 重要特性 |
|---|---|---|
| Nginx 0.1.0 | 2004 | 首次公开发布 |
| Nginx 0.6.0 | 2007 | 支持Windows平台 |
| Nginx 1.0.0 | 2011 | 正式稳定版发布 |
| Nginx 1.2.0 | 2012 | HTTP/1.1代理支持 |
| Nginx 1.4.0 | 2013 | SPDY/3支持 |
| Nginx 1.6.0 | 2014 | 增强的代理功能 |
| Nginx 1.8.0 | 2015 | 稳定版升级 |
| Nginx 1.10.0 | 2016 | HTTP/2支持 |
| Nginx 1.12.0 | 2017 | 动态模块支持 |
| Nginx 1.14.0 | 2018 | TLS 1.3支持 |
| Nginx 1.16.0 | 2019 | 长期稳定版 |
| Nginx 1.18.0 | 2020 | 新稳定版 |
| Nginx 1.20.0 | 2021 | 性能优化 |
| Nginx 1.22.0 | 2022 | 安全增强 |
| Nginx 1.24.0 | 2023 | 最新稳定版 |
2.3 商业版本 #
Nginx公司于2011年成立,提供商业版本Nginx Plus,包含更多企业级功能:
- 主动健康检查
- 动态配置
- 会话持久化
- 高级监控
三、Nginx架构特点 #
3.1 事件驱动架构 #
Nginx采用事件驱动、异步非阻塞的架构,这是其高性能的关键。
┌─────────────────────────────────────────┐
│ Master Process │
│ (管理worker进程、读取配置、平滑升级) │
└─────────────────┬───────────────────────┘
│
┌─────────────┼─────────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Worker 1│ │Worker 2│ │Worker N│
│(事件循环)│ │(事件循环)│ │(事件循环)│
└────────┘ └────────┘ └────────┘
3.2 进程模型 #
Nginx采用Master-Worker进程模型:
Master进程职责:
- 读取和验证配置文件
- 管理Worker进程
- 平滑重启和升级
- 不处理客户端请求
Worker进程职责:
- 处理客户端请求
- 使用事件循环处理多个连接
- 单线程、非阻塞
3.3 连接处理机制 #
Nginx使用高效的事件模型:
| 系统 | 事件模型 |
|---|---|
| Linux | epoll |
| FreeBSD | kqueue |
| macOS | kqueue |
| Windows | select/IOCP |
四、Nginx核心优势 #
4.1 高并发处理能力 #
Nginx可以轻松处理数万个并发连接,内存占用极低。
worker_processes auto;
worker_connections 65535;
4.2 低内存消耗 #
每个连接仅占用几KB内存,相比Apache的进程模型,内存效率极高。
4.3 高稳定性 #
Nginx采用分阶段资源分配技术,避免内存泄漏,可长期稳定运行。
4.4 热部署 #
支持不停机更新配置和升级版本:
nginx -s reload
kill -USR2 $(cat /var/run/nginx.pid)
4.5 模块化设计 #
Nginx采用模块化架构,功能可扩展:
| 模块类型 | 说明 |
|---|---|
| 核心模块 | HTTP、Event、Mail |
| 标准模块 | Rewrite、Proxy、SSL |
| 第三方模块 | Lua、Headers-More |
五、Nginx应用场景 #
5.1 静态资源服务器 #
Nginx非常适合提供静态文件服务:
server {
listen 80;
server_name static.example.com;
location / {
root /var/www/static;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
5.2 反向代理服务器 #
将请求转发到后端应用服务器:
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
5.3 负载均衡器 #
分发请求到多个后端服务器:
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
5.4 API网关 #
作为微服务架构的API网关:
server {
listen 80;
location /api/user {
proxy_pass http://user-service:8080;
}
location /api/order {
proxy_pass http://order-service:8080;
}
location /api/product {
proxy_pass http://product-service:8080;
}
}
5.5 邮件代理服务器 #
Nginx还可以代理IMAP/POP3/SMTP:
mail {
server_name mail.example.com;
imap {
listen 143;
proxy_pass mail_backend;
}
}
六、Nginx vs Apache #
| 特性 | Nginx | Apache |
|---|---|---|
| 架构 | 事件驱动 | 进程/线程驱动 |
| 并发处理 | 高(异步非阻塞) | 中(同步阻塞) |
| 内存占用 | 低 | 高 |
| 静态文件 | 极快 | 较快 |
| 动态内容 | 需代理到后端 | 原生支持(模块) |
| 配置灵活性 | 高 | 高 |
| 模块加载 | 需编译 | 动态加载 |
| .htaccess | 不支持 | 支持 |
| 学习曲线 | 中等 | 较低 |
七、知名用户 #
许多知名公司使用Nginx:
- Netflix:流媒体服务
- Dropbox:云存储
- WordPress.com:博客平台
- GitHub:代码托管
- Instagram:图片社交
- 百度:搜索引擎
- 腾讯:社交平台
- 淘宝:电商平台
八、Nginx生态系统 #
8.1 OpenResty #
基于Nginx的Web平台,集成Lua脚本支持:
location /hello {
content_by_lua_block {
ngx.say("Hello, OpenResty!")
}
}
8.2 Tengine #
淘宝开发的Nginx分支,增加了很多高级特性:
- 动态模块加载
- 更强的负载均衡
- 主动健康检查
8.3 Nginx Unit #
Nginx官方的应用服务器,支持多语言:
- Python
- PHP
- Go
- Node.js
- Ruby
九、学习路线建议 #
9.1 初级阶段 #
- 了解Nginx基本概念
- 学会安装和配置
- 搭建静态文件服务器
- 配置简单的反向代理
9.2 中级阶段 #
- 掌握负载均衡配置
- 配置SSL/HTTPS
- 学习缓存机制
- 日志分析和监控
9.3 高级阶段 #
- 性能调优
- Lua脚本开发
- 源码分析
- 自定义模块开发
十、总结 #
Nginx是一款强大、高效的Web服务器和反向代理:
- 高性能:事件驱动架构,轻松处理高并发
- 低资源:内存占用极低
- 高可靠:稳定性强,支持热部署
- 功能丰富:反向代理、负载均衡、缓存等
- 生态完善:OpenResty、Tengine等衍生项目
准备好开始学习Nginx了吗?让我们进入下一章,学习如何安装Nginx。