Apache HTTP Server 插件概述
Apache HTTP Server 插件允许将请求从 Apache HTTP Server 代理到 WebLogic Server。该插件允许 WebLogic Server 处理要求使用 WebLogic Server 动态功能的请求,从而增强了 Apache 安装。
该插件专用于某种环境,在这样的环境中,Apache Server 提供静态页,而文档树的另一个部分(最好是由 HTTP Servlet 或 Java Server Page 生成的动态页)会委托给可以在不同的进程中(可能在不同的主机上)进行操作的 WebLogic Server。对于最终用户(浏览器),委托给 WebLogic Server 的 HTTP 请求看似仍然来自同一个来源。
HTTP 隧道是一种技术,它允许 HTTP 请求和响应通过公司的防火墙进行访问。它也可以通过插件操作,提供对 WebLogic Server 服务的非浏览器客户端访问。
Apache HTTP Server 插件充当 Apache HTTP Server 中的 Apache 模块。Apache 模块由 Apache Server 在启动时加载,然后某些 HTTP 请求会委托给它。Apache 模块类似于 HTTP Servlet(除了 Apache 模块是用平台本地代码编写的之外)。
有关支持 Apache HTTP Server 插件的配置的信息,请参阅 http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html。
Apache 2.0 版中的保持活动连接
2.0 版的 Apache HTTP Server 插件通过使用从插件到 WebLogic Server 的可重用连接缓冲池提高了性能。该插件通过对来自同一客户端的后续请求重用缓冲池中的同一连接,在插件和 WebLogic Server 之间实现了 HTTP 1.1 保持活动连接。如果连接处于非活动状态的时间超过 30 秒(或用户定义的时间),则会关闭该连接并将其返回到缓冲池中。可以根据需要禁用此功能。有关详细信息,请参阅“KeepAliveEnabled”。
代理请求
插件根据指定的配置将请求代理到 WebLogic Server。可以根据请求的 URL(或 URL 的一个部分)代理请求。这称为按路径进行代理。还可以根据请求文件的 MIME 类型代理请求。或者可以使用这两种方法的组合。如果请求同时符合这两个条件,则按路径代理请求。同时,可以为每种类型的请求指定其他参数,来定义插件的其他行为。有关详细信息,请参阅配置 Apache HTTP Server 插件。
Apache 2.2
尽管此文档讨论的是 Apache 2.0,您可应用同样的说明来使用具有表 3-2 中所示的库的 Apache 2.2。
证书
Linux、Solaris、Windows 和 HPUX11 平台支持 Apache HTTP Server 插件。有关对特定 Apache 版本的支持信息,请参阅 http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html。
安装 Apache HTTP Server 插件
可将 Apache HTTP Server 插件作为 Apache HTTP Server 安装中的 Apache 模块进行安装,并将其作为动态共享对象(Dynamic Shared Object,简称 DSO)进行链接。
DSO 作为服务器在运行时动态加载的库进行编译,可以在不重新编译 Apache 的情况下安装。
将 Apache HTTP Server 插件作为动态共享对象安装
Apache 插件作为 Solaris、Linux、Windows 和 HPUX11 平台的共享对象 (.so
) 分发。BEA WebLogic 提供因平台、是否要在客户端和 Apache 之间使用 SSL 以及 SSL 加密强度(常规或 128 位 - 只有在安装 128 位版本的 WebLogic Server 时才会安装 128 位版本)而异的共享对象文件版本。
表 3-1 显示包含各种平台的共享对象文件的 WebLogic Server 安装目录(其中 WL_HOME 是 WebLogic 平台的顶级安装目录)。
表 3-2 针对不同版本的 Apache HTTP Server 和不同加密强度来标识 WebLogic Server Apache 插件模块。
表 3-1 插件共享对象文件的位置
|
|
|
WL_HOME/weblogic92/server/plugin/solaris/sparc
|
|
WL_HOME/weblogic92/server/plugin/linux/i686
WL_HOME/weblogic92/server/plugin/linux/ia64
WL_HOME/weblogic92/server/plugin/linux/s390
|
|
WL_HOME\weblogic92\server\plugin\win\32 或
WL_HOME\weblogic92\server\plugin\win\64
|
|
WL_HOME/weblogic92/server/plugin/hpux11/IPF64
WL_HOME/weblogic92/server/plugin/hpux11/PA_RISC
警告: |
如果在 HP-UX11 上运行 Apache 2.0.x Server,请在构建 Apache Server 之前设置下面紧邻的环境变量。由于 HP-UX 上加载链接库的顺序问题,如果在生成之前未将加载顺序预设为环境变量,则可能导致核心转储。设置下列环境变量,然后继续 Apache configure , make 和 make install 步骤(在 Apache HTTP Server 文档中描述了这些步骤,该文档位于 http://httpd.apache.org/docs-2.1/install.html#configure): |
|
从下表中选择适当的插件共享对象版本:
要将 Apache HTTP Server 插件作为动态共享对象安装,请执行下列操作:
使用表 3-1 找到您的平台的共享对象目录。
在表 3-2 中确定您的 Apache 版本的插件共享对象文件。
验证是否已启用 WebLogic Server Apache HTTP Server 插件 mod_so.c
模块。
Apache HTTP Server 插件将作为动态共享对象 (DSO) 安装在 Apache HTTP Server 安装中。Apache 中的 DSO 支持是基于模块 mod_so.c
的,必须在加载 mod_wl_20.so 之前启用该模块。如果使用 Apache 提供的脚本安装 Apache HTTP Server,则 mod_so.c
已被启用。通过执行以下命令,验证是否已启用 mod_so.c
:
(其中 APACHE_HOME
是包含 Apache HTTP Server 安装的目录。)
此命令会列出所有已启用的模块。如果未列出 mod_so.c
,则必须重新生成 Apache HTTP Server,以确保配置下列选项:
将 mod_wl_20.so
文件复制到 APACHE_HOME
\modules
目录中,并将以下行手工添加到 APACHE_HOME
/conf/httpd.conf 文件中,为 Apache 2.0.x 版安装 Apache HTTP Server 插件模块:
为 Apache HTTP Server 插件定义任何其他参数。
Apache HTTP Server 插件可识别 Web 服务器插件的常规参数中列出的参数。要修改 Apache HTTP Server 插件的行为,请在以下块中定义这些参数:
在 Location
块中,定义适用于按路径进行的代理的参数
在 IfModule
块中,定义适用于按 MIME 类型进行的代理的参数
使用下列命令验证 APACHE_HOME
\conf\httpd.conf 文件的语法:
此命令的输出将报告 httpd.conf
文件中的任何错误或返回:
重新启动 Weblogic Server。
启动(或重新启动,如果已更改配置)Apache HTTP Server。
通过打开浏览器并将 URL 设置为 Apache Server +“/weblogic/
”(这将打开默认 WebLogic Server HTML 页、欢迎文件或默认 Servlet,如 WebLogic Server 上对默认 Web 应用程序的定义)来测试插件。例如:
配置 Apache HTTP Server 插件
在 Apache HTTP Server 中安装插件后,需要对 WebLogic Server Apache 插件进行配置并将服务器配置为使用该插件。本部分说明如何编辑 Apache httpd.conf
文件以指示 Apache 服务器为作为 Apache 模块的插件加载 WebLogic Server 库,并指定应由该模块处理的应用程序请求。
编辑 httpd.conf 文件
编辑 Apache HTTP Server 安装中的 httpd.conf
文件以配置 Apache HTTP Server 插件。
本部分说明如何查找和编辑 httpd.conf
文件以实现下列操作:配置服务器以使用 WebLogic Server Apache 插件、按路径或 MIME 类型代理请求、启用 HTTP 隧道,以及使用其他 WebLogic Server 插件参数。
打开 httpd.conf
文件。
该文件位于 APACHE_HOME
\conf\httpd.conf
(其中 APACHE_HOME
是 Apache HTTP Server 安装的根目录)。请参阅设置边界身份验证中的示例 httpd.conf
文件。
确保 Apache 2.0.x 中包含 WebLogic Server 模块,手工将下面的行添加到 httpd.conf
文件中。
添加用于定义以下参数之一的 IfModule
块:
对于非群集 WebLogic Server:
WebLogicHost 和 WebLogicPort 参数。
对于 WebLogic Server 群集:
WebLogicCluster 参数。
例如:
要按 MIME 类型代理请求,请将 MatchExpression
行添加到 IfModule
块中。请注意,如果同时启用按 MIME 类型进行的代理和按路径进行的代理,则按路径进行的代理优先于按 MIME 类型进行的代理。
例如,以下针对非群集 WebLogic Server 的 IfModule
块指定代理具有 MIME 类型 .jsp
的所有文件:
也可以使用多个 MatchExpressions
,例如:
如果要按 MIME 类型将请求代理到 WebLogic Server 群集,请使用 WebLogicCluster
参数,而不使用 WebLogicHost
和 WebLogicPort
参数。例如:
要按路径代理请求,请使用 Location
块和 SetHandler
语句。SetHandler
指定Apache HTTP Server 插件模块的处理程序。例如,以下位置块代理 URL 中包含 /weblogic
的所有请求:
PathTrim 参数指定在将请求传递到 WebLogic Server 实例之前从 URL 的开始部分剪切的字符串(请参阅 Web 服务器插件的常规参数)。
(可选)对 t3 或 IIOP 启用 HTTP 隧道。
要在使用 t3 协议和 weblogic.jar
时启用 HTTP 隧道,请将以下 Location 块添加到 httpd.conf
文件中:
要在使用 IIOP(WebLogic Server 瘦客户端 wlclient.jar
使用的唯一协议)时启用 HTTP 隧道,请将以下 Location 块添加到 httpd.conf
文件中:
为 Apache HTTP Server 插件定义任何其他参数。
Apache HTTP Server 插件可识别 Web 服务器插件的常规参数中列出的参数。要修改 Apache HTTP Server 插件的行为,请在以下块中定义这些参数:
在 Location
块中,定义适用于按路径进行的代理的参数
在 IfModule
块中,定义适用于按 MIME 类型进行的代理的参数
将 weblogic.conf 文件包括在 httpd.conf 文件中
如果希望保留几个单独的配置文件,则可通过在 httpd.conf
文件的 IfModule
块中使用 Apache Include 指令,在名为 weblogic.conf
文件的单独配置文件中定义参数:
weblogic.conf
文件的语法与 httpd.conf
文件的语法相同。
本部分描述如何创建 weblogic.conf
文件,并包括示例 weblogic.conf
文件。
创建 weblogic.conf 文件
构造 weblogic.conf
文件时,请注意下列事项:
如果要在 Apache HTTP Server 插件和 WebLogic Server 之间使用 SSL,则无法在通过 Apache Include
指令访问的文件(与 weblogic.conf
文件一样)中定义参数。
在新行上输入每一个参数。请不要在参数和参数值之间放置“=”。例如:
如果请求既与 IfModule
块中的 MatchExpression
中指定的 MIME 类型匹配,又与 Location
块中指定的路径匹配,则 Location
块指定的行为优先。
如果要定义 CookieName
参数,则必须在 IfModule
块中定义它。
如果使用 Apache HTTP Server <VirtualHost>
块,则必须在 <VirtualHost>
块中包括虚拟主机的所有配置参数(例如 MatchExpression
)(请参阅 Apache Virtual Host documentation)。
如果希望只为环境中的所有虚拟主机配置一个日志文件,则可以使用全局属性来实现。可以在 <IfModule> 标记中一次指定 Debug、WLLogFile 和 WLTempDir 属性,而不是在每个虚拟主机中指定相同的 Debug、WLLogFile 和 WLTempDir 属性。
示例 httpd.conf 文件:
与 /jurl/* 匹配的所有请求的“调试级别”都将设置为“ALL”,并会将日志消息记录到 c:/tmp/global_proxy.log 文件中。与 /web/* 匹配的所有请求的“调试级别”都将设置为“OFF”,并且不会记录任何日志消息。与 /foo/* 匹配的所有请求的“调试级别”都将设置为“ERR”,并会将日志消息记录到 c:/tmp/foo_proxy.log 文件中。
BEA 建议使用 MatchExpression
语句,而不使用 <files>
块。
示例 weblogic.conf 配置文件
以下示例 weblogic.conf
文件可以用作模板,您可以对其进行修改以满足您的环境和服务器的需要。以 # 开始的行是注释。
使用 WebLogic 群集的示例
使用多 WebLogic 群集的示例
在此示例中,用于表示文件名模式的 MatchExpression
参数语法、HTTP 请求应转发到的 WebLogic Server 主机以及各种其他参数如下所示:
下面的第一个 MatchExpression
参数指定文件名模式 *.jsp
,然后命名单个 WebLogicHost
。管道符号后的 paramName=value
组合指定 WebLogic Server 用于监听连接请求的端口,同时激活“Debug”选项。第二个 MatchExpression
指定文件名模式 *.http
并标识 WebLogicCluster
主机及其端口。管道符号后的 paramName=value
组合指定群集的错误页。
不使用 WebLogic 群集的示例
配置多个基于名称的虚拟主机的示例
必须为“ServerName”定义唯一值,否则某些插件参数将不能按预期工作。
Apache HTTP Server httpd.conf 文件的模板
本部分包含 Apache 2.0 的示例 httpd.conf
文件。您可将此示例用作模板,并对其进行修改以满足您的环境和服务器的需要。以 # 开始的行是注释。
请注意,Apache HTTP Server 不区分大小写。
设置边界身份验证
使用边界身份验证可确保通过 Apache 插件访问的 WebLogic Server 应用程序的安全。
WebLogic 标识声明提供程序对来自访问 WebLogic Server 应用程序的外部系统的标记进行身份验证,包括对通过 Apache HTTP Server 插件访问 WebLogic Server 应用程序的用户进行身份验证。按照下列步骤,创建确保插件安全的标识声明提供程序:
在 WebLogic Server 应用程序上创建一个自定义标识声明提供程序。请参阅“开发 WebLogic Server 的安全提供程序”中的如何开发自定义标识声明提供程序。
配置自定义标识声明提供程序以支持证书标记类型并使证书成为活动标记类型。请参阅“开发 WebLogic Server 的安全提供程序”中的如何创建新标记类型。
在 Web 应用程序的 web.xml
部署描述符文件中将 clientCertProxy
设置为 True(如果使用群集,也可以选择在管理控制台中,依次选择“群集”-->“配置”-->“常规”选项卡,在该选项卡上对整个群集将 Client Cert Proxy Enabled
特性设置为 True)。clientCertProxy
特性可与第三方代理服务器(如负载平衡器或 SSL 加速器)一起使用以启用 2 向 SSL 身份验证。有关 clientCertProxy
特性的详细信息,请参阅“开发 WebLogic Server 的 Web 应用程序、Servlet 和 JSP”中的 context-param。
设置了 clientCertProxy
之后,请务必使用连接筛选器来确保 WebLogic Server 仅接受来自运行 Apache 插件的计算机的连接。请参阅“WebLogic 安全性编程”中的使用网络连接筛选器。
Web 服务器插件需要可信证书颁发机构文件才能在插件和 WebLogic Server 之间使用 SSL。使用 Sun Microsystems 的 Keytool 实用工具可从驻留在 BEA_HOME/weblogic92/server/lib 中的 DemoTrust.jks 密钥库文件中导出可信证书颁发机构文件。
例如,要解压缩 wlsdemoca 文件,可使用如下命令:
keytool -export -file trustedcafile.der -keystore DemoTrust.jks -alias wlsdemoca
更改别名以从密钥库中获得不同的可信 CA 文件。
要查看密钥库中的所有可信 CA 文件,请使用如下命令:
keytool -list -keystore DemoTrust.jks
如果提示输入密码,请按 Enter 键。
要将证书颁发机构文件转换为 pem 格式,请使用如下命令:java utils.der2pem trustedcafile.der
请参阅“开发 WebLogic Server 的安全提供程序”中的标识声明提供程序。
将 SSL 与 Apache 插件一起使用
可以使用安全套接口层(Secure Socket Layer,简称 SSL)协议保护 Apache HTTP Server 插件和 WebLogic Server 之间的连接。SSL 协议对 Apache HTTP Server 插件和 WebLogic Server 之间传递的数据提供机密性和完整性。
Apache HTTP Server 插件不使用 HTTP 请求中(通常由浏览器)指定的传输协议(http
或 https
)来确定是否使用 SSL 协议来保护 Apache HTTP Server 插件和 WebLogic Server 之间的连接。
虽然可以在 HTTP 客户端和 Apache HTTP Server 之间使用双向 SSL,但请注意,在 Apache HTTP Server 和 WebLogic Server 之间使用的是单向 SSL。
配置 Apache HTTP Server 插件和 WebLogic Server 之间的 SSL
要在 Apache HTTP Server 插件和 WebLogic Server 之间使用 SSL 协议,请执行下列操作:
针对 SSL 配置 WebLogic Server。有关详细信息,请参阅配置 SSL。
配置 WebLogic Server SSL 监听端口。有关详细信息,请参阅配置 SSL。
在 Apache Server 中,将 httpd.conf
文件中的 WebLogicPort
参数设置为步骤 2 中配置的 WebLogic Server SSL 监听端口。
在 Apache Server 中,将 httpd.conf
文件中的 SecureProxy
参数设置为 ON
。
在 httpd.conf
文件中设置可定义有关 SSL 连接的信息的任何其他参数。有关可以为插件配置的 SSL 参数的完整列表,请参阅 Web 服务器插件的 SSL 参数。
SSL-Apache 配置的相关问题
配置 Apache 插件以使用 SSL 时会出现以下已知问题:
连接错误和群集故障转移
当 Apache HTTP Server 插件尝试连接到 WebLogic Server 时,插件使用几个配置参数确定等待连接到 WebLogic Server 主机的时间长度,以及建立连接后插件等待响应的时间长度。如果插件无法连接或未收到响应,则插件将尝试连接到群集中的其他 WebLogic Server 实例并向其发送请求。如果连接失败或者没有来自群集中任何 WebLogic Server 的响应,则会发送错误消息。
图 3-1 说明插件如何处理故障转移。
连接失败的可能原因
WebLogic Server 主机无法响应连接请求可能表明下列问题:
所有 WebLogic Server 实例都无法响应可能表明下列问题:
WebLogic Server 未运行或不可用
服务器挂起
数据库问题
应用程序特定故障
调整以减少 Connection_Refused 错误
在有负载时,Apache 插件可能收到来自后端 WebLogic Server 实例的 CONNECTION_REFUSED 错误。可根据以下调整提示减少 CONNECTION_REFUSED 错误:
单个非群集 WebLogic Server 的故障转移
如果仅运行一个 WebLogic Server 实例,则插件仅尝试连接到使用 WebLogicHost 参数定义的服务器。如果尝试失败,则会返回 HTTP 503
错误消息。插件继续尝试连接到该同一 WebLogic Server 实例,直到超出 ConnectTimeoutSecs。
动态服务器列表
使用 httpd.conf
或 weblogic.conf
文件中的 WebLogicCluster
参数指定 WebLogic Server 列表时,插件将该列表用作在群集成员之间进行负载平衡的起点。将第一个请求路由到这些服务器之一后,会返回一个动态服务器列表,其中包含群集中已更新的服务器列表。更新的列表添加群集中的任何新服务器并删除不再属于群集或无法响应请求的任何服务器。当群集中发生更改时,会使用 HTTP 响应自动更新此列表。
故障转移、Cookie 和 HTTP 会话
当请求包含存储在 Cookie 或 POST 数据中的会话信息或包含编码到 URL 中的会话信息时,会话 ID 会包含对最初建立会话的特定服务器实例(称为主服务器)的引用,并包含对复制原始会话的其他服务器(称为次级服务器)的引用。包含 Cookie 的请求会尝试连接到主服务器。如果该尝试失败,则会将该请求路由到次级服务器。如果主服务器和次级服务器均故障,则会话将丢失,插件将尝试与动态群集列表中的其他服务器建立新的连接。请参阅图 3-1 连接故障转移。
注意: |
如果 POST 数据大于 64K,插件将不会对 POST 数据进行解析以获取会话 ID。因此,如果您将会话 ID 存储在 POST 数据中,插件无法将请求路由到正确的主服务器或次级服务器,从而可能导致会话数据的丢失。 |
在上图中,红圈中允许的最大重试次数等于 ConnectTimeoutSecs 除以 ConnectRetrySecs
。
安装和配置 Apache HTTP Server 插件