用于重定向的 ARR 反向代理出站重写规则

用于重定向的 ARR 反向代理出站重写规则

我目前正在尝试将各种技术混合到一个网站上,以简化迁移并增加灵活性,并尝试进行概念验证。这个想法是在 IIS 7.5 ARR 反向代理后面创建一个“混搭”网站。

目前,ARR 反向代理将所有请求转发到我们的主站点。请求如下:

 client -> ARR: Get /
 ARR -> Server 1: Get /
 Server 1 -> ARR: 200: /index.htm
 ARR -> client: 200: /index.htm

...到目前为止,一切都很好。

假设我想添加一个新站点(另一台服务器的根目录)作为我主网站的子站点。一个简单的入站规则就可以达到这个目的:

<rule name="sub1" stopProcessing="true">
  <match url="^mySubsite(.*)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="http://server2/{R:1}" />
</rule>

现在的要求是:

 client -> ARR: Get /mySubsite
 ARR -> Server 2: Get /
 Server 2 -> ARR: 200: /index.htm
 ARR -> client: 200: /index.htm

...还可以。

当 server2 上的站点发送重定向(例如到登录页面)时,就会出现问题。在 SharePoint 的情况下,它会将用户重定向到:/_layouts/Authenticate.aspx?Source=%2F ...但该重定向并不存在:

client -> ARR: Get /mySubsite
ARR -> Server 2: Get /
Server 2 -> ARR: 301: /_layouts/Authenticate.aspx?Source=%2F
ARR -> client: 301: /_layouts/Authenticate.aspx?Source=%2F
client -> ARR: Get /_layouts/Authenticate.aspx?Source=%2F
ARR -> client: 404: Not Found

是否有人知道如何编写出站规则以将来自服务器 2 的响应“301:/_layouts/Authenticate.aspx?Source=%2F”重写为“301:/mySubsite/_layouts/Authenticate.aspx?Source=%2FmySubsite%2F”?

答案1

我通过使用子域名解决了这个问题。因此,不要使用:

www.mydomain.com/mysite1
www.mydomain.com/mysite2

我在用着:

mysite1.mydomain.com
mysite2.mydomain.com

这意味着所有相对链接和重定向仍然像以前一样工作。

如果确实需要重写位置标头,查看此演练

相关内容