请求映射
代理服务器使用请求映射来将接收到的 HTTP 请求与单元或路由规则中部署的应用程序相匹配。
不同于 Apache Web Server 或 Caching Proxy(其平面配置文件的路由优先顺序继承自伪指令顺序),代理服务器使用最匹配机制来确定与请求对应的已安装应用程序或路由规则。虚拟主机或 URI 模式确定 Web 模块或路由规则的最佳匹配。对于集群中部署的应用程序,代理服务器将维护亲缘关系(安全套接字层标识、cookie 和 URL 重写),否则将使用加权轮询来选择目标服务器。下列示例说明在同一单元中部署路由规则和应用程序时的各种路由方案。
- 代理环境
WebSphere® 代理服务器 proxy1 在应用程序和路由规则所在的单元中处于活动状态。将在单元中对 proxy1 启用所有应用程序和路由规则,并且 proxy1 的 PROXY_HTTP_ADDRESS 设置为 80。
虚拟主机 主机名 端口 default_host host1.company.com 80 host1.company.com 9080 * 80 proxy_host host2.company.com 80 * 443 * 80 server_host host3.company.com 80 URI 组名 URI 模式 全部 /* ROOMS /kitchen/*、/bathroom/* 和 /bedroom/* CONFLICT /WM2C/* 通用服务器集群名称 协议 主机 端口 CLUSTER1 HTTP webserver1.company.com 9081 webserver2.company.com 9083 CLUSTER2 HTTP host47.company.com 8088 host48.company.com 8088 CLUSTER2-SSL HTTPS host47.company.com 8443 host48.company.com 8443 路由规则名称 虚拟主机 URI 组 操作 ALLTOCLUSTER1 proxy_host 全部 通用服务器集群 - CLUSTER1 ROOMTOCLUSTER2 proxy_host ROOMS 通用服务器集群 - CLUSTER2 ALLTOCLUSTER2 server_host 全部 通用服务器集群 - CLUSTER2 REDIRECTTOCONFLICT default_host CONFLICT 重定向 - http://www.conflict.com 应用程序名 上下文根 Web 模块名称 虚拟主机 Web 模块 URI 模式 App1 /WM1A/ Web 模块 A default_host wm1a.jsp /WM1B/ Web 模块 B default_host wm1b.jsp App2 /WM2C/ Web 模块 C default_host /*, wm2c.jsp /WM2D/ Web 模块 D default_host /*, wm2d.jsp - 示例 1:基本请求
- proxy1 代理接收以下请求:
GET /WM1A/wm1a.jsp HTTP/1.1 Host: host1.company.com
结果是发送 wm1a.jsp 文件作为响应。ALLTOCLUSTER1 路由规则是可能的匹配,但 proxy1 选择 Web 模块 A 作为最佳匹配,原因是其上下文根和 URI 模式 /WM1A/wm1a.jsp 的组合是比 /* 更好的匹配。Web 模块 A 也被选为最佳匹配,原因是其虚拟主机包含 host1.company.com:80 别名,它是比 *:80 通配符别名更具体的匹配。
- 示例 2:使用同一 URI 组和不同虚拟主机的路由规则
- proxy1 代理接收以下请求:
GET /index.html HTTP/1.1 Host: host3.company.com
结果是 proxy1 代理将请求映射到 ALLTOCLUSTER2 路由规则,并且从 CLUSTER2 中的服务器接收到响应。ALLTOCLUSTER1 路由规则是可能的匹配,并且可在 ALLTOCLUSTER2 路由规则不存在的情况下处理该请求。但是,ALLTOCLUSTER2 规则是最佳匹配,原因是其虚拟主机 (server_host) 明确列示了 host3.company.com。
- 示例 3:使用相同虚拟主机和不同 URI 组的路由规则
- proxy1 代理接收以下请求:
GET /kitchen/sink.gif HTTP/1.1 Host: host2.company.com
结果是 proxy1 代理将请求映射到 ROOMSTOCLUSTER2 路由规则,并且 CLUSTER2 集群中的服务器会发送响应。ALLTOCLUSTER1 路由规则是可能的匹配,但 ROOMSTOCLUSTER2 规则才是最佳匹配,原因是其 URI 组包含模式 /kitchen/*,它是请求 URI /kitchen/sink.gif 的最佳匹配。
- 示例 4:路由规则 URI 组与使用同一虚拟主机的 Web 模块 URI 模式发生冲突
- proxy1 代理接收以下请求:
GET /WM2C/index.html HTTP/1.1 Host: host1.company.com
结果不确定。不知道 Web 模块 C 或 REDIRECTTOCONFLICT 路由规则是否处理请求,原因是它们使用相同的虚拟主机并且具有相同 URI 模式。在这种情况下,标识 DWCT0007E 消息将显示在 proxy1 代理的 SystemOut.log 文件中。在此示例中,更改 REDIRECTTOCONFLICT 路由规则以使用另一虚拟主机来解决该问题。
注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.log、SystemErr.log、trace.log 和 activity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用 HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。 - 示例 5:PROXY_HTTP_ADDRESS 地址不在虚拟主机中
- 假定 proxy1 代理地址 PROXY_HTTP_ADDRESS 已更改为 81,而所有其他配置信息保持不变。proxy1 代理接收以下请求:
GET /index.html HTTP/1.1 Host: host1.company.com:81
结果是 proxy1 代理无法处理该请求,因为虚拟主机中未提供 PROXY_HTTP_ADDRESS 地址,并且将向客户机发送回 HTTP 404 响应。