Azure App Service中CSP仅部分实例生效的排查求助
问题场景
我已在应用的web.config中添加了Content Security Policy(CSP),应用部署至多个Azure App Service实例,且所有实例的web.config完全一致。但仅Dev环境及部分QA环境的实例能在浏览器头部显示CSP:
- Dev环境:CMS(devcm.azurewebsites.net)、CDS(devcd.azurewebsites.net及自定义域名)均正常显示
- QA环境:CMS(qacm.azurewebsites.net)不显示;CDS的qacd.azurewebsites.net域名正常显示,但其自定义域名却不显示
最困惑的是QA CDS仅使用一份web.config,却出现域名间的差异。已排查日志、验证配置及基础Azure设置,仍未找到原因,询问Azure中App Service、App Service Plan、专用终结点等设置是否会影响头部信息显示。
可能影响CSP头部显示的Azure设置
1. App Service 常规设置中的HTTP版本
如果自定义域名启用了HTTP/2,部分场景下IISweb.config配置的头部可能被Azure前端代理修改或过滤。尝试将「配置 > 常规设置 > HTTP版本」切换为1.1测试,确认CSP是否正常显示。
2. 自定义域名的HTTPS配置
- 若QA CDS的自定义域名开启了强制HTTPS(在「自定义域名」设置中),但
web.config的CSP配置仅针对HTTP请求,会导致HTTPS请求下头部不生效。检查web.config中CSP是否对所有协议生效,或调整配置适配HTTPS场景。 - 自定义域名的SSL证书类型(Azure管理证书 vs 自带证书)也可能影响头部传递,部分证书配置场景下Azure前端会拦截或修改响应头部。
3. 专用终结点与虚拟网络配置
如果QA环境实例配置了专用终结点,流量经过Azure Private Link或虚拟网络的防火墙/网关时,这些网络组件可能过滤或修改响应头部。检查虚拟网络的NSG规则、应用网关(若使用)的配置,确认是否存在拦截CSP头部的规则。
4. App Service Plan层级限制
- 若QA环境使用隔离层(Isolated) App Service Plan并部署在ASE(App Service Environment)中,ASE的入站规则或前端配置可能覆盖应用级别的头部设置,需要检查ASE的网络配置与头部传递规则。
- 免费/共享层计划可能存在头部数量或大小限制,可结合Kudu日志排查是否有相关报错。
5. 应用设置中的头部覆盖
检查QA环境实例的「配置 > 应用设置」,是否存在HTTP_HEADER_*类配置(如HTTP_HEADER_Content-Security-Policy),这类设置会直接覆盖web.config中的头部配置。
6. CDN或动态站点加速(DSA)缓存
如果自定义域名配置了Azure CDN或App Service的DSA功能,缓存规则可能忽略或修改响应头部。检查CDN缓存策略,确保CSP头部被包含在缓存响应中,或临时禁用缓存测试是否恢复正常。
7. 站点扩展或IIS模块干扰
部分Azure站点扩展(如Application Insights扩展、自定义IIS模块)可能修改响应头部。检查QA环境是否安装了与Dev环境不同的扩展,尝试临时禁用扩展测试CSP显示情况。
排查建议
- 使用
curl -v https://<你的域名>命令直接请求,查看原始响应头部,排除浏览器缓存干扰。 - 通过Kudu站点(
https://<appname>.scm.azurewebsites.net)查看部署后web.config的实际内容,确认与本地配置一致。 - 开启App Service的诊断日志(「监测 > 诊断设置」),查看请求处理流程的详细记录,追踪头部是否被修改。
内容的提问来源于stack exchange,提问作者Kode

