Nginx 反向代理原理
时间:2026-10-9 07:12 作者:emer 分类: 无
Nginx 反向代理原理
反向代理是 Nginx 最常用的功能,搞懂原理很有必要。
1. 什么是反向代理
正向代理:代理客户端,比如翻墙工具。
反向代理:代理服务器,客户端不知道真实服务器。
用户请求 Nginx,Nginx 再转发给后端服务器,用户以为自己直接访问的就是 Nginx。
2. 为什么用反向代理
1)隐藏真实服务器
- 后端服务器 IP 不暴露
- 更安全
2)负载均衡
- 多个后端服务器分摊请求
- 提高并发能力
3)统一入口
- 多个服务用一个域名
- 不同路径转发到不同服务
4)SSL 卸载
- HTTPS 证书在 Nginx 配置
- 后端用 HTTP 就行
5)缓存静态内容
- Nginx 直接返回静态资源
- 减轻后端压力
3. 基本配置
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
4. 常用代理头
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;
后端通过这些头获取真实客户端信息。
5. 路径转发示例
# 根路径转发到PHP服务
location / {
proxy_pass http://127.0.0.1:8080;
}
# /api 转发到后端接口
location /api/ {
proxy_pass http://127.0.0.1:3000/;
}
# /static 直接读本地文件
location /static/ {
root /var/www;
}
6. 超时设置
# 连接超时
proxy_connect_timeout 60s;
# 读取超时
proxy_read_timeout 60s;
# 发送超时
proxy_send_timeout 60s;
7. 常见问题
1)后端获取不到真实IP
- 检查 X-Real-IP 头是否设置
- 后端代码是否读取这个头
2)WebSocket 连接失败
- 需要添加 Upgrade 头
- 配置 HTTP/1.1
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
3)大文件上传失败
- 修改 client_max_body_size
- 增加 proxy_read_timeout
总结
Nginx 反向代理要点:
- 代理服务器,隐藏真实后端
- 实现负载均衡、统一入口
- 配置 proxy_pass 转发
- 记得设置常用代理头
- 后端通过请求头获取真实客户端信息
- 注意超时和上传大小限制
- WebSocket 需要特殊配置
做 Web 开发,反向代理是必备技能。