You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express vhost配置子域名绑定实际域名后无法正常生效问题排查

问题:Express vhost部署到Heroku后子域名无法正确路由

我编写了如下Express代码:

const app = express();

const accountApp = express();
const publicApp = express();

publicApp.use(express.static(path.join(process.cwd(), "web/dist/public")));
accountApp.use(express.static(path.join(process.cwd(), "web/dist/account")));

app.use(vhost('account.*', accountApp));
app.use(publicApp);

本地环境运行正常:http://localhost:3000显示public应用,http://account.localhost:3000显示account应用。但部署到Heroku并完成Heroku域名配置、Google Domains DNS配置后,访问www.stravamenu.com能正常显示public应用,account.stravamenu.com却仍显示public应用,而非account应用。请问问题出在vhost配置、Heroku部署还是Google Domains设置中?


排查方向:

1. Google Domains DNS配置

  • 确认account.stravamenu.com的DNS记录类型为CNAME,指向你的Heroku应用域名(例如xxx.herokuapp.com),而非A记录(Heroku的IP会动态变化,A记录会失效)。
  • 用命令验证DNS是否生效:nslookup account.stravamenu.com,检查返回的域名是否与www.stravamenu.com一致,或正确指向Heroku应用的域名。

2. Heroku自定义域名配置

  • 确认Heroku应用设置中已添加account.stravamenu.com作为自定义域名,且完成了域名验证(若有要求)。
  • 确认Heroku未修改请求的Host头:Heroku默认会转发原始Host头,但需确保没有自定义配置覆盖这一行为。

3. Express vhost配置与调试

  • 你的account.*规则理论上能匹配account.stravamenu.com,但需确认请求的Host头是否正确传递到Express应用。可以添加调试中间件打印Host信息:
    app.use((req, res, next) => {
      console.log('当前请求Host:', req.headers.host);
      next();
    });
    
    部署后查看Heroku日志,确认访问account.stravamenu.com时打印的Host是否正确。
  • 确保vhost中间件在publicApp之前注册(你的代码已满足,但需排查是否有其他中间件干扰Host头)。

内容的提问来源于stack exchange,提问作者1baz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:25:16