在web.config添加customHeaders导致IIS子应用报500错误如何解决?
故障根因
IIS 默认会将父级站点的web.config配置向下继承到所有子应用,你在主站直接添加自定义响应头后,子应用继承该配置时如果已经在全局IIS配置、自身web.config中存在同名的响应头,就会触发配置重复冲突,直接抛出HTTP 500错误。
修复方案
你可以根据实际需求选择以下任意一种方案解决:
方案1:禁止主站响应头配置继承到子应用(推荐)
如果子应用不需要和主站共用这套响应头配置,直接给主站的httpProtocol节点添加inheritInChildApplications="false"属性即可,完全隔离父子站点的该段配置:
<httpProtocol inheritInChildApplications="false"> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> <add name="X-XSS-Protection" value="1" /> <add name="X-Content-Type-Options" value="nosniff" /> </customHeaders> </httpProtocol>
方案2:添加前先移除已有同名头
如果需要子应用也继承这套响应头配置,可以在添加前先移除对应同名头,避免重复添加冲突:
<httpProtocol> <customHeaders> <remove name="X-Frame-Options" /> <remove name="X-XSS-Protection" /> <remove name="X-Content-Type-Options" /> <add name="X-Frame-Options" value="SAMEORIGIN" /> <add name="X-XSS-Protection" value="1" /> <add name="X-Content-Type-Options" value="nosniff" /> </customHeaders> </httpProtocol>
验证步骤
修改配置后重启主站和所有子应用对应的应用程序池,再访问子应用即可恢复正常。如果仍存在500错误,可以查看Windows事件查看器中「应用程序」分类下的ASP.NET运行日志,获取具体的配置冲突信息做进一步排查。
内容的提问来源于stack exchange,提问作者Develop Man
相关产品推荐
相关产品推荐

