反向代理 - 规则模板

作者:Ruslan Yakushev

规则模板用于提供一种简单的方法来为特定方案创建一个或多个重写规则。 URL 重写模块 2 包含多个规则模板,它们用于一些常见使用方案。 此外,URL 重写模块 UI 还提供了一个用于插入自定义规则模板的框架。 本演练将指导你如何使用 URL 重写模块附带的“反向代理”规则模板。 若要详细了解如何使用 IIS URL 重写模块和 IIS 应用程序请求路由配置反向代理,请参阅“使用 URL 重写 v2 和应用程序请求路由的反向代理”。

先决条件

本演练要求满足以下先决条件:

  • 启用了 ASP.NET 角色服务的 IIS 7 或更高版本;
  • 已安装 URL 重写模块 2.0;
  • 已安装 IIS 应用程序请求路由。

创建示例网站

为简单起见,将在单个服务器上实现要在本演练中使用的反向代理方案,IIS 的“默认网站”充当反向代理站点和内容应用程序(托管在同一服务器上的单独 IIS 网站中)。

若要创建示例内容网站,请执行以下操作:

  1. 在以下文件夹中创建一个名为“contentsite”的文件夹:

    %SystemDrive%\inetpub\ folder.
    
  2. 创建一个名为“contentsite”的 IIS 网站,该网站指向 %SystemDrive%\inetpub\ 下的相应的文件夹。 对站点使用端口 8081。
    可使用以下命令来创建站点:

    %windir%\System32\inetsrv\appcmd.exe add site /name:"contentsite" /bindings:http/*:8081: /physicalPath:"%SystemDrive%\inetpub\contentsite
    
  3. 在以下文件夹中创建一个名为 default.aspx 的文件:

    %SystemDrive%\inetpub\contentsite
    
  4. 复制以下 ASP.NET 标记,将其粘贴到文件中,并将该文件另存为 default.aspx:

    <%@ Page Language="C#" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Reverse Proxy Test Application</title>
    </head>
    <body>
        <h1>Reverse Proxy Test Page</h1>
        <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %></p>
        <p><a href="http://<%= Request.ServerVariables["HTTP_HOST"] + Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p>
    </body>
    </html>
    
  5. 若要确保站点正常工作,请打开 Web 浏览并请求以下 URL:

    http://localhost:8081/default.aspx
    

使用反向代理模板生成入站和出站规则

“反向代理”规则模板可用于生成入站重写规则,该规则用于将 HTTP 请求代理到另一台服务器。 (可选)模板还可以创建出站重写规则,该规则可修复 HTML 响应内链接 URL 中的主机名。 在本演练中所述的示例中,代理服务器主机名为 localhost,内容服务器的主机名为 localhost:8081。 内容服务器上的 Web 应用程序在 HTML 响应中生成一个链接,该链接使用内部主机名(例如 http://localhost:8081/default.aspx)。 出站规则修复了此链接,使其使用代理的主机名(例如 http://localhost/default.aspx)。

若要使用规则模板创建规则,请执行以下步骤:

  1. 在 IIS 管理器中,选择左侧树视图中的“默认网站”。
  2. 打开 URL 重写功能视图。
  3. 在 URL 重写功能视图中,选择“添加规则...”操作,然后选择“反向代理”模板:
    Screenshot of the Add Rules dialog box displaying the rule template options. Reverse Proxy is highlighted.
  4. 在“添加反向代理规则”对话框中,输入以下内容:
    将转发 HTTP 请求的服务器名称或 IP 地址:localhost:8081
    选中“在 HTTP 响应中重写链接的域名”复选框,然后输入以下内容:
    来源:localhost:8081
    目标:localhost
    Screenshot of the Add Reverse Proxy Rules dialog box.
  5. 单击“确定”。 将同时创建入站和出站规则:
    Screenshot of the I I S Manager displaying the U R L Rewrite page.

测试反向代理

测试规则模板生成的重写规则是否正确打开 Web 浏览器并向 http://localhost/default.aspx 发出请求。 IIS“默认网站”将收到此请求,并将根据入站重写规则将其路由到 http://localhost:8081/default.aspx 从 contentsite 网站返回 HTTP 响应时,出站重写规则会修改 HTML 内的链接 URL,将主机名从 localhost:8081 重写为 localhost:

Screenshot of a browser window displaying a Reverse Proxy Test Page.

总结

在本演练中,你学习了如何使用“反向代理”规则模板来生成重写规则,以在 IIS 中实现简单的反向代理配置。 此规则模板可用作生成基本规则的起点,稍后可调整或修改这些规则,来解决 Web 应用程序的特定路由和重写要求。