我想将一个单一的ASP.NET MVC网站划分为多个可以独立开发的网站,但保留一个带有相关SSL证书的公共URL - 它是单个主机证书,而不是通配符。
公共网站的匿名用户的主要URL将保持不变,并且将成为标准的ASP.NET MVC网站,尽管用于此的技术将随着时间的推移而升级。
至于其他服务,可能有很多这些服务,它们可能在云端,Raspberry Pi或其他地方运行。许多响应流将以text / html的形式返回,但也会从某些API返回JSON。
为了安全起见,我计划将IdentityServer用作安全令牌服务(STS)(当它安定下来时可能是版本4),因此需要考虑因素 - 尤其是身份验证cookie处理。
我甚至不知道该怎么称呼我称这个前端'经销商',但我认为它将是轻量级的。我已经看到了一个节点服务器的快速演示,该节点服务器被用在这个角色的简单版本中,但是我对节点知之甚少,不知道这个策略的局限性。
我更喜欢C#ASP.NET MVC解决方案,因为我熟悉这项技术。
答案 0 :(得分:0)
您的前端应用可能是一个简单的反向代理。
我已经编写了一篇关于使用Azure Web Apps创建免费反向代理的blog post。实际上,您可以免费执行此操作,至少在您测试一切按预期工作时是这样。
您可以使用IIS URL rewriting和Application Request Routing。
您还希望在出路时重写内容,以便将对http://somehost.azurewebsites.net
的任何引用重写为http://www.example.com/app1
等。
以下是web.config示例:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Proxy" stopProcessing="true">
<match url="example.com/(app1)/(.*)" />
<action type="Rewrite" url="http://somehost.azurewebsites.net/{R:2}" />
<serverVariables>
<set name="HTTP_X_UNPROXIED_URL" value="{R:0}" />
<set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
<set name="HTTP_X_ORIGINAL_HOST" value="{HTTP_HOST}/{R:1}" />
<set name="HTTP_ACCEPT_ENCODING" value="" />
</serverVariables>
</rule>
</rules>
<outboundRules>
<rule name="ChangeReferencesToOriginalUrl" patternSyntax="ExactMatch" preCondition="CheckContentType">
<match filterByTags="None" pattern="http://example.com/app1" />
<action type="Rewrite" value="http://{HTTP_X_ORIGINAL_HOST}" />
</rule>
<preConditions>
<preCondition name="CheckContentType">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^(text/html|text/plain|text/xml|application/rss\+xml)" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
请注意,通过规则http://www.example.com/app1/path/and/query?qs=1
处理example.com/(app1)/(.*)
意味着会发生这种情况:
{R:0}包含http://www.example.com/app1/path/and/query?qs=1
{R:1}包含app1
{R:2}包含path/and/query?qs=1