使用虚拟主机

如果要隔离应用程序与处理它们的端点,那么可使用虚拟主机。

单个应用程序服务器通常响应来自多个不同主机和端口配置的请求。发生此情况可能有多种原因,例如,它在具有不同名称的多个网络接口上运行,或者它路由至/自 HTTP Server、代理或负载均衡器。在此情况下,您可能想要控制可从特定主机联系的应用程序。虚拟主机提供此功能。它针对所配置的主机别名列表与所请求主机名和端口号(通过 HTTP 主机头确定)匹配。

在 WebSphere Application Server Liberty 中,缺省配置已经够用。缺省虚拟主机 (default_host) 与来自任何入局主机和端口组合的请求匹配,并将它们转发至缺省应用程序容器。

以下列表演示您配置虚拟主机时的关键配置元素。
  • virtualHost 配置元素标识值。
  • hostAlias 子元素配置。
  • allowFromEndpoint 子元素配置(如果已使用)。
  • WAR 的 ibm-web-bnd.xmlibm-web-bnd.xmi 文件中的虚拟主机配置。
  • httpEndpoint 的主机属性值。
  • httpEndpoint 的标识属性值。

使两个应用程序相互隔离

以下示例演示虚拟主管的某个较常用用法,以帮助您了解某种必需配置。此示例显示如何配置在不同端口上运行的两个应用程序。此示例还进一步演示了仅在 localhost 接口上可用的一个应用程序。
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" />
<httpEndpoint id="alternateEndpoint" host="*" httpPort="9081" />

<virtualHost id="application-1">
    <hostAlias>your_host_name:9080</hostAlias>
</virtualHost>

<virtualHost id="application-2">
    <hostAlias>localhost:9081</hostAlias>
</virtualHost>

<enterpriseApplication location="myApp.ear" name="App1"/>
<webApplication location="myApp2.war" name="App2" />

defaultHttpEndpoint 展示端口 9080 上的所有接口,alternateEndpoint 展示端口 9081 上的所有接口。

如果 App1 的 WAR 文件带有指定 <virtual-host name="application-1"/> 的 ibm-web-bnd.xml 文件,那么只能在 your_host_name:9080/app1_context_root 中访问此应用程序。

如果 App2(它是 WAR)具有指定 <virtual-host name="application-2"/> 的 ibm-web-bnd.xml 文件,那么只能在 localhost:9081/app2_context_root 中访问此应用程序。

如果所部署的第三个应用程序未指定特定虚拟主机,那么在此配置中,仅当它是包含 HOST 头(该头指定另一端口)的代理请求时,该应用程序才是可访问的。例如,如果在端口 80 上对代理发出了请求,那么该端口不会列示在任何 hostAlias 规范中,所以该请求应路由至 default_host 虚拟主机。

根据所请求主机或端口隔离应用程序

还将对 JMX 通信使用 Liberty 中的缺省虚拟主机。如果您希望将 JMX 通信与应用程序流量隔离,那么您需要完成以下步骤。
  1. 决定虚拟主机名并更新应用程序以引用新(非缺省)主机。将 virtual-host 元素添加至 WAR 的 ibm-web-bnd.xmlibm-web-bnd.xmi 文件。
    <?xml version="1.0" encoding="UTF-8"?>
    <web-bnd
        xmlns="http://websphere.ibm.com/xml/ns/javaee"
        	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://websphere.ibm.com/xmk/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
        version="1.0" />
    
        <virtual-host name="proxiedRequests" />
    
    </web-bnd>
  2. 将 virtualHost 元素添加至 server.xml 文件。该名称必须与应用程序中指定的内容匹配,并且必须定义路由至新虚拟主机的 hostAliases。
    注: 主机名和要匹配的端口是用户最初请求的项,它们可能与 Liberty 要使用的主机和端口匹配,也可能不匹配。以下示例演示已添加至 server.xml 文件的虚拟主机元素。
    <virtualHost id="proxiedRequests">
        <hostAlias>external.host.name:80</hostAlias>
        <hostAlias>external.host.name:443</hostAlias>
    </virtualHost>

    如果请求来自代理,那么此配置将对代理的主机和端口发送的任何请求单独路由至“proxiedRequests”虚拟主机。

根据发起端点限制访问

如果要将访问范围限制为使用 defaultHttpEndpoint 的缺省/系统应用程序,那么需要执行更多步骤。
  1. 定义另一 httpEndpoint。以下示例演示另一 httpEndpoint。
    <httpEndpoint id="localHostOnly" host="localhost" httpPort="9081" httpsPort="9444"/>

    此 HTTP 端点指定 host="localhost",意味着仅在 localhost 接口上展示端口 9081 和 9444。

  2. 更新 virtualHost 定义以指定 allowFromEndpointRef 属性。如果指定了此属性,那么 virtualHost 仅接受来自指定端点的请求。例如:
    <virtualHost id="default_host" allowFromEndpointRef="localHostOnly">
        <hostAlias>*:9081</hostAlias>
        <hostAlias>*:9444</hostAlias>
    </virtualHost>
    
    </virtualHost id="proxiedRequests">
        <hostAlias>*:9080</hostAlias>
        <hostAlias>*:9443</hostAlias>
        <hostAlias>external.host.name:80</hostAlias>
        <hostAlias>external.host.name:443</hostAlias>
    </virtualHost>
    通过此配置:
    • default_host 虚拟主机现在仅接受发送至 localhost:9081 和 localhost:9444 并且源自 ocalHostOnly 端点的请求。指向端口 9081 和 9444 的任何其他请求被拒绝。例如,来自 defaultHttpEndpoing 并具有引用 localhost:9081 的 Host 头的请求被拒绝。
    • proxiedRequests 虚拟主机现在接受向端口 9080 或 9443(它们是 defaultHttpEndpoint 使用的缺省端口)发出的任何请求,以及其 Host 头引用代理中的外部主机名和端口 80 或 443 的请求。

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



时间戳记图标 最近一次更新时间: Monday, 5 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=cwlp_virtual_hosts
文件名:cwlp_virtual_hosts.html