13

我们需要能够在相同的 Intranet 服务器和端口号上运行一个 ASP.net Web 应用程序的两个版本,但一个映射到 /,另一个映射到 /experimental(不是实名,但足够接近)。

C:\inetpub\wwwroot\Version1 => http://test1.organization.com/ C:\inetpub\wwwroot\Version2 => http://test1.organization.com/experimental

第一个 URL 已经暴露给一些 beta 用户,因此需要保持一定的稳定性。第二个将包含只有进入 /experimental 的用户才能看到的实验代码。我们无法选择使用不同的服务器或不同的端口。

过去,我通过将 / 映射到 IIS 中的站点下的站点,然后将第二个站点添加为它下面的应用程序,并将其别名为 /site2 来实现这一点。

服务器站点 默认网站 <= 映射到第一个版本的物理路径和// Application1 <= 映射到第二个版本和 /experimental 的嵌套应用程序

然而,这似乎是草率的。使用重写规则或使用 ARR 会更干净吗?如果是这样,怎么做?

谢谢!

4

2 回答 2

13

ARR 和重写规则的组合将很好地解决这个问题。以下是要遵循的步骤:

  1. 下载并安装 ARR http://www.iis.net/download/ApplicationRequestRouting
  2. 在 IIS 管理器中,在连接窗格中选择您的计算机,双击 IIS 部分中的应用程序请求路由功能,单击操作窗格中的“服务器代理”链接,然后选中“启用代理”复选框并选择应用行动。
  3. 更改现有两个网站的绑定,例如将已发布网站绑定到 81 端口,将实验网站绑定到 82 端口。
  4. 创建一个新的网站和应用程序池,并将其绑定到http:*:80:. 将其命名为“默认网站”。将其物理路径指向“%SystemDrive%\inetpub\DefaultWebSite”
  5. 为“默认”网站创建一个 web.config 文件,并在那里编写您的路由规则:

    <rules>
        <rule name="Reverse Proxy for Experimental" stopProcessing="true">
            <match url="^.*/experimental/.*" />
            <action type="Rewrite" url="http://{HTTP_HOST}:82/{R:0}" />
        </rule>
        <rule name="Reverse Proxy for Release" stopProcessing="true">
            <match url=".*" />
            <action type="Rewrite" url="http://{HTTP_HOST}:81/{R:0}" />
        </rule>
    </rules>
    
  6. 您可能需要修改一些重写规则,您可以在 IIS 上尝试使用 URL 重写模块小程序,并在此处阅读更多信息:http ://learn.iis.net/page.aspx/500/testing-rewrite- rule-patterns/ 如需进一步帮助,请务必浏览 Ruslan Yakushev 的博客:http ://ruslany.net/

这将为您提供三个完全独立的网站,可通过端口 80 上的单个外观访问(当然,如果您需要: http://localhost:81/default.aspx例如,您可以直接在端口 81 和 82 上访问每个网站:)。

于 2011-08-17T05:31:54.133 回答
3

您可以在不同的子域中运行其中一个站点,例如 test1.organization.com 和 beta1.organization.com?如果是这样,那么您可以将它们都设置为 IIS 中的顶级网站,并在每个站点绑定上设置主机名,这样它们就可以在相同的 IP 地址和端口上运行。

于 2011-08-17T02:10:53.803 回答