【问题标题】:Redirect request from port 443 to some other port in IIS将请求从端口 443 重定向到 IIS 中的某个其他端口
【发布时间】:2019-12-04 15:26:40
【问题描述】:

我在 IIS 中创建了一个网站,并在该网站上托管了一个 ASP.NET 网络服务。对 Web 服务的请求将由第 3 方应用程序发送到以下 URL:

https://www.mywebsite.com/MyWebservice/api/dosomething

当我将网站的 HTTPS 绑定设置为默认端口 443 时,一切正常(没有证书问题或其他任何问题)。

但由于默认端口 443 可能被其他软件阻止,我想移动到另一个端口(例如 7443)。更改调用 URL 以添加正确的端口是没有选择的,因为端口可能因客户而异(可能发生,我们必须移动到端口 6443 或 8443)。

第一个问题: 我是否必须将我的 HTTPS 绑定更改为端口 7443 或将其保留在端口 443 上?我想我必须将其更改为端口 7443。

第二个问题: 我安装了模块“URL Rewrite”并使用 IIS 的 GUI 在 applicationHost.config 中创建了一个规则。但是每次收到请求时,我都会收到错误“net::ERR_CONNECTION_REFUSED”。我创建了一个传入防火墙规则,为传入流量启用端口 7443,但没有成功。

我在 applicationHost.config 中的规则如下所示:

<rewrite>
    <globalRules>
        <rule name="Redirect to port 7443" stopProcessing="true">
            <match url="www.mywebsite.com/(.*)" />
            <conditions logicalGrouping="MatchAny">
                <add input="{SERVER_PORT}" pattern="^7443$" negate="true" />
            </conditions>
            <action type="Redirect" url="https://www.mywebsite.com:7443/{R:1}" />
        </rule>
    </globalRules>
</rewrite>

我在这个问题中找到了规则:How do I redirect a specific port in the IIS server to an other port

我在上述问题的答案中也使用了该规则,但没有成功。

如果我输入我网站的空白 URL (https://www.mywebsite.com),浏览器告诉我,该网站无法访问。如果我扩展端口 ((https://www.mywebsite.com:7443),浏览器将显示为“Hello world”index.html。

第三个问题:我必须在哪个级别添加“URL Rewrite”规则(applicationHost.config、网站的web.config 或webservice 的web.config)?我只想将请求重定向到我的网站/网络服务到不同的端口。

希望有人能帮我解决这个问题。

最好的问候

迈克尔

【问题讨论】:

  • “因为默认端口 443 可能被其他软件阻止”是您应该透露更多信息的地方。在同一个端口 443 上,您可以托管许多站点/应用程序,尤其是在启用 SNI 的 IIS 8 及更高版本上,因此很少需要在非标准端口上托管您的站点。
  • 非常感谢 Lex 提供启用 SNI 的提示。我对这些东西很陌生,所以我的想法是,端口被阻止了,但是在阅读了有关 HTTPS、证书和绑定的更多信息后,我理解,当我为请求选择正确的证书时,IIS 出现问题有多个 HTTPS 绑定到同一个端口。 IIS 7.x 有什么解决方案吗?此旧版本的 IIS 不支持 SNI。
  • 在 IIS 7.x 上,您需要多个 IP 地址,以便您可以设置多个基于 IP 的证书映射。

标签: redirect iis port


【解决方案1】:

我必须将我的 HTTPS 绑定更改为端口 7443 还是保留在端口 443 上?我想我必须将其更改为端口 7443。

正如 lex 所说,我们可以将多个域绑定到同一个 443 端口。当请求到达服务器时,IIS 将检查域,然后将请求重定向到正确的应用程序。在我看来,没有必要使用新的端口。

为此,您应该在 IIS 站点绑定的主机名文本框中添加域。

我安装了模块“URL Rewrite”并使用 IIS 的 GUI 在 applicationHost.config 中创建了一个规则。但是每次收到请求时,我都会收到错误“net::ERR_CONNECTION_REFUSED”。我创建了一个传入防火墙规则,为传入流量启用端口 7443,但没有成功。

我发现你的 url 重写规则匹配 url 值是错误的,它不会匹配任何东西。匹配 url 部分将只匹配 url 的模式而不是域。

另外,如果您使用站点绑定,则无需添加 url 重写规则。

我必须在哪个级别添加“URL Rewrite”规则(applicationHost.config、网站的 web.config 或 webservice 的 web.config)?我只想将请求重定向到我的网站/网络服务到不同的端口。

在我看来,您可以将 url 重写规则添加到 web.config 中。例如,如果您想将 url 从 443 端口重定向到 7743。您可以将 url 重写规则添加到 443 的应用程序 web.config 文件中。

【讨论】:

  • 感谢白兰度的解释。我认为 Lex 启用 SNI(适用于 IIS 8 及更高版本)的答案是正确的解决方案,因为它将证书的绑定从 IP:port 更改为 hostname:port。您可以通过调用“netsh http show sslcert”来检查这一点。如果未启用 SNI,则证书绑定到 0.0.0.0:443,启用 SNI 后,将绑定到 www.mywebsite.com:443。
猜你喜欢
  • 2019-02-02
  • 2016-01-26
  • 2017-05-04
  • 2017-09-12
  • 2014-10-06
  • 2019-02-02
  • 2020-09-18
  • 2014-04-27
  • 2015-08-07
相关资源
最近更新 更多