不能直接用XAMPP默认Apache多端口配置跑Laravel Nova,因其强依赖Laravel路由、中间件(如VerifyCsrfToken、auth:api)、会话与API token验证机制;端口隔离无法解决CSRF校验失败、session cookie端口不匹配、URL生成错误及asset加载异常等问题,必须使用子域名方案(如nova1.test)配合独立.env和APP_URL配置方可正常运行。

不能直接用 XAMPP 默认 Apache 的多端口配置跑 Laravel Nova —— Nova 是 Laravel 应用,必须走 Laravel 的路由和中间件栈,而 Nova 的授权、仪表盘、资源列表等全依赖 app_key、NovaServiceProvider 和 auth:api 中间件,端口层面的隔离解决不了 Nova 的会话、CSRF、API token 验证问题。
为什么不能只改 Apache Listen 端口?
很多人尝试在 httpd.conf 里加 Listen 8001,再配一个 VirtualHost *:8001 指向 Nova 项目 public/,结果访问 http://localhost:8001 页面能加载,但点进 Nova 仪表盘就卡在 401 或白屏。原因很直接:
- Nova 的前端 JS 通过
/nova-api/请求数据,默认构造的 URL 是基于当前 host + port,但后端 Laravel 路由没感知到这个端口变更,url()、route()生成的链接仍走http://localhost(80 端口),导致跨端口请求被浏览器拦截或返回 404 -
Nova::routes()注册的 API 路由依赖VerifyCsrfToken和AuthenticateSession,这些中间件读取的是当前请求的完整Request对象,包括端口;若 Apache 没把X-Forwarded-Port透传给 PHP,Laravel 就认为你在访问 80 端口,而 session cookie 却是为 8001 发的,校验失败 - 更关键的是:Nova 的
config/nova.php里'domain' => null表示复用当前请求域名,但没做端口适配逻辑;强行改这里会导致 asset 加载错乱或登录态丢失
正确做法:用不同子域名 + 统一 80 端口
这不是绕路,而是 Laravel/Nova 官方实际支持的部署方式。XAMPP 完全可以支撑多个子域名指向不同 Nova 实例(比如 nova1.test、nova2.test),且互不干扰:
- 编辑
C:\Windows\System32\drivers\etc\hosts,追加两行:127.0.0.1 nova1.test127.0.0.1 nova2.test - 编辑
C:\xampp\apache\conf\extra\httpd-vhosts.conf,添加两个VirtualHost:<virtualhost><br> DocumentRoot "C:/xampp/htdocs/nova1/public"<br> ServerName nova1.test<br><directory><br> Options Indexes FollowSymLinks<br> AllowOverride All<br> Require all granted<br></directory><br></virtualhost><br><br><virtualhost><br> DocumentRoot "C:/xampp/htdocs/nova2/public"<br> ServerName nova2.test<br><directory><br> Options Indexes FollowSymLinks<br> AllowOverride All<br> Require all granted<br></directory><br></virtualhost>
- 每个 Nova 项目根目录下确保有独立的
.env,且APP_URL=http://nova1.test(对应改)——这是 Nova 构造所有前端链接的基准 - 别忘了每个项目都运行:
php artisan key:generate和php artisan nova:install
常见报错与修复点
部署后访问 nova1.test/nova 报 403、404 或空白页,优先查这三项:
-
AllowOverride All必须出现在每个<directory></directory>块里,否则.htaccess不生效,Laravel 路由无法重写,Nova 的/nova路径直接 404 - 检查
storage/和bootstrap/cache/是否有写权限(Windows 下右键文件夹 → 属性 → 安全 → 编辑 → 添加IIS_IUSRS或Everyone并勾选“完全控制”) - Nova 的
resources/views/vendor/nova/layout.blade.php里会引用mix('app.js'),如果没运行npm install && npm run dev,JS 文件缺失会导致前端白屏,此时浏览器控制台会报Failed to load resource: the server responded with a status of 404 (Not Found)
真正麻烦的不是配置多端口,而是 Nova 对 Laravel 运行时环境的强耦合 —— 它不像普通静态站点那样能靠 Apache 端口隔离。子域名才是干净、可维护、符合 Nova 设计意图的方案。一旦你用上 nova1.test 和 nova2.test,连数据库连接、缓存前缀、队列连接都可以彻底分开,这才是多实例该有的样子。











