我正在尝试将ASP.net和Node.js集成到一台服务器上
ASP.net在localhost:8080
NodeJs位于localhost:4000
我的期望就在这里。
client ----> IIS Server ----> ASP.NET (no rewriting except /api/* localhost:80)
(rev.0970.co.kr) |---> Node.js (matching with /api/* localhost:4000)
节点应用程序作为Windows服务执行,并提供localhost:4000 / api / local。应该使用http://rev.0970.co.kr/api/signin
访问
除/api/
之外的所有请求都应该提供给正常的IIS asp.net。 (例如http://rev.0970.co.kr/index.aspx
)
我的设定步骤
- 安装ARR和UrlRewrite模块
- 启用ARR的代理
- 将规则添加到urlrewrite部分,如下所示。
<rule name="Proxy">
<match url="api/(.*)"/>
<conditions>
<add input="{HTTP_HOST}" pattern="rev.0970.co.kr" />
</conditions>
<action type="Rewrite" url="http://localhost:4000/api/{R:1}" />
</rule>
结果
- http://rev.0970.co.kr/api/signin:成功
- http://rev.0970.co.kr/index.aspx:失败 - 找不到404
我认为http://rev.0970.co.kr/index.aspx
与api/(.*)
不匹配,因此IIS可能会呈现index.aspx。
当我删除urlrewrite的整个规则设置时,http://rev.0970.co.kr/index.aspx
有效。
我做错了什么?
修改
这是我的完整web.config文件。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:4000/(.*)" />
<action type="Rewrite" value="http{R:1}://rev.0970.co.kr/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
<rules>
<rule name="Proxy">
<match url="api/(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="rev.0970.co.kr" />
</conditions>
<action type="Rewrite" url="http://localhost:4000/api/{R:1}" />
</rule>
</rules>
</rewrite>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server" areas="Security,CGI,RequestNotifications,Module,FastCGI" verbosity="General" />
</traceAreas>
<failureDefinitions timeTaken="00:00:00" statusCodes="404" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>