【问题标题】:What architectures may be used to break up a monolithic ASP.NET website? [closed]可以使用哪些架构来分解单一的 ASP.NET 网站? [关闭]
【发布时间】:2016-02-03 10:36:47
【问题描述】:

我想将一个单一的 ASP.NET MVC 网站分成多个可以独立开发的网站,但保留一个带有关联 SSL 证书的公共公共 URL - 它是单个主机证书,而不是通配符。

公共网站的匿名用户的主要 URL 将保持不变,并且将是一个标准的 ASP.NET MVC 网站,尽管用于此的技术将随着时间的推移而升级。

至于其他服务,可能有很多,它们可能在云中、Raspberry Pi 或其他东西上运行。许多响应流将作为 text/html 返回,但 JSON 也会从某些 API 返回。

为了安全,我计划将IdentityServer 用作安全令牌服务 (STS)(稳定下来时可能是第 4 版),因此需要考虑到这一点 - 尤其是身份验证 cookie 处理。

我什至不知道如何称呼这个前端“分发器”,但我假设它会是轻量级的。我已经看到了在这个角色的简单版本中使用节点服务器的快速演示,但是我对节点的了解不够,无法知道这种策略的限制是什么。

我更喜欢 C# ASP.NET MVC 解决方案,因为我熟悉该技术。

【问题讨论】:

  • “我称这个前端为‘分销商’” - 反向代理。现有大量可供选择。

标签: c# asp.net-mvc ssl architecture url-routing


【解决方案1】:

您的前端应用可以是一个简单的反向代理。

我已经写了一个blog post,关于使用 Azure Web Apps 创建一个免费的反向代理。实际上,您可以免费执行此操作,至少在您测试一切都按预期工作时是这样。

您可以使用IIS URL rewritingApplication 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> 

注意,通过规则example.com/(app1)/(.*)处理http://www.example.com/app1/path/and/query?qs=1意味着会发生这种情况:

{R:0} 包含http://www.example.com/app1/path/and/query?qs=1

{R:1} 包含app1

{R:2} 包含path/and/query?qs=1

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
相关资源
最近更新 更多