【问题标题】:Cannot GET index.html Azure Linux Web App无法获取 index.html Azure Linux Web 应用
【发布时间】:2019-06-11 17:00:04
【问题描述】:

我们在 Microsoft Azure 中创建了一个 Linux Web 应用程序。该应用程序是使用 React(html 和 Javascript)静态编写的。 我们将代码复制到 wwwroot 文件夹中,但应用程序只显示了 hostingstart.html,当我们尝试获取页面 index.html 时,出现以下错误: Cannot GET /index.html

我们尝试在 GitHub (https://github.com/Azure-Samples/html-docs-hello-world) 中使用 Azure 示例,但错误是相同的。 网址是这样的:https://consoleadmin.azurewebsites.net/index.html

上周应用程序运行正常。

我们忘记做某事了吗?

【问题讨论】:

  • 您能否发布 Azure 所看到的文件结构?
  • @ScottCraig 你是什么意思?在 / 下的 web 应用程序中,我们有:.mono、LogFiles、站点。站点下:部署、锁、wwwroot(包含 index.html)
  • 尝试将hostingstart.html重命名为old_hostingstart.html。然后,重新启动网络应用程序。
  • @RickRainey 我试过但不起作用,总是显示hostingstart.html。 Azure 中的静态 Web 应用似乎发生了一些变化。

标签: reactjs azure azure-web-app-service


【解决方案1】:

2020 年 5 月 - 您无需在任何地方添加任何 javascript 文件或配置文件。让我解释一下。

我遇到了同样的问题,浪费了 6 个小时尝试所有内容,包括这个问题的最受欢迎答案。虽然接受的答案是一个很好的解决方法(但需要比添加 index.js 文件更多的工作),还有比这更简单的方法。

您会看到,当您仅部署 Azure Web 应用(或也称为应用服务)时,会发生两件事:

  1. 网络应用默认指向 opt/startup/hostingstart.html

  2. 它还在 home/site/wwwroot 中放置了一个 hostingstart.html

当您部署代码时,它会替换 home/site/wwwroot 中的 hostingstart.html,但应用仍指向 opt/startup/hostingstart.html。如果您想验证这一点,请尝试删除 opt/startup/hostingstart.html 文件,您的网络应用将抛出“CANNOT GET/”错误。

那么如何改变默认指针呢?它比看起来简单:

转到您的网络应用程序上的配置选项卡并将以下代码添加到启动脚本:

pm2 serve /home/site/wwwroot --no-daemon

如果此 Web 应用程序是客户端单页应用程序并且您遇到路由问题,则将 --spa 添加到上述命令中,如下所示:

pm2 serve /home/site/wwwroot --no-daemon --spa

这将告诉网络应用提供 wwwroot 文件夹。就是这样。

图片供参考: Screenshot explaination

PS:如果你只设置启动脚本而不部署代码,它仍然会显示hostingstart.html,因为默认情况下该文件位于wwwroot文件夹中。

【讨论】:

  • 这种方法很有帮助,但我无法让 pm2 为我生成的所有目录和文件提供 gatsby。 Gatsby 使用 React SSR 生成静态文件和文件夹。使用pm2 serve /home/site/wwwroot 时,SPA 运行良好,但是当导航(在应用程序内(不是和 SPA))到 /dir/dir 然后点击返回按钮或刷新时,我收到“抱歉,请与站点管理员检查错误: EISDIR .." 错误,所以除了 index.html..
  • 如果我直接以 /dir/dir/index.html 为目标,这可行,我又回到了应用程序的“生态系统”
  • 呃,我快要解决这个问题了!我正在运行 .NET Core / ASP.NET Core,所以 Node 的答案没有帮助。但至少我知道问题所在!
  • @DeityWarrior 你刚刚拯救了我的一天。谢谢
  • 我也通过使用空启动命令更改为 PHP 堆栈解决了这个问题。
【解决方案2】:

好的,你会喜欢这个的。这也发生在我身上。同样的事情。 我很确定 azure 团队在某个地方按下了开关,我们掉进了裂缝。

我发现这个没有投票的晦涩答案,它成功了(有点额外的麻烦)

奖金!这也解决了我只在部署站点(不是本地)上遇到的路由器问题:

信用:@stormwild:Default documents not serving on node web app hosted on Azure

来自@stormwild 的帖子,请参见此处: https://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/#NodeHome

步骤:

  1. 转到您的 Azure 门户,选择您的应用服务并启动 ssh
  2. 在 ssh 终端中,通过命令行导航到 /home/site/wwwroot
  3. 使用以下代码在此处创建 index.js:

    var express = require('express');
    
    var server = express();
    
    var options = {
    
    index: 'index.html'
    
    };
    
    server.use('/', express.static('/home/site/wwwroot', options));
    
    server.listen(process.env.PORT);
    
  4. 注意:请务必在此文件夹中运行 npm install --save express 否则您的应用服务将在启动时崩溃

  5. 如果应用服务没有自动重启,请务必重启

【讨论】:

  • 谢谢!我解决了,但我需要在 index.js 中添加 port,server.listen(process.env.PORT);。我也在开头做了“npm init”,在“npm install --save express”之后做了“npm start”
【解决方案3】:

另一种解决方案是在 index.html 文件旁边添加一个名为 ecoysystem.config.js 的文件。

module.exports = {
  apps: [
    {
      script: "npx serve -s"
    }
  ]
};

这将告诉 pm2 在您的应用服务启动时将所有请求关联到 index.html。

这里有非常有用的信息:https://burkeholland.github.io/posts/static-site-azure/

【讨论】:

    【解决方案4】:

    一种解决方法,我将 webapp 堆栈更改为 PHP 7

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      相关资源
      最近更新 更多