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

Azure MySQL弹性服务器无法接受Azure App Service出站IP问题求助

问题排查与解决方案

一、先解决防火墙规则添加失败的问题

  1. 确认出站IP列表完整性:进入App Service的「属性」页,复制所有出站IP地址(通常是4-8个),逐个添加到Azure MySQL的防火墙规则中,不要仅添加单个IP。
  2. 用Azure CLI强制添加规则:如果门户添加报错,使用CLI命令逐个添加(替换占位符):
az mysql server firewall-rule create --resource-group 你的资源组名 --server-name 你的MySQL服务器名 --name AllowAppService_IP1 --start-ip-address 第一个出站IP --end-ip-address 第一个出站IP

重复该命令添加所有出站IP。
3. 检查App Service计划类型:如果你的App Service使用Free/Shared消费计划,出站IP是动态变化的,即使添加当前IP也会后续失效。这种情况要么升级到Basic及以上计划(固定出站IP),要么换用VNet集成/托管身份方案。

二、修正数据库连接的SSL配置

你已关闭require_secure_transport,但代码里的ssl: process.env.CERT可能导致连接失败:

  • 若无需SSL(仅测试用),直接将ssl设为false:
const con=mysql.createConnection({
  host:process.env.AZURE_MYSQL_HOST,
  user:process.env.AZURE_MYSQL_USER,
  password:process.env.AZURE_MYSQL_PASSWORD,
  database:process.env.AZURE_MYSQL_DATABASE,
  port:process.env.AZURE_MYSQL_PORT,
  ssl: false // 关闭SSL连接
});
  • 若要保留SSL(推荐生产环境),需将Azure MySQL的CA证书内容放到环境变量中:
    1. 从Azure门户下载MySQL的CA证书(路径:MySQL服务器→连接安全性→SSL证书下载)
    2. 打开证书文件,复制全部内容
    3. 在App Service的「配置→应用程序设置」中添加MYSQL_CA_CERT变量,值为复制的证书内容
    4. 修改database.js的SSL配置:
const con=mysql.createConnection({
  // ...其他配置项
  ssl: {
    ca: process.env.MYSQL_CA_CERT
  }
});

三、排查具体连接错误信息

你的代码仅返回error2,无法定位问题,先修改错误处理逻辑输出具体错误:

app.get('/event_manager', (req,res) => {
  con.query(`SELECT DATE_FORMAT(event_date, '%a, %d %M %Y')
  AS event_date, event_name, event_location, event_time, description, links FROM details`, (err, result) => {
    if (err) {
      console.error('DB Error:', err); // 输出到App Service日志流
      res.send(`error2: ${err.message}`); // 测试环境返回具体错误信息
    } else {
      res.render('pages/event_manager', { result });
    }
  });
});

然后进入App Service的「日志→日志流」查看具体错误:

  • 若为ETIMEDOUT:防火墙规则未配置正确,或出站IP有误
  • 若为Access denied:用户名/密码/数据库名配置错误
  • 若为SSL connection error:SSL配置存在问题

四、验证环境变量正确性

使用Service Connector配置后,确认变量名与代码中的一致:

  1. 进入App Service的「配置→应用程序设置」,检查AZURE_MYSQL_HOST、AZURE_MYSQL_USER、AZURE_MYSQL_PASSWORD、AZURE_MYSQL_DATABASE、AZURE_MYSQL_PORT这些变量是否存在且值正确
  2. 可在App Service的「控制台」中运行以下命令验证:
echo $AZURE_MYSQL_HOST
echo $AZURE_MYSQL_USER

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:40:32