Categories


Tags


IIS实现反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

通过IIS安装反向代理,可以使得IIS和Apache等服务器运行在同一台机器上,IIS和Apache都可以通过80端口访问,使得网站的兼容性更强。

IIS实现反向代理有两种方法,IIS6通过第三方工具ISAPI Rewrite来实现反向代理,IIS7以后的版本可以用过微软自己的URL Rewrite和Application Request Routing来实现反向代理。

反向代理

IIS6

先安装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端口,对于用户来说是不可见的。

IIS7

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>

使用的时候将黑体内容替换,将www.williamlong.info:8080替换为反向代理的网站,将www.williamlong.info替换为公开发布的网站即可。

来源:月光博客


Public @ 2015-01-28 15:47:25

IIS服务器多域名部署多个HTTPS的方法

默认情况下,使用IIS7的HTTPS绑定是无法指定主机名的。“主机名”的内容是灰色不可编辑的。这就带来了一个很大的问题,当一台IIS服务器上绑定两个不同的域名,主机上只能启用一个网站的HTTPS,第二个网站的HTTPS无法启用,系统提示错误说,不能“使用同一主机名”。实际上,我们并没有使用同一主机名,只要想办法把灰色不可编辑的主机名修改即可,这时,我们就需要手动修改IIS配置文件来实现主机头绑定。

Public @ 2021-05-12 15:56:01

云服务器和VPS的区别

1. 虚拟化技术不同 云服务器使用的是虚拟机技术,而VPS则使用的是虚拟专用服务器技术。云服务器可以创建多台虚拟机,每台虚拟机可以有自己的操作系统、应用程序和数据存储。而VPS是在一台物理服务器上创建多个虚拟服务器,每个VPS都可以独立运行自己的操作系统、应用程序和数据存储。 2. 管理方式不同 云服务器一般由云服务提供商管理,用户只需要关注自己的应用程序和数据存储。而VPS需要用户自行管理

Public @ 2023-06-27 17:01:06

保护IIS服务器的15个技巧

通常地,大多数Web站点的设计目标都是:以最易接受的方式,为访问者提供即时的信息访问。在过去的几年中,越来越多的黑客、病毒和蠕虫带来的安全问题严重影响了网站的可访问性,尽管Apache服务器也常常是攻击者的目标,然而微软的Internet信息服务(IIS) Web服务器才是真正意义上的众矢之的。高级教育机构往往无法在构建充满活力、界面友好的网站还是构建高安全性的网站之间找到平衡点。另外,它们现在必

Public @ 2020-10-12 15:47:22

Windows Server 2008 IIS安装教程

以下是在Windows Server 2008上安装IIS的步骤: 1. 在服务器上登陆管理员帐户。 2. 打开服务器管理器,单击左侧的角色。 3. 单击右侧的添加角色链接。 4. 在“添加角色向导”窗口中,单击“下一步”。 5. 选择“Web服务器(IIS)”角色,单击“下一步”。 6. 阅读“Web服务器(IIS)”角色的概述,单击“下一步”。 7. 在“Web服务器(IIS)”

Public @ 2023-06-02 20:50:34

更多您感兴趣的搜索

0.462419s