把内网服务(比如 3000 端口的 Node 应用)通过 80 端口对外提供,反向代理是最稳的做法。
一、最简配置
宝塔 → 网站 → 添加站点 → 设置 → 反向代理:
| 项 | 值 |
|---|---|
| 代理名称 | 随便填 |
| 目标 URL | http://127.0.0.1:3000 |
| 发送域名 | $host |
保存即可。
二、手动写配置(更灵活)
在站点的 Nginx 配置文件里加:
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;
}
三、支持 WebSocket
上面那段不支持 WebSocket,会报 400。补上这两行:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
四、真实 IP 问题
代理之后,后端拿到的 remote_addr 全是 127.0.0.1。必须靠上面那几个 X-Forwarded-* 头传递。
后端读取方式:
| 语言 | 取法 |
|---|---|
| Node/Express | req.headers['x-forwarded-for'] |
| PHP | $_SERVER['HTTP_X_FORWARDED_FOR'] |
| Nginx 日志 | 改 log_format |
五、常见 502 排查顺序
- 后端服务起没起?
curl 127.0.0.1:3000 - 防火墙放行了吗?
- SELinux 拦了吗?(CentOS)
- 看 Nginx 错误日志:
/www/wwwlogs/站点名.error.log
常见问题
Q:静态资源 404?
A:代理会把所有请求转发过去,包括静态文件。要么在后端处理,要么加 location 单独匹配。
Q:改完配置不生效?
A:宝塔改完要重载 Nginx:nginx -t && nginx -s reload。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END










暂无评论内容