宝塔面板Nginx反向代理配置完整教程
宝塔面板Nginx反向代理配置完整教程
反向代理是服务器常用功能,简单说就是把用户对A域名的请求,透明转发给后端其他服务(比如Java、Python或另一台服务器)。
宝塔面板让这个配置变得非常直观,本文带你走完从零到验证的完整流程。
什么时候需要反向代理
- 同一台服务器运行多个端口不同的服务(如8080、3000),想用80/443端口统一接入。
- 使用Nginx处理SSL证书,后端服务免去HTTPS配置。
- 负载均衡或隐藏真实服务器地址。
- 推荐场景:将
api.example.com代理到localhost:8080的Node.js应用。
动手前的准备清单
- 一台已安装宝塔面板的Linux服务器(CentOS/Ubuntu均可)。
- 一个解析到该服务器IP的域名(本文用
demo.example.com举例)。 - 宝塔面板已安装Nginx(在软件商店里一键安装)。
- 如果目标服务在本机,确保该服务已启动并监听对应端口(比如
netstat -tlnp | grep 8080)。
一步步配置反向代理
- 登录宝塔面板 → 左侧菜单点击“网站”。
- 添加站点:点击“添加站点”,填写域名
demo.example.com,根目录随意(因为主要用代理),PHP版本选“纯静态”,创建。 - 进入站点设置:在站点列表点击对应域名的“设置”。
- 找到反向代理功能:左侧选择“反向代理” → 点击“添加反向代理”。
- 代理名称:可随意,如
api-proxy。 - 目标URL:填写后端服务地址,例如
http://127.0.0.1:8080。注意末尾不要带斜杠。 - 如果后端需要保留原始域名,开启“发送域名”的选项。
- 点击“提交”。
- 可选高级设置:在添加后,可以编辑代理规则,增加额外配置(如超时时间、请求头)。宝塔默认生成的配置已足够大部分场景。
配置完成后,访问http://demo.example.com,请求就会被转发到本机8080端口。
若要验证Nginx配置是否正确,可以执行命令查看:
nginx -t
返回syntax is ok即可。
踩坑提醒:这些地方容易出错
- 目标URL末尾斜杠:
http://127.0.0.1:8080和http://127.0.0.1:8080/行为不同,前者不会自动拼接路径,推荐不加末尾斜杠。 - 端口防火墙:确保服务器防火墙(如宝塔安全组或云服务商安全组)放行了后端服务端口(如8080)。
- 域名解析未生效:新建的域名需要等待DNS解析生效或先在本地hosts测试。
- 后端服务未启动:使用
curl -v http://127.0.0.1:8080测试后端是否正常。 - SSL冲突:如果目标URL是HTTPS,需确保Nginx代理时也配置SSL(在站点设置中添加SSL证书)。
配置完成后的验证方法
- 浏览器访问
http://demo.example.com,看是否显示后端服务内容。 - 使用命令行:
curl -I http://demo.example.com
观察响应状态码是否为200或3xx。
- 查看Nginx访问日志:
tail -f /www/wwwlogs/demo.example.com.log
看到请求进入且upstream字段显示后端地址。
- 如果出现502 Bad Gateway,大概率后端端口不通或服务没启动。
常见问题与解答
Q:配置后访问一直502?
A:先检查后端服务是否运行;再检查防火墙是否放行了后端端口;最后看目标URL是否写错(比如localhost拼写)。
Q:代理后如何让后端获取用户真实IP?
A:在宝塔反向代理设置中开启“发送真实IP”功能,或在Nginx配置手动添加:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
宝塔默认已包含部分头,但如果有自定义应用可能需要补全。
Q:反向代理支持WebSocket吗?
A:支持。需要在站点设置 → 反向代理 → 添加WebSocket支持(宝塔有开关)。或者手动添加以下配置:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
如果你正在处理宝塔面板Nginx反向代理配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
按照清单检查,大多数问题都能快速解决。