如果你是一个经常与服务器打交道的站长或运维爱好者,对宝塔面板(BT Panel)一定不会陌生。默认情况下,我们通常通过 http://公网IP:8888/安全入口 的形式来访问面板。
但这种方式存在几个明显的痛点:
- 不够优雅:拖着端口号和一长串 IP 地址,既难记又不好看。
- 缺乏 HTTPS 保护:明文传输,在公共网络环境下存在密码被嗅探的风险。
- 暴露端口:默认端口容易遭到全网扫描器的恶意爆破。
- 内网限制:如果你的宝塔部署在家里的 NAS、树莓派或本地虚拟机上,没有公网 IP,出门在外就无法直接管理。
为了解决这些问题,我们可以通过反向代理(Reverse Proxy)配合自定义域名来接管宝塔面板的流量。今天这篇博客,我将针对“公网服务器”和“无公网 IP 的内网设备”两种场景,提供保姆级的实战配置指南。
场景一:拥有公网 IP,如何用 Nginx 隐藏端口并开启 HTTPS?
如果你的服务器本身是一台阿里云、腾讯云等拥有公网 IP 的 VPS,你只是单纯想把 IP:8888 换成漂亮的 https://panel.yourdomain.com,那么直接利用宝塔自带的 Nginx 就可以完成“套娃式”反代。
第一步:准备一个干净的站点
- 在域名解析服务商处,将你的子域名(例如
panel.yourdomain.com)解析到服务器的公网 IP。 - 登录宝塔面板,进入“网站”页面,点击添加站点。
- 域名填写
panel.yourdomain.com,PHP 版本选择 纯静态 即可,其他保持默认。
第二步:配置 SSL 证书(强烈建议)
为了保证账号密码的安全,强烈建议开启 HTTPS。在刚创建的站点设置中,找到 SSL 选项卡,申请一个免费的 Let's Encrypt 证书,并务必勾选右上角的 “强制 HTTPS”。
第三步:配置反向代理(核心步骤)
接下来,我们要让这个域名“指向”宝塔自身的 8888 端口。
- 在站点设置中,找到 反向代理 选项卡,点击 添加反向代理。
- 代理名称:随意填写(例如
bt_proxy)。 - 目标 URL:填写
http://127.0.0.1:8888(如果你修改过宝塔默认端口,请将 8888 替换为你当前的面板端口)。 - 发送域名:填写
$host。
第四步:修复 WebSocket 终端连接问题(必做!)
这是很多人踩坑的地方。宝塔的“网页终端(SSH)”和“文件大文件上传”依赖于 WebSocket 协议。如果只使用宝塔默认生成的反代规则,你的终端将无法连接,一直卡在连接中。
点击反代规则右侧的 配置文件,将其中的代码替换为以下内容:
#PROXY-START/
location /
{
proxy_pass http://127.0.0.1:8888; # 请确保这里是你的真实面板端口
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 REMOTE-HOST $remote_addr;
# 核心修复:开启 WebSocket 支持,允许连接升级
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
add_header X-Cache $upstream_cache_status;
# 建议删去默认生成的 proxy_cache 静态文件缓存规则,防止面板加载旧缓存
}
#PROXY-END/第五步:绑定面板域名
为了防止别人直接通过 IP:8888 绕过你的反代,进入宝塔的 面板设置,在 域名 这一项填入你刚才配置的 panel.yourdomain.com。保存后,面板就只允许通过这个域名访问了,端口也可以在防火墙里安全地屏蔽掉。
场景二:内网环境无公网 IP,如何通过 FRP 穿透访问?
如果你的宝塔装在本地的虚拟机、群晖 Docker 或家里的旧电脑上,你需要一台带有公网 IP 的 VPS 作为中转站。这里我们使用最经典的 FRP 方案。
第一步:配置公网 VPS (FRP 服务端)
在你的公网 VPS 上下载并配置 frps(Server 端)。编辑 frps.ini:
[common]
bind_port = 7000 # FRP 客户端与服务端通信的端口
vhost_http_port = 8080 # 可选:如果你不用 Nginx 反代,可以直接用这个端口访问 Web启动服务端:./frps -c ./frps.ini
第二步:配置内网机器 (FRP 客户端)
在运行宝塔的内网机器上下载 frpc(Client 端)。编辑 frpc.ini:
[common]
server_addr = <你的公网VPS_IP>
server_port = 7000
[bt_panel]
type = tcp
local_ip = 127.0.0.1
local_port = 8888 # 内网机器上宝塔的真实端口
remote_port = 6000 # 映射到公网 VPS 的 6000 端口启动客户端:./frpc -c ./frpc.ini
此时的访问状态:你已经可以通过 http://公网VPS_IP:6000 访问内网的宝塔了。
第三步:进阶美化(套上 Nginx 与域名)
为了避免使用奇怪的 6000 端口,你可以在公网 VPS 上安装 Nginx,按照【场景一】的逻辑,将一个优雅的域名反向代理到本地的 6000 端口:
server {
listen 80;
server_name panel.yourdomain.com;
# 同样建议配置 HTTPS 相关代码...
location / {
proxy_pass http://127.0.0.1:6000; # 将请求转发给 FRP 映射出来的 6000 端口
# 记得带上 WebSocket 的配置!
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}⚠️ 避坑指南:反向代理宝塔的常见问题
在配置完毕后,你可能会遇到一些报错。别慌,对照以下几点排查:
- 别忘了“安全入口”
即使你用了域名,如果你没有在宝塔设置里关闭安全入口(例如/xyz123),反代后依然需要带上这个尾巴去访问(https://panel.yourdomain.com/xyz123),否则你会看到无情的404 Not Found。 - IP 白名单与授权限制
反代之后,宝塔看到的请求源 IP 变成了127.0.0.1(来自 Nginx)。如果你在面板里开启了严格的 IP 限制,可能导致自己被拦截。请确保 Nginx 头部传递了X-Forwarded-For。 - Cloudflare 用户的额外注意
如果你把域名接入了 Cloudflare CDN,请确保在 CF 后台的 Network 选项中开启了 WebSockets 支持,并且在 SSL/TLS 选项中设置加密模式为 Full 或 Full (Strict)。
结语:想偷懒?试试 Cloudflare Tunnel
如果你觉得 FRP 还要买台公网机器太费钱,或者觉得配 Nginx 头太大,而且这台面板仅仅是你个人使用,我强烈推荐你了解一下 Cloudflare Tunnel (Zero Trust)。
它无需公网 IP,无需配置复杂的 Nginx 反代,只需要在内网敲一行安装守护进程的命令,就能利用 Cloudflare 的全球骨干网,自带 HTTPS 直接将 localhost:8888 穿透到你的专属域名,安全且极其优雅。
无论你选择哪种方式,隐藏真实 IP 和端口、加上 HTTPS 锁,是对服务器最基础的尊重。祝大家折腾愉快!
版权属于:soarli
本文链接:https://blog.soarli.top/archives/946.html
转载时须注明出处及本声明。