记录II6、II7反向代理设置规则配置案例方法

老蒋一般服务器使用Nginx引擎比较多,早年是有用Windows服务器IIS,由于IIS配置比较复杂,而且WIN占用资源大,所以一般的网站项目如今很少有用到。但是有些项目还是需要用到WIN服务器的,这里有在研究Windows IIS的反向代理的规则,这里简单的将方法记录下来。

1、II6 实现反向代理步骤

先安装ISAPI_Rewrite3_0082.msi,安装完成后,再安装一个Apache服务器,Apache安装完成后,设置HTTP端口为8080,HTTPS端口4433,而IIS的HTTP端口为80,HTTPS端口443,IIS和Apache的端口不能冲突。

IIS新建一个站点,在网站根目录建立一个名为 .htaccess 的文件,内容如下,域名请修改为自己的域名:

RewriteEngine On
RewriteCompatibility2 On
RepeatLimit 200
RewriteBase
RewriteCond %{HTTP:Host} ^www.williamlong.info$
RewriteProxy (.*) https://www.williamlong.info:8080$1 [NC,P,H]

之后,IIS6+Win2003 配置反向代理到 Apache 就成功了,制定域名可以通过80端口的IIS访问,而实际网站则是再Apache的8080端口,对于用户来说是不可见的。

2、II7 实现反向代理步骤

IIS7不用安装第三方的软件,本身反向代理软件微软就提供,我们使用微软自己的URL Rewrite和Application Request Routing即可实现反向代理。

先安装URL Rewrite和Application Request Routing,只转发到IIS内网站,则不需要安装ARR。安装完成后,再安装一个Apache服务器,Apache安装完成后,设置HTTP端口为8080,HTTPS端口4433,而IIS的HTTP端口为80,HTTPS端口443,IIS和Apache的端口不能冲突。

安装好以上两个插件,重启IIS管理器,然后点击当前主机,就会发现两个新增的图标了。

点击Application Request Routing图标,选择Server Proxy Settings,勾上Enable proxy并点击右侧的应用。

选择需要反向代理的站点,再选择“URL重写”,然后配置入站规则和出站规则。

入站规则里,点击添加规则,选择空白规则,“名称”随便写,选择“与模式匹配”,然后就在匹配URL里填个模式,^(.*),“条件输入”填写“{HTTP_HOST}”,模式为^www.williamlong.info$,入站规则的操作类型为“重写”,重写URL为“https://www.williamlong.info:8080{R:1}”。

出站规则里,点击添加规则,选择空白规则,“名称”随便写,匹配模式选择“响应”,然后就在模式里填写,href=(.*?)www.williamlong.info:8080(.*?),出站规则的操作类型为“重写”,重写数值为“href={R:1}www.williamlong.info/{R:2}”。

填好了保存下,即可完成IIS7的反向代理配置。

不过,上述方法在针对压缩网页的反向代理会报错,IIS会提示:

HTTP 错误 500.52 - URL Rewrite Module Error.

Outbound rewrite rules cannot be applied when the content of the HTTP response is encoded ("gzip").

解决方法可以参考微软官方的一篇文章,里面详细描述了解决方法,我这里概括一下操作如下:

点击“查看服务器变量”,点“添加”,增加两个变量,分别是 HTTP_ACCEPT_ENCODING 和 HTTP_X_ORIGINAL_ACCEPT_ENCODING 。

之后编辑 web.config 文件,内容如下:

<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" enabled="true">
<match url="^(.*)"/>
<action type="Rewrite" url="https://www.williamlong.info:8080{R:1}"/>
<serverVariables>
<set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}"/>
<set name="HTTP_ACCEPT_ENCODING" value=""/>
</serverVariables>
</rule>
</rules>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="true">
<match filterByTags="None" pattern="href=(.*?)www.williamlong.info:8080(.*?)"/>
<action type="Rewrite" value="href={R:1}www.williamlong.info/{R:2}"/>
</rule>
<rule name="Restore-AcceptEncoding" preCondition="NeedsRestoringAcceptEncoding">
<match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)"/>
<action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}"/>
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html"/>
</preCondition>
<preCondition name="NeedsRestoringAcceptEncoding">
<add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".+"/>
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>

这里简单的记录,参考来自月光博客:https://www.williamlong.info/archives/5353.html

本文出处:老蒋部落 » 记录II6、II7反向代理设置规则配置案例方法 | 欢迎分享( 公众号:老蒋玩运营 )