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

如何合规配置Azure App Service连接Azure MySQL灵活服务器

解决Azure App Service连接MySQL Flexible Server的DNS解析问题

针对你遇到的SequelizeHostNotFoundError: getaddrinfo ENOTFOUND错误,以下是生产环境合规的解决方案,避免直接使用IP地址:

1. 验证FQDN正确性与DNS解析能力

  • 确认环境变量HOST中的FQDN完全匹配Azure门户里MySQL Flexible Server的服务器名称,格式应为<server-name>.mysql.database.azure.com,检查是否存在拼写错误、多余空格或大小写错误(DNS不区分大小写,但建议与门户显示一致)。
  • 登录App Service的Kudu控制台(路径:https://<app-service-name>.scm.azurewebsites.net/),执行命令nslookup <your-mysql-fqdn>,查看是否能正常解析出IP地址:
    • 如果解析失败,说明App Service所在环境无法解析该FQDN,需检查Azure内部DNS或网络配置;
    • 如果解析成功,说明问题出在应用层或连接配置。

2. 配置MySQL Flexible Server的网络访问规则

  • 添加App Service出站IP到防火墙:在Azure门户的MySQL Flexible Server→网络→防火墙规则中,添加App Service的所有出站IP地址(可在App Service→属性中查看),这是生产环境最安全的方式,避免宽泛的“允许Azure服务访问”。
  • VNet集成(推荐生产环境):将App Service与MySQL Flexible Server部署到同一VNet,或通过VNet peering连接。配置VNet集成后,App Service可通过内部DNS直接解析MySQL的FQDN,同时避免公共网络暴露,提升安全性。
  • 确认**“允许Azure服务访问”**选项(如果启用):若暂时无法配置VNet或具体IP,可开启此选项,但生产环境建议仅作为临时方案,后续替换为更严格的规则。

3. 优化Node.js与Sequelize连接配置

  • 强制IPv4优先解析:部分环境对IPv6支持不佳,可在Sequelize初始化前添加以下代码,强制DNS优先返回IPv4地址:
    const dns = require('dns');
    dns.setDefaultResultOrder('ipv4first');
    
  • 配置连接重试机制:在Sequelize配置中添加重试参数,应对临时DNS解析波动:
    const sequelize = new Sequelize(
      process.env.DATABASE,
      process.env.USER, 
      process.env.MySQLPASSWORD,
      {
        host: process.env.HOST,
        dialect: process.env.dialect,
        pool: {
          max: 5,
          min: 0,
          acquire: 30000,
          idle: 10000
        },
        retry: {
          match: [/getaddrinfo ENOTFOUND/], // 匹配DNS错误
          max: 3 // 重试3次
        }
      }
    );
    

4. 检查App Service网络环境

  • 若App Service配置了自定义DNS,确保该DNS服务器能正确解析Azure MySQL的FQDN,否则切换回Azure默认DNS。
  • 确认App Service未配置出站代理,或代理服务器已正确配置DNS解析能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:20:09