宝塔反向代理配置入口在网站列表页→选站点→设置→反向代理→添加反向代理;需填带协议的代理地址、正确路径替换、透传Host/X-Forwarded-Proto等头,避免502、404及HTTPS混合内容问题。

反向代理在宝塔里点哪里配
入口就在网站列表页,选中目标站点后点「设置」→「反向代理」→「添加反向代理」。不是在「SSL」或「配置文件」里改,更不靠手动编辑 nginx.conf —— 宝塔这功能是独立开关,开了就走它内置的 proxy_pass 逻辑。
常见错误现象:502 Bad Gateway 十有八九是因为代理地址填成了 http://localhost:3000,但实际后端服务没跑在本机(比如跑在另一台机器或 Docker 容器里),或者端口根本没监听。确认方式:在服务器上执行 curl -v http://目标地址:端口,能拿到响应再填进宝塔。
- 代理地址必须带协议(
http://或https://),不能只写127.0.0.1:8080 - 如果后端是 HTTPS 服务,代理地址得写
https://,且宝塔会自动加proxy_ssl_verify off,不校验证书(内网场景够用) - 路径替换(如把
/api/代理到http://192.168.1.100:8000/)要勾选「启用路径替换」并填对前缀,否则请求会多一层/api/api/
多个域名共用一个反向代理怎么设
不能在一个站点里配多个域名然后统一代理——宝塔的反向代理绑定的是「单个站点」,不是「单个域名」。正确做法是:建多个站点,每个绑一个域名,但所有站点都指向同一个反向代理地址。
使用场景:你有 app1.example.com、app2.example.com,后端都是 http://10.0.0.5:3000,那就建两个站点,分别绑定这两个域名,各自配一样的代理地址。别试图用泛域名 + 一个站点解决,那会丢失 Host 头,后端无法区分请求来源。
- 每个站点的「反向代理」设置里,「发送域名」建议选「自定义」并填对应域名(如
app1.example.com),这样后端收到的Host头才是真实的 - 如果后端靠
Host做路由(比如 Nginx 的server_name匹配),这步漏掉就会 404 - 不要给多个站点用同一个根目录,哪怕目录空着——宝塔要求每个站点有独立路径,否则创建失败
代理后静态资源 404 或 CSS 不加载
本质是后端返回的 HTML 里写了相对路径(比如 href="/static/css/app.css"),而反向代理没改写响应体,浏览器仍按当前域名去请求 https://app1.example.com/static/css/app.css,但这个路径在宝塔站点里并不存在。
解决方案不是让后端改代码,而是用宝塔的「URL 重写」补救:在站点设置 → 「配置文件」里,在 location / 块下方加一段:
location /static/ {
proxy_pass http://10.0.0.5:3000/static/;
proxy_set_header Host $host;
}
但更稳的方式是——让后端服务本身支持配置 BASE_URL 或反向代理前缀(如 Express 的 app.use('/api', ...)),宝塔只负责把 /api/ 开头的请求转发过去,其余路径由宝塔自己处理(比如托管前端构建产物)。
- 千万别在「反向代理」页面里把整个站点都代理出去(比如代理地址填
http://10.0.0.5:3000且不设路径替换),那样连宝塔自动生成的伪静态规则都会失效 - 如果后端是 Vue/React 单页应用,HTML 里引用的 JS/CSS 路径是绝对路径(
/js/app.js),就得确保这些资源也能被代理到,或直接把构建后的 dist 目录扔进宝塔站点根目录托管
HTTPS 域名代理 HTTP 后端时证书警告
浏览器地址栏显示「不安全」不是因为宝塔配置错了,而是你用 HTTPS 访问 https://app.example.com,但后端是 HTTP(http://10.0.0.5:3000),宝塔只是把加密流量解密后转成明文发给后端,整个链路前半段是 HTTPS,后半段是 HTTP —— 这本身合法,也不触发混合内容警告。
真正触发警告的,是后端返回的 HTML 里硬编码了 http:// 链接(比如图片、API 地址),浏览器拒绝加载非 HTTPS 资源。这不是宝塔能拦住的,得后端返回时把协议动态设为 https,或用 Nginx 的 sub_filter 替换响应体(宝塔不直接暴露这个,得手动改配置文件)。
- 检查响应头是否有
Content-Security-Policy限制了http:资源,有就删掉或放宽 - 如果后端用了
req.protocol === 'https'判断,注意宝塔默认不传X-Forwarded-Proto,得在反向代理设置里勾选「启用代理 Websocket」并手动加 header(高级选项里填X-Forwarded-Proto: https) - 代理 WebSocket 时(比如
/ws),必须勾选「启用代理 Websocket」,否则连接立刻断开,且错误不报在浏览器控制台,而在宝塔的 Nginx 错误日志里
最麻烦的点其实是 Host 头和协议头的透传——看着点几下就配完,但少传一个 header,后端就可能判错环境、生成错误跳转链接,这种问题往往要翻好几层日志才能定位。

















