【问题标题】:Disable default domain https://[project-id].appspot.com of Node JS on Google App Engine在 Google App Engine 上禁用 Node JS 的默认域 https://[project-id].appspot.com
【发布时间】:2017-11-05 07:58:42
【问题描述】:

我已将我的 Node JS 应用程序部署到 Google Cloud App Engine 上,并且我可以成功地为我的应用程序添加我的自定义域。

假设我的自定义域是 example.com

现在我可以通过 example.com 和 www.example.com 浏览我的应用程序,它按预期工作。但是我发现我仍然可以通过默认域浏览我的应用程序。 https://[project-id].appspot.com

我想禁用默认域,可以这样做吗?

【问题讨论】:

  • 我知道你想禁用它,但为什么呢?实际上,获取一个 apppot 子域来与您的自定义域中的问题(例如 SSL 和 DNS 错误配置)进行比较会很有帮助。

标签: node.js google-app-engine google-cloud-platform


【解决方案1】:

您不能禁用该默认域。您将不得不编写一个重定向脚本。您可以在请求的HTTP_HOST 中测试“appspot”,在请求的HTTP_USER_AGENT 中测试“AppEngine-Google”,以确定它是否是内部请求。

此外,内部功能(如 cron 作业和任务队列)在该域上运行,因此请小心操作。给定 301,任务队列将失败。

【讨论】:

  • 你能提供更多关于如何创建重定向脚本的信息吗?
【解决方案2】:

在考虑了GAEfan的建议后,我对路由器逻辑做了一些改动。如果主机名以“appspot.com”结尾并且用户代理包含“AppEngine-Google”,它将重定向到我的自定义域。

router.get('/', function(req, res, next) {
    if(req.get("host").endsWith(GOOGLE_APP_SPOT) && 
        req.get("User-Agent").includes(GOOGLE_USER_AGENT))
    {
        var redirectURL =  url.format({
            protocol: req.protocol,
            host: CUSTOM_DOMAIN,
            pathname: req.originalUrl
        });
        res.redirect(redirectURL);
    }

    res.render('templateName', viewModel);
});

【讨论】:

    【解决方案3】:

    您可以只使用 App Engine 中的 dispatch.yaml 文件,在其中列出您的所有域,但不是 *.appspot.com 一个。当您尝试访问时,Google 会显示 404 路由。

    编辑:不可能了,检查 cmets。

    查看official reference

    【讨论】:

    • 很遗憾这是不正确的;创建一个仅包含自定义域而不包含 apppot 域的 dispatch.yaml 并不会禁用 apppot 域,无论如何它都会继续调度到默认服务。我还不能测试使用dispatch.yaml 路由到重定向或 404 服务是否会产生任何副作用。
    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2018-08-08
    • 1970-01-01
    • 2013-11-05
    • 2017-05-04
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多