我目前正在尝试将各种技术混合到一个网站上,以简化迁移并增加灵活性,并尝试进行概念验证。这个想法是在 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
这意味着所有相对链接和重定向仍然像以前一样工作。
如果确实需要重写位置标头,查看此演练