Nginx反向代理
一、反向代理 是什么
反向代理(Reverse Proxy):客户端只访问 Nginx,Nginx 再把请求转发给后端真实服务器(如 Tomcat、SpringBoot、Node.js),并把结果返回客户端。客户端感知不到后端存在。
简单理解:用户 → Nginx(门面)→ 后端服务(真实干活)。
二、核心作用(为什么用)
- 隐藏后端:对外只暴露 Nginx,后端 IP/端口/架构不泄露,更安全。
- 负载均衡:多台后端服务器分担流量,提升并发与可用性。
- 统一入口:域名只指向 Nginx,后端增减/变更对用户无感知。
- 动静分离:静态资源(图片/JS/CSS)由 Nginx 直接处理,动态请求转发后端,提升速度。
- SSL 终结:Nginx 统一处理 HTTPS,后端用 HTTP,简化证书管理。
三、最简配置(单后端)
nginx
server {
listen 80;
server_name www.yourdomain.com;
# 所有请求转发到后端
location / {
proxy_pass http://127.0.0.1:8080; # 后端地址
proxy_set_header Host $host; # 传递原始域名
proxy_set_header X-Real-IP $remote_addr; # 传递真实客户端IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- proxy_pass :核心指令,指定后端地址 。
- proxy_set_header :把客户端信息传给后端。
四、负载均衡配置(多后端)
用 upstream 定义后端集群:
nginx
# 定义后端集群
upstream backend {
server 192.168.1.10:8080 weight=1; # weight权重,默认1
server 192.168.1.11:8080 weight=1;
server 192.168.1.12:8080 weight=2; # 权重高,分到更多请求
}
server {
listen 80;
server_name www.yourdomain.com;
location / {
proxy_pass http://backend; # 指向集群名
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
负载均衡策略:
- 轮询(默认):逐个分发。
- weight:权重,值越大流量越多。
- ip_hash:同一客户端 IP 固定到同一后端(解决会话保持)。
- least_conn:优先转发给连接数最少的后端。
五、HTTPS 反向代理(常用)
nginx
# HTTP 强制跳 HTTPS
server {
listen 80;
server_name www.yourdomain.com;
return 301 https://𝑠𝑒𝑟𝑣𝑒𝑟𝑛𝑎𝑚𝑒 request_uri;
}
# HTTPS 反向代理
server {
listen 443 ssl;
server_name www.yourdomain.com;
ssl_certificate /etc/nginx/ssl/yourdomain.pem; # 证书
ssl_certificate_key /etc/nginx/ssl/yourdomain.key; # 私钥
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(http/https)
}
}
六、常见场景示例
1. 动静分离
nginx
server {
listen 80;
server_name www.yourdomain.com;
# 静态资源直接返回
location /static/ {
root /data/www;
expires 7d; # 缓存7天
}
# 动态请求转发后端
location / {
proxy_pass http://backend;
}
}
2. 路径匹配转发
nginx
# /api/ 转发到 8080
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
# /admin/ 转发到 8081
location /admin/ {
proxy_pass http://127.0.0.1:8081/;
}
- 注意 proxy_pass 末尾 / :
- http://127.0.0.1:8080 → 追加路径(/api/xxx → /api/xxx)。
- http://127.0.0.1:8080/ → 替换匹配路径(/api/xxx → /xxx)。
七、配置生效与排查
bash
# 测试配置是否正确
nginx -t
# 重载配置(不重启服务)
nginx -s reload
八、总结
- 反向代理核心:proxy_pass + upstream。
- 价值:安全、负载均衡、统一入口、动静分离、SSL 终结。
- 关键配置: listen 、 server_name 、 location 、 proxy_pass 、 proxy_set_header 。
