PocketBase是独立Go二进制程序,需单独运行于8090/8091端口;XAMPP的Apache仅能通过启用mod_proxy模块并配置VirtualHost+ProxyPass实现反向代理,不可直接托管。

XAMPP 默认只监听 80 端口,而 PocketBase 默认运行在 8090(HTTP)和 8091(Admin API),两者不冲突——但如果你希望用 Apache 反向代理把 localhost:80 或 localhost:8080 转发到 PocketBase,就必须显式启用对应端口并配置 ProxyPass。直接让 XAMPP “托管” PocketBase 是不可能的,Apache 不执行 Go 二进制,它只能做反代。
确认 PocketBase 已独立运行且端口可用
先别动 XAMPP 配置。PocketBase 是个独立可执行文件,不是 PHP 应用:
- 下载对应平台的
pocketbase.exe(Windows)或pocketbase(macOS/Linux),放在比如D:/pb/pocketbase.exe - 终端进入该目录,执行:
pocketbase serve --http=0.0.0.0:8090 --dashboard=0.0.0.0:8091 - 浏览器打开
http://localhost:8090和http://localhost:8091,确认能访问 API 和 Admin UI - 检查端口是否被占用:
netstat -ano | findstr :8090(Windows)或lsof -i :8090(macOS/Linux)
在 httpd.conf 中启用监听端口和代理模块
Apache 必须知道要监听哪些端口,并加载 mod_proxy 相关模块,否则 ProxyPass 会报 Invalid command 'ProxyPass' 错误:
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 编辑
XAMPP\apache\conf\httpd.conf - 确保以下三行未被注释(删掉开头的
#):LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule rewrite_module modules/mod_rewrite.so
- 在
Listen 80下方添加你打算代理的端口,例如:Listen 8080 Listen 8090
(注意:不要加冒号,写成Listen: 8080会启动失败) - 保存后,用命令验证语法:
httpd -t(在 XAMPP 控制面板里点“Shell”或进XAMPP\apache\bin目录执行);返回Syntax OK才算通过
用 VirtualHost + ProxyPass 暴露 PocketBase
不能把 PocketBase 放进 htdocs,必须用反向代理方式接入 Apache 流量。推荐绑定到非默认端口(如 8080),避免与本地 8090 冲突或覆盖 XAMPP 自身服务:
- 编辑
XAMPP\apache\conf\extra\httpd-vhosts.conf - 在文件末尾添加:
<VirtualHost *:8080> ServerName localhost ProxyPreserveHost On ProxyRequests Off <Proxy *> Require all granted </Proxy> ProxyPass / http://127.0.0.1:8090/ ProxyPassReverse / http://127.0.0.1:8090/ </VirtualHost> - 如果还想把 Admin UI 单独映射(比如
localhost:8081/admin),可另起一个<VirtualHost *:8081>块,ProxyPass /admin http://127.0.0.1:8091/,但要注意 PocketBase Admin 的静态资源路径可能需额外重写 - 确保
httpd.conf中这行已启用:Include conf/extra/httpd-vhosts.conf
重启 Apache 后仍 503 或连接被拒绝?重点查这三处
反代失败最常见的不是配置写错,而是权限、网络策略或 PocketBase 进程状态问题:
-
ProxyError日志里出现Connection refused→ PocketBase 没在运行,或监听地址不是0.0.0.0(用了127.0.0.1就无法被 Apache 从 localhost 外部访问) - Windows 防火墙/杀软拦截了
8090端口 → 临时关闭防火墙测试,或放行该端口和pocketbase.exe - Apache 启动时提示
Address already in use: AH00072: make_sock: could not bind to address [::]:8080→ 先用netstat -ano | findstr :8080查 PID,再用任务管理器结束对应进程 - 浏览器访问
http://localhost:8080/api/health返回 503 但curl http://127.0.0.1:8090/api/health正常 → Apache 代理模块没加载全,回头再核对mod_proxy三行是否真的生效
真正容易被忽略的是:PocketBase 的 --http 参数必须设为 0.0.0.0:8090,而不是默认的 127.0.0.1:8090;后者导致 Apache 作为本地客户端也连不上它——因为 127.0.0.1 绑定只响应本机回环,而 Apache 的代理请求走的是系统网络栈,不是严格意义上的“同一回环接口”。

















