【问题标题】:"Invalid Host header" in a React app deployed to IBM Cloud部署到 IBM Cloud 的 React 应用程序中的“无效主机标头”
【发布时间】:2019-03-19 18:00:55
【问题描述】:

我根据Brad Traversy's YT tutorial 开发了一个非常简单的演示待办事项列表应用程序(Express + React),并成功地将这个应用程序部署到 Heroku,并在其中启动并运行。但是,当我将完全相同的代码部署到 IBM Cloud 时,我只得到了一个空白屏幕,上面有一句话 Invalid Host header

更多上下文:

  • 我在项目的根目录中使用了create-react-app
  • 服务器和 React 客户端之间有一个代理
  • 我正在部署一个为静态文件提供服务的生产版本:

    // Serve static assets if in production
    if (process.env.NODE_ENV === 'production') {
      app.use(express.static('client/build'))
    
      app.get('*', (req, res) => {
        res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
      })
    }
    
  • 我在 IBM Cloud 中的部署管道中的构建和部署阶段顺利通过

我已经用谷歌搜索并尝试使用官方create-react-app docs建议的方法来解决这个问题:

HOST=mypublicdevhost.com
DANGEROUSLY_DISABLE_HOST_CHECK=true

也有人在 Stack Overflow 上问过类似的问题:

然而,这些答案都没有帮助。

我得出的结论是,这是一个特定于 IBM Cloud 的问题。有谁知道这可能的原因? IBM Cloud 是否有任何限制阻止我的应用程序正确加载?

任何帮助将不胜感激。

编辑:

构建阶段的脚本:

export PATH=/opt/IBM/node-v6.7.0/bin:$PATH
npm install
npm run build

部署阶段的脚本:

cf push "${CF_APP}"

【问题讨论】:

  • 你是怎么推的?你的清单文件是什么? IBM Cloud 域还是自定义域?
  • 我使用 cf push 将我的应用程序放在 IBM Cloud 上。之后,我在 IBM Cloud 中配置了一个工具链,并将应用程序连接到它的 github 存储库。因此,只要有对 master 分支的提交,就会触发 Build 阶段。我将脚本添加到我的帖子中。至于清单文件,我实际上没有——我应该有吗?它是 IBM Cloud 域。

标签: reactjs express deployment ibm-cloud


【解决方案1】:

一个可行的解决方案是使用 http-proxy-middleware 手动设置代理。请在此处查看说明:deploying create-react-app to heroku with express backend returns invalid host header in browser

这是一个最小的工作示例:https://github.com/sehailey/proxytest 这是部署的示例:https://proxytest2.herokuapp.com/

【讨论】:

  • 我从package.json 中删除了proxy,而是按照您的建议尝试手动配置代理。这解决了生产版本的问题,但由于某种原因,根本没有为开发配置代理。知道当setupProxy.js 不工作时如何设置代理吗? (我使用与您完全相同的代码)
  • 对我来说,当我从 proxy 删除 proxy + 添加 setupProxy.js 文件时,代理不起作用。它仅在设置proxy 时有效。这是为什么?我不明白它如何为你工作,我真的很想让它工作......@sarah
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 2018-12-07
  • 2021-11-09
  • 1970-01-01
相关资源
最近更新 更多