1

URL ( https://xyz.abc.com/cc ) 当负载均衡器看到 /cc 时,它会将请求转发到 WebSeal(反向代理服务器)。

WebSeal 添加/设置(标头主机:xyz.abc.com)并将请求转发到 Apache2(Web 服务器)。在 web seal 中,我们有标准连接 (/cc),它将处理来自 LB 的请求。

当请求到达 Apache2 时,它会丢失 HOST 标头值 (xyz.abc.com) 并将其重置为 Apache2 服务器名称 (xyzapacheweb1)

现在最终请求从 apache2 传递到 Liferay Portal (6.2),它显示 URL (xyzapacheweb1) 而不是 (xyz.abc.com)

Liferay 在 Web 服务器前端时需要 HOST 名称,因此我们必须对 URL 进行硬编码(在属性文件或 apache2 中)

我们希望删除硬编码值并传递动态主机名,以便我们可以为单个应用程序使用多个 URL。

注意:当我们在图片中没有 WebSeal 时,它会保留 HOST 名称。即Apache2显示实际域名(xyz.abc.com)

你能帮我解决这个问题吗?

如果您需要更多信息,请告诉我。

4

2 回答 2

0

我想出了两个解决方案。

  1. 暂时的 :

    • 在来自 WebSeal 的请求中设置自定义标头属性,即域主机名。从 LB -> WebSeal 将主机值设置为此变量。
    • Apache Web 服务器能够检索此值,因为它不是默认请求标头。基于来自 Liferay 的 Apache 网络服务器的域主机名值 Set Header HOST 值。
    • 删除 Liferay 中的 web.server.host.name 属性,它将自动获取 HOST 值(由 Apache 设置)。

      如果 domain-host-name 设置为 xyz.abc.com,则设置 xyz.abc.com

      SetEnvIf 域主机 xyz.abc.com HAVE_MyRequestHeader RequestHeader 设置主机 xyz.abc.com env=HAVE_MyRequestHeader

      如果 domain-host-name 设置为 abc.xyz.com,则设置 abc.xyz.com

      SetEnvIf 域主机 abc.xyz.com HAVE_MyRequestHeader_1 RequestHeader 设置主机 abc.xyz.com env=HAVE_MyRequestHeader_1

这是一个临时解决方案,因为我们必须在 Apache 中硬编码主机名检查。因此,如果有新的 URL,那么您必须在 Apache 中对其进行配置。

  1. 永恒的 :

    • WebSeal 具有虚拟连接概念。其中 webseal 可以配置为扮演虚拟主机角色。

请参考:http ://www-01.ibm.com/support/knowledgecenter/SSPREK_6.1.1/com.ibm.itame.doc_6.1.1/am611_webseal_admin642.htm%23vhost-scenario1?lang=en

如果您遇到类似类型的问题,请告诉我,我可以帮助解决它。

于 2015-10-07T17:12:07.583 回答
0

如果您使用 mod_proxy 从 apache 转发到 tomcat,则缺少该选项

ProxyPreserveHost 开启

这是因为通过http转发。如果您使用 ajp,协议会自动为您处理。

我不确定 webseal 的等效选项,也许 apache 可以帮助您找到它

于 2015-08-27T06:14:07.377 回答