如何在Azure应用网关更新站点时展示app_offline.htm离线提示
解决Application Gateway环境下IIS站点更新时的502错误与离线提示问题
核心问题分析
传统IIS的app_offline.htm是直接作用于站点根目录,触发IIS停止站点进程并返回该页面。但在Application Gateway(AG)架构下,AG作为前端入口无法识别IIS的app_offline.htm逻辑;同时更新文件共享中的源码时,IIS进程可能因文件锁定、重启不及时,导致AG检测到后端节点不健康,最终返回502错误。
可行解决方案
1. 正确适配IIS原生app_offline.htm机制
- 不要将
app_offline.htm放置在AG层面,而是上传到每个IIS站点对应的文件共享根目录,注意:- 文件名必须严格为
app_offline.htm(大小写敏感,仅支持.htm后缀) - 文件大小需≥1KB(避免IIS忽略过小的文件)
- 放置后IIS会立即停止对应站点的应用程序池,将该页面返回给AG,用户访问时不会出现502
- 文件名必须严格为
- 更新完成后,删除或重命名
app_offline.htm,IIS会自动重启应用程序池恢复服务
2. 利用AG健康探测实现批量站点隔离
针对多站点场景,可通过AG健康探测临时隔离待更新站点:
- 为每个IIS站点配置自定义健康探测路径(如
/healthcheck.htm,静态页面默认返回200状态码) - 更新前,将对应站点的健康探测页面修改为返回503状态码,AG会自动将该站点从后端池中移除,用户访问时AG会返回预设的503离线提示(可在AG自定义错误配置中设置)
- 更新完成后,恢复健康探测页面的200状态,AG会自动将站点重新加入后端池
3. 规避web.config配置异常
更新时出现web.config相关问题,多因权限或文件同步不完整导致:
- 确保IIS应用程序池身份(如
IIS AppPool\对应站点池名)对文件共享目录拥有读取、写入、修改权限 - 更新时先备份原web.config,替换后用
appcmd.exe list config /section:system.webServer命令验证配置语法 - 使用文件同步工具时,需确认文件完全同步后再恢复站点,避免IIS读取不完整的配置文件引发异常
4. 优化IIS应用程序池配置
针对文件共享场景调整池设置,减少更新时的异常触发:
- 禁用「文件更改时回收」:IIS管理器→应用程序池→高级设置→回收,取消勾选该选项(默认开启会导致更新文件时自动回收池,引发AG健康探测失败)
- 提高「快速失败保护」阈值:避免短时间内的池异常导致AG标记站点为不健康
内容的提问来源于stack exchange,提问作者Raghava Akula
相关产品推荐
相关产品推荐

