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

Node.js机器人应用部署至Azure后出现内部服务器错误求助

排查Azure Bot Service部署后出现的内部服务器错误

我先梳理下你的问题:你开发的示例机器人在本地Bot Emulator和使用localhost的Azure Bot Service测试时都能正常运行,但部署到Azure线上环境后,访问https://hotel-reserve.azurewebsites.net/api/messages时出现了内部服务器错误,提示:

The page cannot be displayed because an internal server error has occurred.

你的web.config配置如下:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
  <system.webServer> 
    <handlers> 
      <add name="iisnode" path="app.js" verb="*" modules="iisnode"/> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
      <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> 
      <add name="Access-Control-Allow-Credentials" value="true" /> 
    </handlers> 
    <rewrite> 
      <rules> 
        <rule name="DynamicContent"> 
          <match url="/*" /> 
          <action type="Rewrite" url="app.js"/> 
        </rule> 
      </rules> 
    </rewrite> 
  </system.webServer> 
</configuration>

下面给你几个针对性的排查和修复步骤:

1. 先修复web.config的配置错误

你当前的web.config有个明显的问题:CORS相关的自定义头配置被放在了<handlers>节点下,这完全不符合IIS的配置规范,会直接导致配置解析失败,触发内部服务器错误。

正确的做法是把CORS配置放到<system.webServer>下的<httpProtocol>节点里,修正后的配置如下:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
  <system.webServer> 
    <handlers> 
      <add name="iisnode" path="app.js" verb="*" modules="iisnode"/> 
    </handlers>
    <!-- 把CORS配置移到正确的节点下 -->
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" /> 
        <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
        <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" /> 
        <add name="Access-Control-Allow-Credentials" value="true" /> 
      </customHeaders>
    </httpProtocol> 
    <rewrite> 
      <rules> 
        <rule name="DynamicContent"> 
          <match url="/*" /> 
          <action type="Rewrite" url="app.js"/> 
        </rule> 
      </rules> 
    </rewrite> 
  </system.webServer> 
</configuration>

2. 查看Azure App Service的详细日志

内部服务器错误只是个笼统的提示,要找到根因必须看详细日志:

  • 登录Azure门户,找到你的hotel-reserve App Service
  • 左侧菜单进入监控 > 日志流,实时查看应用运行时的错误输出
  • 或者进入部署 > 高级工具,打开Kudu控制台,在LogFiles/iisnode目录下查看Node.js应用的启动和运行日志,这里会记录代码报错、依赖缺失等具体问题

3. 验证Bot的路由配置

你的Bot消息接收路径是/api/messages,但当前的rewrite规则是把所有请求都重写到app.js,要确保你的Node.js代码里正确注册了这个路由。比如用Bot Framework SDK的话,应该有类似这样的代码:

const adapter = new BotFrameworkAdapter({
  appId: process.env.MicrosoftAppId,
  appPassword: process.env.MicrosoftAppPassword
});

// 必须确保这个路由路径和你配置的一致
server.post('/api/messages', (req, res) => {
  adapter.processActivity(req, res, async (context) => {
    // 你的消息处理逻辑
  });
});

如果路由路径不匹配,也会导致请求失败。

4. 检查Azure上的环境变量配置

本地测试时你可能在本地配置了MicrosoftAppId和MicrosoftAppPassword,但部署到Azure后,要确保这些凭证已经正确添加到App Service的环境变量中:

  • 在Azure App Service的配置 > 应用程序设置里,添加对应的环境变量,值要和你注册Bot时获取的凭证完全一致

先把web.config的错误修正,再结合日志排查其他可能的问题,应该就能解决这个内部服务器错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:40