一、Nginx 是什么?
- 定义:Nginx 是一款 高性能的 HTTP 和反向代理服务器,同时支持邮件代理、TCP/UDP 负载均衡等功能。
- 核心优势:
- 高并发:基于事件驱动的异步非阻塞架构(如
epoll模型),可轻松应对数万并发连接。 - 低资源消耗:内存占用低,静态资源处理效率极高。
- 模块化设计:支持通过模块扩展功能(如缓存、SSL、负载均衡)。
- 高并发:基于事件驱动的异步非阻塞架构(如
二、Nginx 核心应用场景
| 场景 | 说明 | 配置示例 |
|---|---|---|
| 反向代理 | 隐藏真实服务器,转发请求到后端服务。 | 反向代理配置示例 |
| 负载均衡 | 将请求分发到多个后端服务器,提升系统吞吐量和容灾能力。 | 负载均衡配置示例 |
| 静态资源服务器 | 直接托管 HTML、CSS、图片等静态文件,降低应用服务器压力。 | 静态资源配置示例 |
| SSL 终端 | 统一处理 HTTPS 加密/解密,后端服务无需支持 SSL。 | SSL 配置示例 |
| API 网关 | 路由、限流、缓存、日志等统一管理。 | 结合 limit_req(限流)、access_log(日志)等模块配置。 |
三、Nginx 工作原理
1. 进程模型
- Master 进程:
管理 Worker 进程,读取配置文件、平滑重启、日志管理等。ps aux | grep nginx # 查看进程,通常 1 个 Master + 多个 Worker - Worker 进程:
实际处理请求的进程,彼此独立,避免竞争资源。数量通常等于 CPU 核心数。
2. 事件驱动模型
- 异步非阻塞:Worker 进程通过
epoll(Linux)或kqueue(Mac)等机制,非阻塞处理多个请求,避免线程切换开销。 - 多阶段处理:将请求处理分为多个阶段(如解析头、读取 body、过滤响应),通过状态机高效流转。
3. 请求处理流程
- 客户端发起请求到 Nginx。
- Master 进程分配 Worker 处理连接。
- Worker 解析请求头,匹配
server和location配置。 - 执行代理、重定向或静态文件响应。
- 返回响应给客户端,保持连接复用(HTTP/1.1 Keep-Alive)。
四、关键配置示例
1. 反向代理配置示例
server {
listen 80;
server_name example.com;
location /api {
proxy_pass http://backend-server:8080; # 转发到后端服务
proxy_set_header Host $host; # 传递原始请求头
proxy_set_header X-Real-IP $remote_addr;
}
}
2. 负载均衡配置示例
http {
upstream backend {
server 192.168.1.2:8000 weight=3; # 权重 3,处理更多请求
server 192.168.1.3:8000;
server 192.168.1.4:8000 backup; # 备用服务器,当主节点宕机时启用
}
server {
location / {
proxy_pass http://backend;
}
}
}
3. 静态资源配置示例
server {
listen 80;
server_name static.example.com;
location / {
root /data/www/static; # 静态文件根目录
index index.html;
expires 7d; # 设置缓存过期时间
}
}
4. SSL 配置示例
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/server.crt; # 证书路径
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://backend-server;
}
}
五、Nginx vs Apache
| 对比项 | Nginx | Apache |
|---|---|---|
| 并发模型 | 事件驱动、异步非阻塞,高并发性能优异。 | 多线程/多进程,高并发时资源消耗较大。 |
| 静态资源处理 | 高效,适合静态内容和高并发场景。 | 依赖模块优化,动态内容处理更灵活。 |
| 配置语法 | 简洁,基于块的声明式配置。 | 基于指令的复杂配置。 |
| 扩展性 | 模块需在编译时添加,灵活性较低。 | 动态加载模块(DSO),扩展性强。 |
六、面试回答示例
“Nginx 是一款高性能的反向代理服务器,采用事件驱动的异步非阻塞架构,适合高并发场景。核心功能包括反向代理、负载均衡、静态资源托管和 SSL 终端。它通过 Master 管理多个 Worker 进程,每个 Worker 使用 epoll 高效处理请求。实际项目中常用它隐藏后端服务、分发流量或缓存静态文件。”
快速记忆口诀
Nginx 高性能,事件驱动异步行。
反向代理负载均,静态资源它最灵。
Master 管 Worker,epoll 模型效率赢。
配置简洁模块化,高并发下稳如钉。