Nginx
Nginx 是一款高性能的 HTTP 服务器、反向代理服务器和负载均衡器,核心作用是处理客户端(如浏览器)的请求,分发到后端服务或直接返回静态资源,广泛用于网站部署、服务架构优化等场景。
基础内容
诞生背景
优势亮点
核心功能
反向代理
Nginx 反向代理是其最常用的功能之一,核心作用是作为客户端与后端服务之间的 “中间代理人”。它先统一接收客户端请求,再按预设规则转发至后端具体服务,最后将后端响应回传给客户端。通过这一过程,既能隐藏后端服务的真实地址、统一请求入口,还能实现负载均衡、缓存、安全防护等延伸能力。
反向代理的核心价值
反向代理并非简单的 “请求转发器”,而是通过中间层为系统架构提供多重关键支撑:
- 隐藏后端架构:客户端仅能看到 Nginx 服务器地址,无法直接访问后端应用服务器(如 Tomcat、Node.js 服务),降低后端服务暴露风险。
- 统一入口管理:无论后端部署多少台服务、使用何种技术栈,客户端只需向 Nginx 发送请求,由 Nginx 统一调度,简化客户端对接逻辑。
- 支撑上层功能:为负载均衡、HTTP 缓存、SSL 终结等功能提供基础,例如多台后端服务的请求分配、静态资源的缓存加速,均需基于反向代理实现。
- 解决跨域问题:客户端直接访问后端服务可能因浏览器跨域规则被拦截,通过 Nginx 转发可统一处理跨域配置(如添加 CORS 响应头),避免前端额外适配。
反向代理完整工作流程
以 “用户访问 https://example.com/api/user
获取用户信息” 为例,完整流程如下:
客户端发起请求
用户在浏览器输入 URL 或前端代码发送接口请求,请求先发送至example.com
对应的服务器(即 Nginx 服务器),携带请求头(如Host
、User-Agent
)和请求参数。Nginx 接收请求并匹配配置
Nginx 监听 80/443 端口(HTTP/HTTPS 默认端口),接收到请求后,根据主配置文件(nginx.conf
)中的server
块(匹配example.com
域名)和location
块(匹配/api/user
路径),找到对应的反向代理规则(如proxy_pass http://backend-server:8080
)。Nginx 转发请求到后端服务
Nginx 按照proxy_pass
配置,将请求转发至后端服务(如地址为http://backend-server:8080
的 Node.js 服务)。此时 Nginx 会自动调整请求头,例如添加X-Real-IP
(传递客户端真实 IP)、X-Forwarded-For
(记录请求转发路径)等,方便后端服务获取客户端原始信息。后端服务处理请求
后端服务(如backend-server:8080
)接收到 Nginx 转发的请求,执行业务逻辑(如查询数据库获取用户信息),处理完成后生成响应数据(如 JSON 格式的用户信息),并将响应回传给 Nginx。Nginx 处理响应(可选增强)
Nginx 接收到后端响应后,可根据配置进行额外处理:- 若开启了 HTTP 缓存,将响应内容缓存到本地,后续相同请求可直接返回缓存,无需再次转发;
- 若配置了响应头优化,添加或修改响应头(如
Cache-Control
、Access-Control-Allow-Origin
); - 若后端响应存在错误(如 502 状态码),可返回自定义错误页面,提升用户体验。
Nginx 回传响应给客户端
Nginx 将处理后的响应数据回传给客户端(浏览器或前端应用),客户端解析响应并展示结果(如页面渲染用户信息),整个请求流程结束。
典型配置示例(以 HTTP 反向代理为例)
以下是 Nginx 实现反向代理的基础配置,可直接用于将 example.com/api
路径的请求转发至后端服务:
# 配置服务器块,匹配域名 example.com
server {
listen 80; # 监听 HTTP 80 端口
server_name example.com; # 匹配的域名
# 配置 location 块,匹配 /api 开头的请求
location /api {
# 核心:转发请求到后端服务地址(http://后端IP:端口)
proxy_pass http://192.168.1.100:8080;
# 可选:传递客户端真实 IP 和请求信息
proxy_set_header Host $host; # 传递原始请求的 Host 头
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递转发链
proxy_set_header X-Forwarded-Proto $scheme; # 传递原始请求协议(http/https)
# 可选:设置超时时间,避免后端无响应导致 Nginx 阻塞
proxy_connect_timeout 5s; # 与后端建立连接的超时时间
proxy_send_timeout 10s; # 发送请求到后端的超时时间
proxy_read_timeout 10s; # 读取后端响应的超时时间
}
# 其他路径(如 / 根路径)可配置静态资源服务
location / {
root /usr/share/nginx/html; # 静态资源目录
index index.html; # 默认首页
}
}
常见使用场景
- 单后端服务隐藏:后端服务(如个人开发的 Node.js 接口)仅对内网开放,通过 Nginx 反向代理对外提供访问,避免直接暴露后端端口。
- HTTPS 终结:Nginx 接收客户端 HTTPS 请求(配置 SSL 证书),解密后以 HTTP 协议转发给后端服务,减少后端服务的加密 / 解密性能消耗。
- 前后端分离项目:前端静态资源(Vue/React 打包文件)由 Nginx 直接提供服务,前端发起的 API 请求通过 Nginx 反向代理转发至后端接口服务,解决跨域问题。
负载均衡
HTTP 缓存
静态服务内容
SSL/TLS 加密
邮件代理服务
URL 重写和重定向
FastCGI、uWSGI、gRPC 支持
流控与限流
访问控制和认证
优势价值
Nginx 的核心优势
- 高性能
- 高稳定
- 轻量级
- 扩展性强
核心价值
- 隐藏后端服务:客户端只与 Nginx 交互,不知道后端真实 IP 和端口,降低后端服务被直接攻击的风险。
- 统一入口:多个后端服务(如前端、API、文件服务)可通过 Nginx 统一对外暴露一个域名和端口,简化客户端访问(如 www.xxx.com 既对应前端,也通过 /api 对应后端)。
- 适配后端架构:支持后端服务部署在内网(无公网 IP),只需 Nginx 有公网 IP 即可,降低后端服务器的网络配置复杂度。