反向代理基础
约 555 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Nginx › 反向代理(在新窗口打开) › 反向代理基础
反向代理 vs 正向代理
| 对比 | 正向代理 | 反向代理 |
|---|---|---|
| 代理对象 | 客户端 | 服务端 |
| 客户端感知 | 知道目标服务器 | 不知道,以为 Nginx 就是服务器 |
| 典型用途 | 翻墙、缓存 | 负载均衡、安全、SSL 卸载 |
proxy_pass 基础用法
# 最简单的反向代理
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
# 代理到上游服务
location / {
proxy_pass http://backend;
}末尾斜杠的玄机
proxy_pass 的 URL 是否以斜杠结尾,行为不同:
# 情况 A:URL 不带斜杠 —— 保留匹配部分
location /api/ {
proxy_pass http://backend; # 请求 /api/users → 代理到 /api/users
}
# 情况 B:URL 带斜杠 —— 替换匹配部分
location /api/ {
proxy_pass http://backend/; # 请求 /api/users → 代理到 /users
}
# 情况 C:URI 路径匹配,替换更多
location /old/ {
proxy_pass http://backend/new/; # 请求 /old/page → 代理到 /new/page
}标准反向代理配置
location /api/ {
proxy_pass http://127.0.0.1:3000;
# 传递原始请求信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
# 缓冲设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}代理到上游服务组
upstream backend {
server 127.0.0.1:3000 weight=5;
server 127.0.0.1:3001;
server 127.0.0.1:3002 backup;
}
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}代理 HTTPS 场景
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
location / {
proxy_pass http://127.0.0.1:8080; # Nginx 终结 HTTPS,后端用 HTTP
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
}
}小结
proxy_pass指定后端地址;斜杠决定是否替换 URI 匹配部分。proxy_set_header传递客户端真实 IP、Host 等信息给后端。- 超时、缓冲参数防止慢后端拖垮 Nginx。
- Nginx 通常作为 HTTPS 终点,转内网 HTTP 到后端。
upstream将请求分发到多个后端(非单机反向代理时使用)。
