我正在通过build立IIS作为反向代理的方式工作。 我已经build立了两个内部网站(由IIS服务),称为Payroll和Webmail,一个外部网站(由不同的Web服务器提供服务)称为IPS。 所有这三个站点都在本地主机上,但Payroll绑定到端口12084,Webmail到端口12085和IPS到端口2080我创build了三个入站规则,它们指向xyz.com/ips/,xyz.com/payroll/和xyz。 com / webmail /到他们各自的服务器。 所有这一切工作得很好。
<rules> <rule name="Reverse Proxy to ips" enabled="true" stopProcessing="true"> <match url="^ips/(.*)" /> <action type="Rewrite" url="http://localhost:2080/{R:1}" /> <serverVariables> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> <rule name="Reverse Proxy to webmail" stopProcessing="true"> <match url="^webmail/(.*)" /> <action type="Rewrite" url="http://localhost:12084/{R:1}" /> <serverVariables> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> <rule name="Reverse Proxy to payroll" stopProcessing="true"> <match url="^payroll/(.*)" /> <action type="Rewrite" url="http://localhost:12085/{R:1}" /> <serverVariables> <set name="HTTP_ACCEPT_ENCODING" value="" /> </serverVariables> </rule> </rules>
然后,我写了一个出站规则,应该修补这些URL,以便它们能够从外部客户端进行工作。
<rule name="Add application prefix" preCondition="IsHTML"> <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" /> <conditions> <add input="{URL}" pattern="^/(webmail|payroll|ips)/.*" /> </conditions> <action type="Rewrite" value="/{C:1}/{R:1}" /> </rule> <preConditions> <preCondition name="IsHTML"> <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" /> </preCondition> </preConditions>
这就是麻烦开始的地方。 薪资和Webmail工作得很好:他们是testing网站只包含一个HREF自己,这是正确的打补丁。 然而IPS却是另外一回事。 你看,IPS / index.html包含一个redirect到/html/index.php。
<meta HTTP-EQUIV="REFRESH" content="0; url=/html/index.php">
现在是我的问题 。 由于我不完全理解的原因,这个redirect没有得到修补,结果客户最终进入了“永恒的牧场”。
我怀疑是出站规则只适用于由IIS自己服务的站点,但不会影响外部服务器。 我进一步的怀疑是,我可以通过在“服务器场”中定义IPS(localhost:2080)作为服务器来完成这项工作,并相应地调整出站规则。 我想知道以上是否正确,如果是的话,应该如何修补出站规则。