IIS 两个站点使用相同的 url、ReactJS 前端、ASP Net Core 后端,无法访问后端
IIS two sites using same url, ReactJS front, ASP Net Core backend, can't reach backend
我是 运行 一个 ReactJS 前端,在我的 IIS 服务器上有一个 ASP 网络核心后端用于 API 调用。只有一个 URL,我相信它已通过 NetScaler 设置为端口 443(我无法控制 URL/NetScaler)。
我的 ReactJS 在端口 443 上。我的 ASP Net Core 在端口 444 上(我不确定这是否正确)。我的目标是所有在去往后端的路径中有 /fsapi/ 的调用。
目前我有以下规则:
<rules>
<clear />
<rule name="Flag Status API calls" stopProcessing="true">
<match url="fsapi/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{PATH_INFO}" pattern="fsapi/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)" />
</conditions>
<action type="Rewrite" url="localhost:444/{R:1}/{R:2}" appendQueryString="false" logRewrittenUrl="true" />
</rule>
<rule name="React routing">
<match url="fsapi/([0-9a-zA-Z]+)" negate="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_METHOD}" pattern="^GET$" />
<add input="{HTTP_ACCEPT}" pattern="^text/html" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="/" appendQueryString="false" />
</rule>
</rules>
一个规则是让 React Routing 工作,而另一个规则是尝试重定向 api 调用。
目前 React 路由规则运行良好,但任何 API 调用都会收到 502。
我不确定我尝试这样做是否找错了树,但从我所看到的指南来看,这似乎是正确的方式。
我建议您可以在 IIS
.
上阅读有关虚拟应用程序的官方文档
Understanding Sites, Applications, and Virtual Directories on IIS 7
步骤
在主站点部署您的 .net 核心后端 api peoject,名称为 coreapi
.
创建名称为 myreact
的虚拟应用程序。
然后我们可以使用 url.
访问后端 api
http://localhost:9001
而react项目的url是
http://localhost:9001/myreact
提示
虽然虚拟应用和主应用在同一个应用池下,但仍然是两个独立的网站。他们可以共享一个url。访问虚拟应用时,只需要添加后缀路径(https://mainsite.com/myreact
).
并且您还需要在虚拟应用程序路径下添加web.config
文件。
不要将你的 React 项目放在主站点。
可以参考我下面的回答post,都是部署到azure webapp,原理一样,效果一样。
我是 运行 一个 ReactJS 前端,在我的 IIS 服务器上有一个 ASP 网络核心后端用于 API 调用。只有一个 URL,我相信它已通过 NetScaler 设置为端口 443(我无法控制 URL/NetScaler)。
我的 ReactJS 在端口 443 上。我的 ASP Net Core 在端口 444 上(我不确定这是否正确)。我的目标是所有在去往后端的路径中有 /fsapi/ 的调用。
目前我有以下规则:
<rules>
<clear />
<rule name="Flag Status API calls" stopProcessing="true">
<match url="fsapi/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{PATH_INFO}" pattern="fsapi/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)" />
</conditions>
<action type="Rewrite" url="localhost:444/{R:1}/{R:2}" appendQueryString="false" logRewrittenUrl="true" />
</rule>
<rule name="React routing">
<match url="fsapi/([0-9a-zA-Z]+)" negate="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_METHOD}" pattern="^GET$" />
<add input="{HTTP_ACCEPT}" pattern="^text/html" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="/" appendQueryString="false" />
</rule>
</rules>
一个规则是让 React Routing 工作,而另一个规则是尝试重定向 api 调用。
目前 React 路由规则运行良好,但任何 API 调用都会收到 502。
我不确定我尝试这样做是否找错了树,但从我所看到的指南来看,这似乎是正确的方式。
我建议您可以在 IIS
.
Understanding Sites, Applications, and Virtual Directories on IIS 7
步骤
在主站点部署您的 .net 核心后端 api peoject,名称为
coreapi
.创建名称为
myreact
的虚拟应用程序。然后我们可以使用 url.
访问后端 apihttp://localhost:9001
而react项目的url是
http://localhost:9001/myreact
提示
虽然虚拟应用和主应用在同一个应用池下,但仍然是两个独立的网站。他们可以共享一个url。访问虚拟应用时,只需要添加后缀路径(https://mainsite.com/myreact
).
并且您还需要在虚拟应用程序路径下添加web.config
文件。
不要将你的 React 项目放在主站点。
可以参考我下面的回答post,都是部署到azure webapp,原理一样,效果一样。