500 URL 重写模块错误 ASP.NET 内核
500 URL Rewrite Module Error ASP.NET Core
我是 运行 我的 DMZ 中的反向代理 (RP) 服务器 (Win 2012 R2)。然后连接到我的 LAN 服务器 运行 Win 2008 R2。我在另一个Win 2012 R2 LAN盒子前面也有相同的RP服务器。
我们正在 RP 后面的 LAN 上部署我们的第一个 ASP.NET 核心应用程序。它工作完美是 LAN 框是 Win 2012 R2。但是,如果我们将应用程序移动到我们的生产 Win 2008 R2 机器上,它会工作,除非有一个控制器 return 是 HTML 视图(而不是 XML 或 JSON ).同样,完全相同的代码适用于 Win 2012 R2 LAN 机器,但不适用于 Win 2008 R2 LAN 机器。
这是 RP web.config(除了 IP 和域外,两个 LAN 服务器都相同)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://10.0.0.254/{R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://10.0.0.254/(.*)" />
<action type="Rewrite" value="http{R:1}://our-public-domain.com/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
在 Win 2008 R2 LAN 框上,这里是 web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
<!--ProjectGuid: 5x8x39x8-580x-4xx2-955x-76x4x4685415-->
正如我所说,连接到 Win 2012 R2 或 Win 2008 R2 盒子时在同一 RP 服务器上的配置。此外,我们在 Window 2008 R2 上还有其他不使用 ASP.NET 核心的站点,这些站点工作正常,但 none 有视图,因为它们只是 return XML、JSON 和文本。
有什么见解吗?
我看到你在规则中有响应重写。如果响应被压缩,这可能会导致 RP 服务器中的 URLRewrite 模块出现 500 错误。您可以通过检查子状态码来查看详细信息。对于 Gzip 编码,这通常是 500.52。您可以在 RP 服务器的 IIS 日志中看到它
有关子状态代码的更多详细信息 iis status code
如果错误为 500.52,请检查 this
检查控制面板是否安装了多个 IIS Express。如果你有不止一个那么
1.keep 默认的 IIS Express。
2.Uninstall其他。
3.Repair IIS Express
我是 运行 我的 DMZ 中的反向代理 (RP) 服务器 (Win 2012 R2)。然后连接到我的 LAN 服务器 运行 Win 2008 R2。我在另一个Win 2012 R2 LAN盒子前面也有相同的RP服务器。
我们正在 RP 后面的 LAN 上部署我们的第一个 ASP.NET 核心应用程序。它工作完美是 LAN 框是 Win 2012 R2。但是,如果我们将应用程序移动到我们的生产 Win 2008 R2 机器上,它会工作,除非有一个控制器 return 是 HTML 视图(而不是 XML 或 JSON ).同样,完全相同的代码适用于 Win 2012 R2 LAN 机器,但不适用于 Win 2008 R2 LAN 机器。
这是 RP web.config(除了 IP 和域外,两个 LAN 服务器都相同)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://10.0.0.254/{R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://10.0.0.254/(.*)" />
<action type="Rewrite" value="http{R:1}://our-public-domain.com/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
在 Win 2008 R2 LAN 框上,这里是 web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
<!--ProjectGuid: 5x8x39x8-580x-4xx2-955x-76x4x4685415-->
正如我所说,连接到 Win 2012 R2 或 Win 2008 R2 盒子时在同一 RP 服务器上的配置。此外,我们在 Window 2008 R2 上还有其他不使用 ASP.NET 核心的站点,这些站点工作正常,但 none 有视图,因为它们只是 return XML、JSON 和文本。
有什么见解吗?
我看到你在规则中有响应重写。如果响应被压缩,这可能会导致 RP 服务器中的 URLRewrite 模块出现 500 错误。您可以通过检查子状态码来查看详细信息。对于 Gzip 编码,这通常是 500.52。您可以在 RP 服务器的 IIS 日志中看到它
有关子状态代码的更多详细信息 iis status code
如果错误为 500.52,请检查 this
检查控制面板是否安装了多个 IIS Express。如果你有不止一个那么 1.keep 默认的 IIS Express。 2.Uninstall其他。 3.Repair IIS Express