Nginx服务器
本文最后更新于 2025年11月3日 上午
学习:
概念
Nginx 是高性能的开源 Web 服务器,同时可用作反向代理、负载均衡器、邮件代理 和 HTTP 缓存。由俄罗斯程序员 Igor Sysoev 用 C 编写于 2004 年创建,现已成为全球最流行的 Web 服务器之一。
原理
特点
| 特点 | 说明 |
|---|---|
| 高并发 | 单机支持上万并发连接 |
| 内存占用低 | C 编写,极度轻量 |
| 异步非阻塞 | epoll 事件模型 |
| 热加载 | 修改配置可平滑重启 |
| 可扩展 | 支持自定义模块(Lua、RTMP等) |
高性能架构
- 事件驱动架构
- 采用异步非阻塞 I/O 模型
- 低内存消耗
- 处理静态资源时内存占用极少
- 多进程模型
- 一个主进程(Master Process)负责管理
- 多个工作进程(Worker Processes)负责处理请求
- 每个 Worker 都是单线程、基于 epoll(Linux 高性能 I/O 模型)
- 高并发能力
- 单机可高效处理成千上万的连接,在高并发环境下依然轻量、稳定、低占用
高可靠性
- 热部署
- 支持不停止服务更新配置和二进制文件
- 健康检查
- 对后端服务器进行健康状态监测
- 故障转移
- 自动剔除故障节点,保证服务可用性
应用
| 场景 | 说明 |
|---|---|
| 1️⃣ 静态资源服务器 | 高速提供 HTML、CSS、JS、图片、视频等静态文件 |
| 2️⃣ 反向代理 | 接收客户端请求,转发到后端(Node.js/Python/Java)服务 |
| 3️⃣ 负载均衡 | 在多台后端服务器之间分配请求,提高可用性与吞吐 |
| 4️⃣ 动静分离 | 静态资源由 Nginx 处理,动态接口由后端 API 服务处理 |
| 5️⃣ HTTPS / SSL 终结 | Nginx 负责 HTTPS 握手与证书,后端只处理纯 HTTP |
| 6️⃣ 缓存与压缩 | 可对静态文件 / 代理请求进行缓存与 Gzip 压缩,加速响应 |
| 7️⃣ 跨域与路由控制 | rewrite、add_header 配置实现 CORS、URL 重写、访问控制 |
对比
| 特性 | Nginx | Apache |
|---|---|---|
| 架构模型 | 事件驱动、异步非阻塞 | 进程/线程模型、同步阻塞 |
| 内存消耗 | 较低 | 较高 |
| 并发性能 | 优秀(高并发) | 良好 |
| 静态资源 | 非常高效 | 良好 |
| 动态内容 | 需通过FastCGI等 | 原生支持良好 |
| 配置语法 | 简洁直观 | 较复杂 |
| 模块系统 | 较新,热插拔 | 成熟,丰富 |
实现
模块
关键模块解析:
| 模块 | 作用 |
|---|---|
http |
处理 HTTP 请求的主要模块 |
server |
定义虚拟主机(域名、端口) |
location |
定义请求路径匹配规则(路由分发) |
proxy_pass |
转发请求到后端服务器(反向代理) |
upstream |
定义负载均衡服务器组 |
gzip |
开启响应压缩 |
ssl_certificate |
设置 HTTPS 证书 |
rewrite |
URL 重写、跳转 |
配置
配置文件路径(默认):/etc/nginx/nginx.conf
配置文件主要分为三个层级:
1 | |
示例
静态服务
1 | |
动静分离
1 | |
反向代理
反向代理与正向代理的区别?
正向代理:客户端代理自己访问外部(如 VPN)。
反向代理:代理服务器替后端服务处理客户端请求。
需求:当前端访问
http://example.com/api/...时,Nginx 将请求转发到本地运行的 Node.js 后端http://127.0.0.1:3000原理:客户端不知道后端真实地址,所有请求都通过 Nginx 转发。这就是“反向代理”,在 Nginx 中通过
proxy_pass实现。实现:
1
2
3
4
5
6
7
8
9
10server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
负载均衡
- 说明:
- weight:权重,数值越大请求比例越高
- down:临时下线
- 支持多种负载均衡算法
- 轮询(round-robin):默认方式
- 加权轮询(weighted round-robin)
- IP 哈希(ip_hash):会话保持
- 最少连接(least_conn)
- 一致性哈希(hash)
- 实现:
1
2
3
4
5
6
7
8
9
10
11
12upstream backend_servers {
server 127.0.0.1:3001 weight=3;
server 127.0.0.1:3002 weight=1;
server 127.0.0.1:3003 down;
}
server {
listen 80;
location /api/ {
proxy_pass http://backend_servers;
}
}
SSL/TLS
- 可以用 Let’s Encrypt 免费申请证书,通过
sudo certbot --nginx自动配置 - 实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/private.key;
# 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
location / {
proxy_pass http://backend;
}
}
常用
前端常用场景总结:
| 场景 | Nginx 配置功能 |
|---|---|
| 部署前端项目(React/Vue) | 静态资源服务(root + index) |
| 配置路由模式 history | try_files $uri /index.html; |
| 代理后端 API | proxy_pass http://localhost:3000/ |
| 解决跨域问题 | add_header Access-Control-Allow-Origin *; |
| 前后端分离 | 动静分离配置 |
| HTTPS 强制跳转 | return 301 https://$host$request_uri; |
问题
| 分类 | 考点 |
|---|---|
| 静态资源服务 | root、index |
| 反向代理 | proxy_pass |
| 路由重写 | try_files |
| 跨域处理 | add_header |
| 缓存控制 | expires、Cache-Control |
| HTTPS 配置 | ssl_certificate |
| 性能优化 | gzip、worker_processes |
什么是 Nginx?作用是?
Nginx 是一个高性能的 Web 服务器,同时也作为反向代理、负载均衡器和静态资源服务器。在前端中 Nginx 通常用于:
- 静态资源托管(HTML/CSS/JS/图片)
- 接口请求的反向代理(解决跨域)
- 前端路由的 history 模式支持
- 简单的负载均衡(开发环境多服务)
- HTTPS 证书管理
为什么前端项目要用 Nginx 部署,而不是 Node
优点:
- 性能优势:Nginx 处理静态文件效率极高
- 资源消耗:内存占用少,并发能力强
- 稳定性:久经考验,故障率低
功能:
- Nginx 负责高效分发静态资源
- 支持路由控制、缓存、gzip 压缩
- 可以代理 API 请求
对比:
| 项目 | Nginx | Node.js |
|---|---|---|
| 类型 | Web 服务器 | 应用服务器 |
| 语言 | C | JavaScript |
| 主要用途 | 静态文件服务、反向代理 | 动态业务逻辑处理 |
| 优势 | 高并发、低内存、配置简单 | 灵活、逻辑可编程 |
实际上常搭配使用:Nginx 代理请求到 Node.js。
如何配置 Nginx 支持前端路由的 history 模式
1 | |
如何配置 Nginx 解决跨域问题?
1 | |
如何用 Nginx 优化前端静态资源加载?
1 | |
开发环境中如何使用 Nginx?
1 | |
Nginx服务器
https://xuekeven.github.io/2025/10/31/Nginx服务器/