【问题标题】:IIS Route Request To Different Ports Based on Sub-domainIIS根据子域将请求路由到不同的端口
【发布时间】:2020-04-16 01:10:13
【问题描述】:

我有一个域,我们称之为domain.com

在我的 DNS 提供商上,我已将两个子域配置为指向同一个 IP 地址。例如:
sub1.domain.com => 185.146.11.17
sub2.domain.com => 185.146.11.17

我在 IIS 中配置了两个站点,分别侦听端口 8080 和 8081。

现在,由于流量直接通过185.146.11.17:80,我需要根据请求的子域将其路由到端口8080 或端口8081

我已经阅读了有关重写规则和反向代理的信息,但是对于如何根据请求的子域简单地实现我所需要的完全感到困惑。

如何解决这个问题?

【问题讨论】:

  • 反向代理只是要走的路(也是最简单的)。不管这个概念有多么令人困惑,尝试一下,然后再提出一个更具体的问题。

标签: iis reverse-proxy url-rewrite-module


【解决方案1】:

经过多次挖掘、反复试验和拔掉头发,我设法解决了这个问题。在这种情况下,IIS 似乎提供了很多繁重的工作,并且实际上不需要任何显式的反向代理和/或重写规则。

DNS 设置如下
sub1.domain.com => 185.146.11.17
sub2.domain.com => 185.146.11.17

只需:
1.停止/删除端口80上的默认网站。
2. 创建新网站:
2.1。站点名称设置为sub1.domain.com
2.2. IP 地址设置为All Unassigned,端口设置为80
2.3.主机名设置为sub1.domain.com
3. 使用sub2.domain.com 重复该过程。

按照上述步骤,这一切都应该神奇地工作。主机名非常重要,因此请务必不要错过这些。我建议将这一切都设置为 HTTPS,然后创建一个规则以在请求来自此类协议时从 HTTP 重定向。

感谢大家提供建议。

【讨论】:

    【解决方案2】:

    听起来您需要为自己创建一个 ARR 负载平衡。

    先决条件

    1.应用请求路由和URL重写安装。

    2.三个DNS名称,一个用于前端,两个用于后端。

    3.三个有域名的网站:

    主站点

    子站点1

    子站点2

    4.创建一个网络场并将这些域添加到您的网络场。

    1. IIS 将在Server 节点的URL 重写中创建负载均衡路由规则“ARR_MyServer_loadbance”,然后为其添加条件模式。

     <globalRules>
                    <rule name="ARR_MyServer_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
                        <match url="*" />
                        <action type="Rewrite" url="http://MyServer/{R:0}" />
                        <conditions>
                            <add input="{HTTP_HOST}" pattern="www.candy.com" />
                        </conditions>
                    </rule>
                </globalRules>
    

    6.转到配置管理器->网络场并将 PreserveHostHeader 设置为 false。 7.转到您的网络农场->我的服务器监控和管理,确保所有服务器都健康 现在您可以为主站点进行负载平衡了。

    当您将服务器加入您的网络场时,请记住为每个服务器设置 HTTP 端口。

    Applicationhost.config 应如下所示:

      <webFarm name="MyServer" enabled="true">
                <server address="domain1.candy.com" enabled="true">
                    <applicationRequestRouting httpPort="8080" />
                </server>
                <server address="domain2.candy.com" enabled="true">
                    <applicationRequestRouting httpPort="8081" />
                </server>
                <applicationRequestRouting>
                    <healthCheck url="" />
                    <protocol preserveHostHeader="false" />
                </applicationRequestRouting>
            </webFarm>
    

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 2014-01-30
      • 2015-07-24
      • 2021-05-07
      • 1970-01-01
      • 2018-10-26
      • 2014-04-01
      • 2022-01-22
      • 2010-11-02
      相关资源
      最近更新 更多