我有两个项目需要在同一个 IIS 站点上一起发布。
其中一个项目是 Angular 应用程序,另一个是 ASP.NET Core Web API。
由于各种原因,Web API 项目必须是“主要”项目,即使它只为
/api
提供请求。
我考虑过在应用程序文件夹中发布 Angular 项目,但我需要对
http://mysite/home
的请求,例如由 Angular 路由处理。不幸的是,我不能使用http://mysite/app/home
。
我发现的部分解决方案是按以下方式使用 URL 重写,但我仍然没有实现所需的行为,主要是由于重定向到
index.html
(显然,它不应该出现在 URL 中)。
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect to app folder if exists" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_URI}" pattern="^/api" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^app/{R:1}$" />
</conditions>
<action type="Rewrite" url="/app/{R:1}" />
</rule>
<rule name="Redirect to index.html if not found in app" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/api" negate="true" />
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
您可以使用主机标头在不同的主机名上发布(因为不涉及https,因此不应该/可能不使用SNI)。因此 api.mysite.intra 网站指向另一个 IP 地址和 app.mysite.com 网站指向另一个IP地址。此选项的要求:
另一种选择是使用端口区分http请求: 此选项的要求:
您应该为站点定义不同的端口(app.mysite.intra 使用端口 80,api.mysite.intra 使用端口 81)
IIS 中会有两个不同的站点定义。每个都有自己的绑定。不会有任何主机头设置(留空)
只要端口正确就可以用不同的名称访问(http://api.mysite.intra:81为例)
此外,如果您有IP&域名限制模块,您可以限制使用源IP地址的网站的访问。例如,您可以限制仅来自本地主机 IP 地址的 api 访问。