一、核心定位
Nginx 反向代理是 Nginx 服务器的核心功能,简单说就是:客户端(浏览器 / APP)不直接访问目标服务器(后端服务、数据库、静态资源服务器等),而是先请求 Nginx ,由 Nginx 转发请求到目标服务器,再将服务器的响应结果返回给客户端。
对开发者而言,它本质是 "请求中转站 + 流量控制器",既能隐藏后端真实服务器地址,又能解决跨域、负载均衡、SSL 终结等开发 / 部署中的实际问题。
二、核心功能与开发 / 部署价值
-
隐藏后端服务,提升安全性 后端服务器(如 Java 服务、Node.js 服务)无需暴露公网 IP,仅 Nginx 对外提供访问入口,避免直接被攻击(如端口扫描、恶意请求)。例:用户访问
https://www.yourapp.com(Nginx 地址),实际请求被转发到内网的192.168.1.100:8080(Java 后端)。 -
解决跨域问题(前端开发刚需) 前端本地开发(如
http://localhost:3000)调用后端接口(如http://192.168.1.100:8080/api)时,会因浏览器同源策略触发跨域。用 Nginx 反向代理:前端请求http://localhost:80/api(Nginx 代理地址),Nginx 转发到后端接口,因请求目标是 Nginx(同源),跨域自动解决。 -
负载均衡(高并发部署必备) 当后端部署多台服务器(如 3 台 Java 服务),Nginx 可按规则(轮询、权重、IP 哈希)分发请求,避免单台服务器过载。例:用户请求均匀分配到
192.168.1.100:8080、192.168.1.101:8080、192.168.1.102:8080,提升系统并发能力。 -
**SSL 终结(简化后端配置)**仅在 Nginx 上配置 HTTPS 证书(处理 SSL 加密 / 解密),后端服务器只需处理 HTTP 请求,无需关心 SSL 配置,降低后端开发 / 维护成本。
-
**静态资源缓存(提升访问速度)**前端的 JS、CSS、图片等静态资源,可由 Nginx 直接返回(缓存到 Nginx 服务器),无需转发到后端,减少后端压力,提升页面加载速度。
三、核心配置示例(开发者实操级)
Nginx 反向代理通过 nginx.conf 配置,核心配置段为 location,以下是 3 个最常用场景的配置:
1. 基础反向代理(转发单个后端服务)
nginx
server {
listen 80; # Nginx 监听端口
server_name localhost; # 访问域名/IP
# 所有请求转发到后端服务
location / {
proxy_pass http://192.168.1.100:8080; # 目标服务器地址(后端服务)
proxy_set_header Host $host; # 传递客户端 Host 信息
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP
}
}
2. 跨域场景配置(前端调用后端接口)
nginx
server {
listen 80;
server_name localhost;
# 前端请求 /api 开头的接口,转发到后端
location /api {
proxy_pass http://192.168.1.100:8080/api; # 后端接口地址
proxy_set_header Host $host;
# 允许跨域的请求头(解决复杂跨域)
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type,Token";
}
}
3. 负载均衡配置(多后端服务分发)
nginx
# 定义负载均衡集群(后端服务器组)
upstream backend_servers {
server 192.168.1.100:8080 weight=5; # 权重 5,接收更多请求
server 192.168.1.101:8080 weight=3; # 权重 3
server 192.168.1.102:8080; # 默认权重 1
}
server {
listen 80;
server_name www.yourapp.com;
location / {
proxy_pass http://backend_servers; # 转发到集群
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链 IP
}
}
四、适用场景(开发者高频需求)
- 前端开发:解决本地跨域问题,无需后端修改 CORS 配置;
- 后端部署:隐藏真实服务地址,实现多服务器负载均衡、高可用;
- 全栈项目:统一入口(HTTP/HTTPS 配置、静态资源托管、接口转发一体化);
- 微服务架构:作为 API 网关,转发不同微服务的请求(如
/user转发到用户服务,/order转发到订单服务)。
五、关键注意事项
- 配置后需重启 Nginx 生效:
nginx -s reload(Windows/Mac/Linux 通用); proxy_pass结尾是否加/影响路径匹配(例:/api转发到http://xxx:8080和http://xxx:8080/结果不同,需注意路径拼接);- 高并发场景需优化 Nginx 性能参数(如 worker 进程数、连接数限制);
- 调试时可通过
access.log(访问日志)和error.log(错误日志)排查转发问题。