使用NGINX proxy_pass代理IIS 10服务器时Report Viewer配置错误
问题解决:ReportView控件代理后报错及CSS加载失败
一、Report Viewer Handler未注册错误解决
1. 确认Web.config的Handler配置
确保WebForm项目的web.config中已正确注册ReportViewer的HTTP Handler,根据IIS版本添加对应配置:
针对IIS经典模式(system.web节点)
<system.web> <httpHandlers> <!-- 版本号需与项目引用的ReportViewer版本一致,例如15.0.0.0 --> <add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> </httpHandlers> </system.web>
针对IIS7+集成模式(system.webServer节点)
<system.webServer> <handlers> <!-- 版本号需与项目引用的ReportViewer版本一致 --> <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> </handlers> </system.webServer>
2. 调整Nginx代理配置
确保Nginx正确转发所有请求(包括.axd这类特殊路径),并保留必要的请求头,避免IIS无法识别请求:
location /webform/ { # 替换为你的WebForm站点代理路径 proxy_pass http://[IIS服务器IP或域名]/webform/; # 替换为IIS上WebForm站点的实际地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass_request_headers on; # 确保请求头完整传递 }
注意:若Nginx上同时托管.NET Core站点,需确保代理规则区分开两个站点的路径,避免WebForm的请求被误导向.NET Core应用。
3. 验证依赖文件
确认IIS站点的bin目录下存在ReportViewer的核心依赖文件:
Microsoft.ReportViewer.WebForms.dllMicrosoft.ReportViewer.Common.dll- 对应版本的本地化资源文件(如
Microsoft.ReportViewer.WebForms.resources.dll,若需要)
二、CSS文件无法加载解决
1. 修正静态资源路径
WebForm页面中CSS的相对路径在代理场景下可能解析错误,可通过以下方式修复:
方式一:添加Base标签
在页面的<head>节点中添加base标签,指定WebForm站点的代理根路径:
<head runat="server"> <base href="http://[Nginx域名]/webform/" /> <!-- 其他页面内容 --> </head>
方式二:使用ResolveUrl方法生成绝对路径
将CSS引用改为动态生成的绝对路径:
<link href='<%= ResolveUrl("~/styles/your-style.css") %>' rel="stylesheet" type="text/css" />
2. 调整Nginx静态资源转发规则
确保Nginx不会拦截WebForm的静态资源请求,将对应路径的请求转发至IIS,而非当作.NET Core站点的静态资源处理(需与代理规则匹配)。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

