Nginx反向代理配置,把请求转发到后端服务
时间:2026-10-5 07:55 作者:emer 分类: 无
前言
现在做后端开发,后端服务一般跑在 3000、8080 这种端口上,总不能让用户直接访问 IP:端口 吧?这时候就需要 Nginx 反向代理,把 80 端口的请求转发到后端服务。本文就讲一下 Nginx 反向代理的配置方法。
什么是反向代理
简单说,反向代理就是:
- 用户访问 Nginx(80 端口)
- Nginx 把请求转发给后端服务(比如 3000 端口)
- 后端服务返回结果给 Nginx
- Nginx 再返回给用户
用户不知道后端服务的存在,只跟 Nginx 打交道。
基本配置
最简单的反向代理
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
就这么简单,所有访问 www.example.com 的请求都会被转发到 http://127.0.0.1:3000。
检查并重载
nginx -t
systemctl reload nginx
常用配置项
proxy_pass 后端地址
proxy_pass http://127.0.0.1:3000;
后端服务的地址,可以是 IP 加端口,也可以是域名。
传递真实客户端 IP
默认情况下,后端服务看到的是 Nginx 的 IP,不是真实用户的 IP。需要加上几个请求头:
location / {
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;
}
这样后端服务就能拿到真实用户的 IP 了。
代理 WebSocket
如果后端服务用了 WebSocket,需要额外配置:
location /ws {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
超时设置
location / {
proxy_pass http://127.0.0.1:3000;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
如果后端服务响应慢,可以把超时时间调大一点。
按路径分流
不同路径转发到不同后端服务:
server {
listen 80;
server_name www.example.com;
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
location /admin/ {
proxy_pass http://127.0.0.1:8080;
}
location / {
root /var/www/html;
index index.html;
}
}
这样:
/api/开头的请求 → 3000 端口/admin/开头的请求 → 8080 端口- 其他请求 → 静态文件
常见坑
坑1:502 Bad Gateway
访问报 502,说明 Nginx 连不上后端服务。
排查:
- 看后端服务有没有启动:
curl http://127.0.0.1:3000 - 看后端服务监听的地址对不对,是不是只监听了 127.0.0.1
- 看防火墙有没有挡住
坑2:后端拿不到真实 IP
日志里全是 Nginx 的 IP,不是用户真实 IP。
解决: 加上那几个请求头:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
坑3:静态资源 404
前端是 Vue/React 这种单页应用,刷新页面就 404。
原因: Nginx 找不到对应的静态文件。
解决: 加个 try_files:
location / {
root /var/www/html;
index index.html;
try_files $uri $uri/ /index.html;
}
所有找不到的路径都返回 index.html,交给前端路由处理。
坑4:HTTPS 代理后端 HTTP
前端是 HTTPS,后端是 HTTP,浏览器报混合内容错误。
解决: 确保 Nginx 和后端之间是 HTTP 没问题,但要让后端知道原始请求是 HTTPS:
proxy_set_header X-Forwarded-Proto $scheme;
总结
Nginx 反向代理的核心就是 proxy_pass,把请求转发到后端服务。常用配置:
| 配置项 | 作用 |
|---|---|
proxy_pass |
后端服务地址 |
proxy_set_header Host |
传递域名 |
proxy_set_header X-Real-IP |
传递真实 IP |
proxy_set_header X-Forwarded-For |
传递完整 IP 链 |
proxy_read_timeout |
读取超时时间 |
反向代理是 Nginx 最常用的功能之一,做 Web 开发必备。
遇到问题加QQ23979811 协助处理
标签: Web开发 Nginx 反向代理 proxy_pass 后端服务