Azure 上的 React + Express:无效的主机标头

2024-03-18

错误

当部署到具有多容器支持的 Azure Web Apps 时,我收到“无效的主机标头”消息来自https://mysite.azurewebsites.com https://mysite.azurewebsites.com

本地设置

这运行良好。

我有两个 Docker 容器:client一个 React 应用程序和server托管我的 API 的 Express 应用程序。我正在使用代理来托管我的 APIserver.

In client的 package.json 我已经定义了:

"proxy": "http://localhost:3001"

我使用以下 docker compose 文件在本地构建。

version: '2.1'

services:
  server:
    build: ./server
    expose:
      - ${APP_SERVER_PORT}
    environment:
      API_HOST: ${API_HOST}
      APP_SERVER_PORT: ${APP_SERVER_PORT}
    ports: 
      - ${APP_SERVER_PORT}:${APP_SERVER_PORT}
    volumes: 
      - ./server/src:/app/project-server/src
    command: npm start

  client: 
    build: ./client
    environment: 
      - REACT_APP_PORT=${REACT_APP_PORT}
    expose:
      - ${REACT_APP_PORT}
    ports:
      - ${REACT_APP_PORT}:${REACT_APP_PORT}
    volumes:
      - ./client/src:/app/project-client/src
      - ./client/public:/app/project-client/public
    links:
      - server
    command: npm start

一切都运行良好。

On Azure

部署到 Azure 时,我有以下内容。client and server图像已存储在 Azure 容器注册表中。它们似乎从日志中加载得很好。

在我的“应用服务”>“容器设置”中,我从 Azure 容器注册表 (ACR) 加载图像,并使用以下配置(Docker compose)文件。

version: '2.1'

services:
  client: 
    image: <clientimage>.azurecr.io/clientimage:v1
    build: ./client
    expose:
      - 3000
    ports:
      - 3000:3000
    command: npm start

  server:
    image: <serverimage>.azurecr.io/<serverimage>:v1
    build: ./server
    expose:
      - 3001
    ports: 
      - 3001:3001
    command: npm start

我还在应用程序设置中定义了:

WEBSITES_PORT为 3000。

这会导致我的网站出现错误“无效的主机标头”

我尝试过的事情

• 从以下位置提供应用程序static文件夹中server。这是有效的,因为它为应用程序提供服务,但它搞乱了我的身份验证。我需要能够提供静态部分client的 App.js 并与我的 Express API 进行数据库调用和身份验证对话。

• 在我的 docker-compose 文件中,将前端绑定到:

ports:
 - 3000:80

• 其他一些端口组合,但没有成功。

另外,我认为这与proxy in client的 package.json 基于这个仓库 https://github.com/LucMurakami/myWebsite#invalid-host-header-errors-after-configuring-proxy

任何帮助将不胜感激!

Update

这是代理设置。

This https://stackoverflow.com/questions/52845805/deploying-create-react-app-to-heroku-with-express-backend-returns-invalid-host-h某种程度上解决了它。通过删除"proxy": "http://localhost:3001"我可以加载该网站,但问题中建议的答案对我不起作用。即我现在无法访问我的 API。


