使用虚拟主机
如果要隔离应用程序与处理它们的端点,那么可使用虚拟主机。
有关在 V 21.0.0.10 和更高版本中使用虚拟主机的文档可在 Open Liberty Web 站点上获取。
单个应用程序服务器通常响应来自多个不同主机和端口配置的请求。 发生此情况可能有多种原因,例如,它在具有不同名称的多个网络接口上运行,或者它路由至/自 HTTP Server、代理或负载均衡器。 在此情况下,您可能想要控制可从特定主机联系的应用程序。 虚拟主机提供此功能。 它针对所配置的主机别名列表与所请求主机名和端口号(通过 HTTP 主机头确定)匹配。
在 WebSphere® Application Server Liberty中,缺省配置已足够。 缺省虚拟主机 (default_host) 与来自任何入局主机和端口组合的请求匹配,并将它们转发至缺省应用程序容器。
- virtualHost 配置元素标识值。
- hostAlias 子元素配置。
- allowFromEndpoint 子元素配置(如果已使用)。
- WAR 的 ibm-web-bnd.xml 或 ibm-web-bnd.xmi 文件中的虚拟主机配置。
- httpEndpoint 的主机属性值。
- httpEndpoint 的标识属性值。
使两个应用程序相互隔离
<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 文件,其中 ibm-web-bnd.xml 文件指定了 <virtual-host name=" application-1 "/> ,则只能在 your_host_name:9080/app1_context_root 访问此应用程序。
如果 App2 (WAR)的 ibm-web-bnd.xml 文件指定了 <virtual-host name=" application-2 "/> ,则只能通过 localhost:9081/app2_context_root 访问该应用程序。
如果所部署的第三个应用程序未指定特定虚拟主机,那么在此配置中,仅当它是包含 HOST 头(该头指定另一端口)的代理请求时,该应用程序才是可访问的。 例如,如果在端口 80 上对代理发出了请求,那么该端口不会列示在任何 hostAlias 规范中,所以该请求应路由至 default_host 虚拟主机。
根据所请求主机或端口隔离应用程序
- 决定虚拟主机名并更新应用程序以引用新(非缺省)主机。 将 virtual-host 元素添加至 WAR 的
ibm-web-bnd.xml 或 ibm-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> - 将 virtualHost 元素添加至 server.xml 文件。 该名称必须与应用程序中指定的内容匹配,并且必须定义路由至新虚拟主机的 hostAliases。注: 要匹配的主机名和端口是用户最初请求的主机名和端口,该主机名和端口可能与 Liberty 正在使用的主机和端口匹配,也可能不匹配。 以下示例演示已添加至 server.xml 文件的虚拟主机元素。
<virtualHost id="proxiedRequests"> <hostAlias>external.host.name:80</hostAlias> <hostAlias>external.host.name:443</hostAlias> </virtualHost>如果请求来自代理,那么此配置将对代理的主机和端口发送的任何请求单独路由至“proxiedRequests”虚拟主机。
根据发起端点限制访问
- 定义另一 httpEndpoint。 以下示例演示另一 httpEndpoint。
<httpEndpoint id="localHostOnly" host="localhost" httpPort="9081" httpsPort="9444"/>此 HTTP 端点指定 host="localhost",意味着仅在 localhost 接口上展示端口 9081 和 9444。
- 更新 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 的任何其他请求被拒绝。 例如,来自 defaultHttpEndpoint 并具有引用 localhost:9081 的 Host 头的请求被拒绝。
- proxiedRequests 虚拟主机现在接受向端口 9080 或 9443(它们是 defaultHttpEndpoint 使用的缺省端口)发出的任何请求,以及其 Host 头引用代理中的外部主机名和端口 80 或 443 的请求。