虚拟主机

虚拟主机是使单一主机能够模拟多台主机的配置实体。它维护它所处理的多用途因特网邮件扩展 (MIME) 类型列表。可以使一个虚拟主机与一个或多个 Web 模块相关联,但只能使每个 Web 模块与一个虚拟主机相关联。即使多个虚拟主机共享同一物理机器,与一个虚拟主机相关联的资源也不能与另一虚拟主机所关联的资源共享数据。

每个虚拟主机有一个逻辑名和一张由一个或多个 DNS 别名组成的列表,通过 DNS 别名可识别虚拟主机。DNS 别名是用于请求 servlet(如 yourHostName:80)的 TCP/IP 主机名和端口号。未指定端口号时,采用端口号 80。

虚拟主机配置使用通配符条目和端口作为它的虚拟主机条目。

针对 Servlet、JavaServer Pages 文件或相关资源的客户机请求包含对该资源唯一的 DNS 别名和统一资源指示符 (URI)。接收到针对 servlet、JavaServer Pages 文件或相关资源的客户机请求时,DNS 别名将与所有已知虚拟主机组列表进行比较,以查找正确的虚拟主机;并且 URI 将与所有已知 URI 组列表进行比较,以查找正确的 URI 组。如果找到正确的虚拟主机组和 URI 组,那么会将请求发送至相应的服务器组以进行处理,并且会将响应返回给浏览器。如果找不到匹配的虚拟主机组或 URI 组,就会将错误返回给浏览器。

虚拟主机与特定节点(机器)无关。它是一种配置,而不是真的对象,所以您可以创建它,但不能将它启动或停止。缺省虚拟主机 default_host 是在第一次启动应用程序服务器时自动配置的。除非您特别想将同一节点(物理机器)上的资源互相隔离,否则有了缺省主机就可能不必再加任何虚拟主机。

缺省虚拟主机的 DNS 别名将配置为 *:80*:9080,其中端口 80 是 HTTP Server 端口,而端口 9080 是缺省服务器的 HTTP 传输的端口。缺省虚拟主机包括公共别名,例如机器的 IP 地址、短主机名和标准主机名称。在这些别名中,其中一个别名组成用于访问资源(例如 servlet)的路径的第一部分。例如,将在 http://localhost:80/myServlet 请求中使用别名 localhost:80

如果将 localhost 添加到虚拟主机,就会将 localhost 机器的主机名和 IP 地址添加到别名表中。这将使远程用户能够访问管理控制台。

如果要使用除缺省端口以外的其他端口,那么可以使用管理控制台来添加或更改 DNS 别名。如果更改了 DNS 别名,那么必须重新生成 Web 服务器插件配置。可以使用管理控制台来重新生成插件。

最佳实践 最佳实践: 在下列情况下,您可能需要添加其他别名或更改缺省别名:
  • HTTP Server 实例在 80 端口以外的端口上运行。将正确的端口号添加至每个别名。例如,将 yourhost 更改为 yourhost:8000
  • 需要发出使用安全套接字层 (SSL) 的 HTTPS 请求。要发出 HTTPS 请求,必须对每个别名添加端口 443。端口 443 是用于 SSL 请求的缺省端口。
  • Web 服务器实例正在端口 443 以外的某一端口上侦听 SSL 请求。在这种情况下,必须对每个别名添加该端口号。
  • 需要对应用程序服务器使用缺省端口(9080)以外的某一端口。
  • 需要使用其他未列出的别名。
bprac

在请求资源时,产品尝试将此请求映射到已定义的虚拟主机别名。虚拟主机的 http://host:port/ 部分是不区分大小写的,但其后的 URL 是区分大小写的。URL 的匹配必须是字母数字精确匹配。不同的端口号将视为不同的别名。

例如,请求 http://www.myhost.com/myservlet 成功映射至 http://WWW.MYHOST.COM/myservlet,但不映射至 http://WWW.MYHOST.COM/MYSERVLETWww.Myhost.Com/Myservlet。在后面两种情况下,这些映射将会因为区分大小写而失败。请求 http://www.myhost.com/myservlet 不能成功映射至 http://myhost/myservlethttp://myhost:9876/myservlet。这些映射因包含的字母数字不正确而失败。

您可以根据端口使用别名的通配符条目,并指定特定端口上的所有有效主机名和地址组合映射至特定虚拟主机。

如果您用来请求资源的别名无法映射至定义的虚拟主机的别名,那么会在用于发出请求的浏览器中接收到 404 错误。同时将出现一条消息,表明无法找到虚拟主机。

虚拟主机出现两组关联。应用程序部署将应用程序与虚拟主机相关联。虚拟主机定义将机器和 HTTP 传输的网络地址或应用程序服务器的 Web 服务器端口分配与虚拟主机相关联。查看 snoop Servlet 的 Web 客户机请求的流,例如,发生以下操作:
  1. Web 客户机请求 snoop servlet 的 Web 地址为:http://www.some_host.some_company.com:9080/snoop
  2. some_host 机器将 9080 端口分配给独立应用程序服务器 server1。
  3. server1 查找虚拟主机分配以确定分配给别名 some_host.some_company.com:9080 的虚拟主机。
  4. 应用程序服务器发现此 DNS 字符串不存在显式别名。但是,为端口号为 9080 的主机名分配的通配符 * 确实存在。这是一个匹配。定义该匹配的虚拟主机是 default_host。
  5. 应用程序服务器查看部署在 default_host 上的应用程序,并找出 snoop servlet。
  6. 应用程序服务器为 Web 客户机提供应用程序,并且请求方可以使用 snoop Servlet。
表 1. 虚拟机的别名. 对于一个虚拟主机,您可以有任何数量的别名。您甚至可以有重叠别名,如:
虚拟主机 别名 端口
default_host * 9080
localhost 9080
my_machine 9080
my_machine.my_company.com 9080
localhost 80

Application Server 使用在 Web 客户机地址中指定的显式地址来寻找匹配。但是,它可能在匹配显式地址之前将匹配解析到与模式匹配的任何其他别名。首先在别名列表中简单地定义别名并不能保证产品寻找匹配别名时的搜索顺序。

如果您对两台不同的虚拟主机使用同一别名,那么可能发生问题。例如,假设您在 default_host 上安装了缺省应用程序和 snoop servlet。您还有另一台名为 admin_host 的虚拟主机。但是,您尚未在 admin_host 上安装缺省应用程序或 snoop servlet。

表 2. 虚拟主机具有重叠的别名. 假设由于您碰巧为 admin_host 定义了端口 9080 而不是端口 9060,因此为两台虚拟主机定义了重叠的别名:
虚拟主机 别名 端口
default_host * 9080
localhost 9080
admin_host * 9060
my_machine.com 9080

假设 Web 客户机请求得到 http://my_machine.com:9080/snoop

如果应用程序服务器与针对 *:9080 的请求相匹配,那么会从 default_host 中提供应用程序。如果应用程序服务器与针对 my.machine.com:9080 的请求相匹配,那么表示找不到该应用程序。在发出该请求的浏览器中发生 404 错误。同时将出现一条消息,表明无法找到虚拟主机。

该问题产生的原因是无法在具有匹配别名的第一个虚拟主机中找到请求的应用程序。编码别名的正确方法是让入局请求中的别名只匹配所有虚拟主机定义中的一台虚拟主机。如果 URL 可以匹配多台虚拟主机,那么您可以看到刚才描述的问题。


指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=ccws_vhost
文件名:ccws_vhost.html