没用过azure之前我也不使用代理(由于其随机连接问题 https://stackoverflow.com/questions/52483349/econnrefused-error-for-create-react-app-and-node-server),但是如果你的应用程序基本上正在运行express,你可以利用cors https://github.com/expressjs/cors。 (顺便说一下,更常见的做法是在 Express 服务器上运行5000 than 3001.)

我首先设置了一个环境/config.js文件夹和文件如下:

module.exports = {
  development: {
    database: 'mongodb://localhost/boilerplate-dev-db',
    port: 5000,
    portal: 'http://localhost:3000',
  },
  production: {
    database: 'mongodb://localhost/boilerplate-prod-db',
    port: 5000,
    portal: 'http://example.com',
  },
  staging: {
    database: 'mongodb://localhost/boilerplate-staging-db',
    port: 5000,
    portal: 'http://localhost:3000',
  }
};

然后,根据环境,我可以实施cors我在其中定义快速中间件:

const cors = require('cors');
const config = require('./path/to/env/config.js');
const env = process.env.NODE_ENV;

app.use(
    cors({
      credentials: true,
      origin: config[env].portal,
    }),
  );

请注意门户网站和AJAX请求必须具有匹配的主机名。例如,如果我的应用程序托管在http://example.com,我的前端 API 请求必须向http://example.com/api/ (not http://localhost:3000/api/ -- 点击这里 https://github.com/mattcarlotta/Matts-Universe/blob/development/client/src/actions/axiosConfig.js看看我如何在我的网站上实现它),以及portalenv 必须与主机名匹配http://example.com。在运行多个环境时,这种设置是灵活且必要的。

或者如果您正在使用create-react-app,然后只需弹出您的应用程序并实施proxy https://webpack.js.org/configuration/dev-server/#devserver-proxy在 - 的里面webpack生产配置。

或者将您的应用程序迁移到我的全栈样板 https://github.com/mattcarlotta/Webpack-React-Boilerplate/tree/fullstack,它实现了cors上面的例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure 上的 React + Express:无效的主机标头 的相关文章

随机推荐

  • 核心和处理器之间的区别

    核心和处理器有什么区别 我已经在谷歌上寻找过它 但我只得到了多核和多处理器的定义 这不是我正在寻找的 核心通常是 CPU 的基本计算单元 它可以运行单个程序上下文 如果支持硬件线程 例如 Intel CPU 上的超线程 则可以运行多个程序上
  • Thread.sleep 和重绘

    我有一个显示文本的面板 我希望面板更改其文本 然后在发生其他情况之前让应用程序暂停 我正在使用 Thread sleep 1000 但由于某种原因 应用程序在调用 Thread sleep 之前没有完成面板的绘制 文本没有更改 我也尝试过这
  • GCC 中格式错误的 C/C++ 多维数组初始化

    我想我明白填充如何以正确的格式工作 即 char arr 3 2 1 4 5 相当于 char arr 3 2 1 0 4 5 0 0 而且 为了好玩 我决定向 GCC 抛出不良格式 看看它会返回什么 对于以下代码 char arr 3 3
  • 我可以将图像/位图转换为 writeablebitmap 吗?

    我有两个位图图像 我想将它们合并在一起 我发现我可以使用 writeablebitmap 做到这一点 但是如何首先将这些图像转换为 writeablebitmap UPDATE 我找不到直接将位图转换为可写位图的方法 因此我所做的是将位图写
  • 在“.describe()”中显示 pandas-dataframe 的所有列

    我被困在这里 但我这是一个由两部分组成的问题 查看 describe include all 的输出 并非所有列都显示 如何显示所有列 这是我在使用 Spyder 时经常遇到的一个常见问题 即如何在控制台中显示所有列 任何帮助表示赞赏 im
  • 元素内部的#shadow-root 是什么?

    我今天看到了一些奇怪的事情 查看与该帖子相关的图片 如下 我已经做了一个输入 type text 它是屏幕图片上的 1 它的 css 看起来像这样 table tbody input width 40px border none heigh
  • 蒙版和剪辑 GLSurfaceView

    我使用的 SDK 通过回调提供矩形 glsurfaceview 我希望能够以圆形布局渲染此视图 即 我想在圆形视图上显示视图 我尝试过使用屏蔽布局 例如使用可屏蔽布局https github com christophesmet andro
  • 检查Flutter应用是否有可用的互联网连接

    我有一个要执行的网络调用 但在此之前 我需要检查设备是否具有互联网连接 这就是我到目前为止所做的 var connectivityResult new Connectivity checkConnectivity User defined
  • Angular 6.1.0 - 恢复滚动位置未按预期工作

    RouterModule forRoot routes scrollPositionRestoration enabled 6 1 0 中的这项新功能无法按预期工作 看来 ViewportScroller 服务尝试在填充 DOM 元素之前恢
  • 使用 ggplot2 将带有文本的图像作为刻度标签

    如何使用以下命令将本地图像文件作为刻度标签和国旗下的国家 地区名称ggplot2 我想实现这样的目标 数据如下 countries c Norway Spain Germany Canada China values c 10 20 30
  • 如何在javascript中计算LaTeX公式?

    我有 LaTeX 格式的 JavaScript 字符串 例如 frac y 2 2 x frac 2 sqrt y 2 x y 2 我希望能够用定义的变量来评估它 有谁知道用于此目的的框架或库 我尝试在谷歌和堆栈中找到它 但没有成功 如果您
  • AttributeError:“模块”对象没有属性“newperson”

    我目前正在学习 python 编程 并且是初学者 目前我陷入了文件练习 所以这些是我需要做的设定事情 而不是做我想做的任何事情 不幸的是 这也意味着我可能无法做任何复杂的 对我来说 快捷方式 目前使用Python 3 2 2 我需要两个不同
  • Javascript ES6 中注册表符号 (Symbol.for) 的用途是什么?

    有这样一件事registryJS ES6 中的符号 发现在这篇 Mozilla 文章中 https hacks mozilla org 2015 06 es6 in depth symbols 它不同于Symbol Stack Overfl
  • Xcode 4 中的 openssl 库

    正如标题所示 我正在努力将 openssl 库包含在我的 xcode iOs 项目中 例如 include
  • 如何在 CMake 中将多个库目标分组为一个

    我正在尝试将多个目标分组为一个目标 以便下游用户只需要链接到该单个目标 下游用户不需要查找所有目标 并且上游库中的所有功能都可以通过链接到该目标来使用 请参阅下面我失败的尝试的 CMakeLists cmake minimum requir
  • Hovertemplate 在绘图中与 add_trace() 一起使用时显示数据两次

    我使用以下方法创建了分组条形图plotly 问题是在我的hovertemplate为了追踪我得到一个白色的盒子LA ZOO这似乎是不必要的 我想摆脱它 Animals lt c giraffes orangutans monkeys SF
  • MSDeploy 是否足够“友好”,或者可以将其封装在 MSI 文件中

    您认为 MSDeploy 包是让最终用户在其系统上安装 Web 应用程序的一个不错的选择吗 与使用 MSI 文件安装 Web 应用程序的体验相比如何 有人尝试过将 MSDeploy 包封装在 MSI 包中吗 会起作用吗 据我描述 MSDep
  • JavaFX 中加载器实例化抛出空指针

    我已经声明了两个 fxml 文件 并为每个文件声明了一个控制器 根布局控制器是一个控制器根布局 fxml and 概览控制器是一个控制器概述 fxml rootlayout 有带有文件打开项的菜单栏 overviewcontroller 有
  • Visual C++ 2012 cout 在运行时崩溃

    我今天决定尝试一下 Visual Studio 2012 Express 首先要做的就是写 Hello world 但是 我无法使其工作 我创建了一个 Windows 控制台应用程序项目 编写了标准代码 但导致了运行时错误 这是我的代码 i
  • Azure 上的 React + Express:无效的主机标头

    错误 当部署到具有多容器支持的 Azure Web Apps 时 我收到 无效的主机标头 消息来自https mysite azurewebsites com https mysite azurewebsites com 本地设置 这运行良