使用IIS

时间:2018-01-06 05:11:17

标签: node.js iis url-rewriting

我正在尝试将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.aspxapi/(.*)不匹配,因此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>

0 个答案:

没有答案