Apache HTTP Server 插g允许请求从 Apache HTTP Server 代理?WebLogic Server。该插g允许 WebLogic Server 处理要求使用 WebLogic Server 动态功能的hQ从而增Z(jin) Apache 安装?
该插件专用于某种环境Q在q样的环境中QApache Server 提供?rn)态页Q而文档树(wi)的另一个部分(最好是?HTTP Servlet ?Java Server Page 生成的动态页Q会(x)委托l可以在不同的进E中Q可能在不同的主ZQ进行操作的 WebLogic Server。对于最l用P览器)(j)Q委托给 WebLogic Server ?HTTP h看似仍然来自同一个来源?
HTTP 隧道是一U技术,它允?HTTP h和响应通过公司的防火墙q行讉K。它也可以通过插g操作Q提供对 WebLogic Server 服务的非览器客L(fng)讉K?
Apache HTTP Server 插g充当 Apache HTTP Server 中的 Apache 模块。Apache 模块?Apache Server 在启动时加蝲Q然后某?HTTP h?x)委托给它。Apache 模块cM?HTTP ServletQ除?Apache 模块是用q_本地代码~写的之外)(j)?
有关支持 Apache HTTP Server 插g的配|的信息Q请参阅 http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html?
2.0 版的 Apache HTTP Server 插g通过使用从插件到 WebLogic Server 的可重用q接~冲池提高了(jin)性能。该插g通过Ҏ(gu)自同一客户端的后箋h重用~冲池中的同一q接Q在插g?WebLogic Server 之间实现?HTTP 1.1 保持zdq接。如果连接处于非zd状态的旉过 30 U(或用户定义的旉Q,则会(x)关闭该连接ƈ其q回到缓冲池中。可以根据需要禁用此功能。有兌l信息,请参?#8220;KeepAliveEnabled”?
插gҎ(gu)指定的配|将h代理?WebLogic Server。可以根据请求的 URLQ或 URL 的一个部分)(j)代理h。这UCؓ(f)按\径进行代理?em class="cEmphasis">q可以根据请求文件的 MIME cd代理h。或者可以用这两种Ҏ(gu)的组合。如果请求同时符合这两个条gQ则按\径代理请求。同Ӟ可以为每U类型的h指定其他参数Q来定义插g的其他行为。有兌l信息,请参?a >配置 Apache HTTP Server 插g?
管此文档讨论的?Apache 2.0Q?zhn)可应用同L(fng)说明来用具?a >?nbsp;3-2 中所C的库的 Apache 2.2?
Linux、Solaris、Windows ?HPUX11 q_支持 Apache HTTP Server 插g。有兛_特定 Apache 版本的支持信息,请参?http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html?
可将 Apache HTTP Server 插g作ؓ(f) Apache HTTP Server 安装中的 Apache 模块q行安装Qƈ其作ؓ(f)动态共享对象(Dynamic Shared ObjectQ简U?DSOQ进行链接?
DSO 作ؓ(f)服务器在q行时动态加载的库进行编译,可以在不重新~译 Apache 的情况下安装?
Apache 插g作ؓ(f) Solaris、Linux、Windows ?HPUX11 q_的共享对?(.so
) 分发。BEA WebLogic 提供因^台、是否要在客L(fng)?Apache 之间使用 SSL 以及(qing) SSL 加密强度Q常规或 128 ?- 只有在安?128 位版本的 WebLogic Server 时才?x)安?128 位版本)(j)而异的共享对象文件版本?
?nbsp;3-1 昄包含各种q_的共享对象文件的 WebLogic Server 安装目录Q其?WL_HOME ?WebLogic q_的顶U安装目录)(j)?
?nbsp;3-2 针对不同版本?Apache HTTP Server 和不同加密强度来标识 WebLogic Server Apache 插g模块?
export EXTRA_LDFLAGS="-lstd -lstream -lCsup -lm -lcl -ldld -lpthread" |
要将 Apache HTTP Server 插g作ؓ(f)动态共享对象安装,h行下列操作:(x)
mod_so.c
模块?
Apache HTTP Server 插g作为动态共享对?(DSO) 安装?Apache HTTP Server 安装中。Apache 中的 DSO 支持是基于模?mod_so.c
的,必须在加?mod_wl_20.so 之前启用该模块。如果?Apache 提供的脚本安?Apache HTTP ServerQ则 mod_so.c
已被启用。通过执行以下命o(h)Q验证是否已启用 mod_so.c
Q?
APACHE_HOME
\bin\apache -l
Q其?APACHE_HOME
是包?Apache HTTP Server 安装的目录。)(j)
此命令会(x)列出所有已启用的模块。如果未列出 mod_so.c
Q则必须重新生成 Apache HTTP ServerQ以保配置下列选项Q?
...
--enable-module=so
--enable-rule=SHARED_CORE
...
请参阅位? http://httpd.apache.org/docs/2.0/dso.html ?#8220;Apache 2.0 Shared Object (DSO) Support”?/pre>
mod_wl_20.so
文g复制?APACHE_HOME
\modules
目录中,q将以下行手工添加到 APACHE_HOME
/conf/httpd.conf 文g中,?Apache 2.0.x 版安?Apache HTTP Server 插g模块Q?LoadModule weblogic_module modules/mod_wl_20.so
Apache HTTP Server 插g可识?Web 服务器插件的常规参数中列出的参数。要修改 Apache HTTP Server 插g的行为,请在以下块中定义q些参数Q?
APACHE_HOME
\conf\httpd.conf 文g的语法:(x) APACHE_HOME\bin\apachectl -t
此命令的输出报?httpd.conf
文g中的M错误或返回:(x)
Syntax OK
/weblogic/
”Q这打开默认 WebLogic Server HTML c(din)欢q文件或默认 ServletQ如 WebLogic Server 上对默认 Web 应用E序的定义)(j)来测试插件。例如:(x) http://myApacheserver.com/weblogic/
?Apache HTTP Server 中安装插件后Q需要对 WebLogic Server Apache 插gq行配置q将服务器配|ؓ(f)使用该插件。本部分说明如何~辑 Apache httpd.conf
文g以指C?Apache 服务器ؓ(f)作ؓ(f) Apache 模块的插件加?WebLogic Server 库,q指定应p模块处理的应用程序请求?
~辑 Apache HTTP Server 安装中的 httpd.conf
文g以配|?Apache HTTP Server 插g?
本部分说明如何查扑֒~辑 httpd.conf
文g以实C列操作:(x)配置服务器以使用 WebLogic Server Apache 插g、按路径?MIME cd代理h、启?HTTP 隧道Q以?qing)用其?WebLogic Server 插g参数?
httpd.conf
文g?
该文件位?APACHE_HOME
\conf\httpd.conf
Q其?APACHE_HOME
?Apache HTTP Server 安装的根目录Q。请参阅讄边界w䆾验证中的CZ httpd.conf
文g?
httpd.conf
文g中?LoadModule weblogic_module modules\mod_wl_20.so
IfModule
块:(x)
WebLogicHost ?WebLogicPort 参数?
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001
</IfModule>
MatchExpression
行添加到 IfModule
块中。请注意Q如果同时启用按 MIME cdq行的代理和按\径进行的代理Q则按\径进行的代理优先于按 MIME cdq行的代理?
例如Q以下针寚w集 WebLogic Server ?IfModule
块指定代理具?MIME cd .jsp
的所有文Ӟ(x)
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001
MatchExpression *.jsp
</IfModule>
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001
MatchExpression *.jsp
MatchExpression *.xyz
</IfModule>
如果要按 MIME cd请求代理到 WebLogic Server 集Q请使用 WebLogicCluster
参数Q而不使用 WebLogicHost
?WebLogicPort
参数。例如:(x)
<IfModule mod_weblogic.c>
WebLogicCluster w1s1.com:7001,w1s2.com:7001,w1s3.com:7001
MatchExpression *.jsp
MatchExpression *.xyz
</IfModule>
Location
块和 SetHandler
语句?code class="cCode" style="font-weight: normal">SetHandler 指定Apache HTTP Server 插g模块的处理程序。例如,以下位置块代?URL 中包?/weblogic
的所有请求:(x) <Location /weblogic>
SetHandler weblogic-handler
PathTrim /weblogic
</Location>
PathTrim 参数指定在将h传递到 WebLogic Server 实例之前?URL 的开始部分剪切的字符Ԍ请参?Web 服务器插件的常规参数Q?
Apache HTTP Server 插g可识?Web 服务器插件的常规参数中列出的参数?/span>要修?Apache HTTP Server 插g的行为,请在以下块中定义q些参数Q?
如果希望保留几个单独的配|文Ӟ则可通过?httpd.conf
文g?IfModule
块中使用 Apache Include 指o(h)Q在名ؓ(f) weblogic.conf
文g的单独配|文件中定义参数Q?
<IfModule mod_weblogic.c>
# Config file for WebLogic Server that defines the parameters
Include conf/weblogic.conf
</IfModule>
weblogic.conf
文g的语法与 httpd.conf
文g的语法相同?
本部分描q如何创?weblogic.conf
文gQƈ包括CZ weblogic.conf
文g?
Include
指o(h)讉K的文Ӟ?weblogic.conf
文g一P(j)中定义参数?
PARAM_1 value1
PARAM_2 value2
PARAM_3 value3
IfModule
块中?MatchExpression
中指定的 MIME cd匚wQ又?Location
块中指定的\径匹配,?Location
块指定的行ؓ(f)优先?
CookieName
参数Q则必须?IfModule
块中定义它?
<VirtualHost>
块,则必d <VirtualHost>
块中包括虚拟L的所有配|参敎ͼ例如 MatchExpression
Q(请参?Apache Virtual Host documentationQ?
<IfModule mod_weblogic.c>
WebLogicCluster agarwalp02:8005,agarwalp02:8006
Debug ON
WLLogFile c:/tmp/global_proxy.log
WLTempDir "c:/myTemp"
DebugConfigInfo On
KeepAliveEnabled ON
KeepAliveSecs 15
</IfModule>
<Location /jurl>
SetHandler weblogic-handler
WebLogicCluster agarwalp01:7001
</Location>
<Location /web>
SetHandler weblogic-handler
PathTrim /web
Debug OFF
WLLogFile c:/tmp/web_log.log
</Location>
<Location /foo>
SetHandler weblogic-handler
PathTrim /foo
Debug ERR
WLLogFile c:/tmp/foo_proxy.log
</Location>
MatchExpression
语句Q而不使用 <files>
块?以下CZ weblogic.conf
文g可以用作模板Q?zhn)可以对其q行修改以满x的环境和服务器的需要。以 # 开始的行是注释?
# q些参数对于定向到当前模?
# ?URL 是常用的。如果要替换每个 URL 的这些参?
# 可以?<Location> ?<Files> 模块中重新设|?br /> # 它们。(WebLogicHost?br /> # WebLogicPort?WebLogicCluster ?CookieName 除外?
<IfModule mod_weblogic.c>
WebLogicCluster w1s1.com:7001,w1s2.com:7001,w1s3.com:7001
ErrorPage http://myerrorpage.mydomain.com
MatchExpression *.jsp
</IfModule>
####################################################
在此CZ中,用于表示文g名模式的 MatchExpression
参数语法、HTTP h应{发到?WebLogic Server L以及(qing)各种其他参数如下所C:(x)
MatchExpression [filename pattern] [WebLogicHost=host] | [paramName=value]
下面的第一?MatchExpression
参数指定文g名模?*.jsp
Q然后命名单?WebLogicHost
。管道符号后?paramName=value
l合指定 WebLogic Server 用于监听q接h的端口,同时Ȁz?#8220;Debug”选项。第二个 MatchExpression
指定文g名模?*.http
q标?WebLogicCluster
L?qing)其端口。管道符号后?paramName=value
l合指定集的错误页?
# q些参数对于定向到当前模?
# ?URL 是常用的。如果要替换每个 URL 的这些参?
# 可以?<Location> ?<Files> 模块中重新设|?br /> # 它们?br /> #QWebLogicHost、WebLogicPort、WebLogicCluster ?CookieName 除外Q?/pre>
<IfModule mod_weblogic.c>
MatchExpression *.jsp WebLogicHost=myHost|WebLogicPort=7001|Debug=ON
MatchExpression *.html WebLogicCluster=myHost1:7282,myHost2:7283|ErrorPage=
http://www.xyz.com/error.html
</IfModule>
# q些参数对于定向到当前模?
# ?URL 是常用的。如果要替换每个 URL 的这些参?
# 可以?<Location> ?<Files> 模块中重新设|?br /> # 它们?br /> #QWebLogicHost、WebLogicPort、WebLogicCluster ?CookieName 除外Q?/pre>
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001
MatchExpression *.jsp
</IfModule>
# VirtualHost1 = localhost:80
<VirtualHost 127.0.0.1:80>
DocumentRoot "C:/test/VirtualHost1"
ServerName localhost:80 <IfModule mod_weblogic.c>
#... WLS 参数 ...
WebLogicCluster localhost:7101,localhost:7201
# CZQMatchExpression *.jsp <some additional parameter>
MatchExpression *.jsp PathPrepend=/test2
</IfModule>
</VirtualHost>
# VirtualHost2 = 127.0.0.2:80
<VirtualHost 127.0.0.2:80>
DocumentRoot "C:/test/VirtualHost1"
ServerName 127.0.0.2:80
<IfModule mod_weblogic.c>
#... WLS 参数 ...
WebLogicCluster localhost:7101,localhost:7201
# CZQMatchExpression *.jsp <some additional parameter>
MatchExpression *.jsp PathPrepend=/test2
#... WLS 参数 ...
</IfModule>
</VirtualHost> <IfModule mod_weblogic.c>
必须?#8220;ServerName”定义唯一|否则某些插g参数不能按预期工作?
本部分包?Apache 2.0 的示?httpd.conf
文g。?zhn)可将此示例用作模板,q对其进行修改以满(zhn)的环境和服务器的需要。以 # 开始的行是注释?
####################################################
APACHE-HOME/conf/httpd.conf file
####################################################
LoadModule weblogic_module libexec/mod_wl_20.so
<Location /weblogic>
SetHandler weblogic-handler
PathTrim /weblogic
ErrorPage http://myerrorpage1.mydomain.com
</Location>
<Location /servletimages>
SetHandler weblogic-handler
PathTrim /something
ErrorPage http://myerrorpage1.mydomain.com
</Location>
<IfModule mod_weblogic.c>
MatchExpression *.jsp
WebLogicCluster w1s1.com:7001,w1s2.com:7001,w1s3.com:7001
ErrorPage http://myerrorpage.mydomain.com
</IfModule>
使用边界w䆾验证可确保通过 Apache 插g讉K?WebLogic Server 应用E序的安全?
WebLogic 标识声明提供E序Ҏ(gu)自访?WebLogic Server 应用E序的外部系l的标记q行w䆾验证Q包括对通过 Apache HTTP Server 插g讉K WebLogic Server 应用E序的用戯行n份验证。按照下列步骤,创徏保插g安全的标识声明提供程序:(x)
web.xml
部v描述W文件中?clientCertProxy
讄?TrueQ如果用群集,也可以选择在管理控制台中,依次选择“集”-->“配置”-->“常规”选项卡,在该选项卡上Ҏ(gu)个群集将 Client Cert Proxy Enabled
Ҏ(gu)设|ؓ(f) TrueQ?code class="cCode">clientCertProxy Ҏ(gu)可与第三方代理服务器(如负载^衡器?SSL 加速器Q一起用以启用 2 ?SSL w䆾验证。有?clientCertProxy
Ҏ(gu)的详细信息Q请参阅“开?WebLogic Server ?Web 应用E序、Servlet ?JSP”中的 context-param?
clientCertProxy
之后Q请务必使用q接{选器来确?WebLogic Server 仅接受来自运?Apache 插g的计机的连接。请参阅“WebLogic 安全性编E?#8221;中的使用|络q接{选器?
请参?#8220;开?WebLogic Server 的安全提供程?#8221;中的标识声明提供E序?
可以使用安全套接口层QSecure Socket LayerQ简U?SSLQ协议保?Apache HTTP Server 插g?WebLogic Server 之间的连接。SSL 协议?Apache HTTP Server 插g?WebLogic Server 之间传递的数据提供机密性和完整性?
Apache HTTP Server 插g不?HTTP h中(通常由浏览器Q指定的传输协议Q?code class="cCode">http ?https
Q来定是否使用 SSL 协议来保?Apache HTTP Server 插g?WebLogic Server 之间的连接?
虽然可以?HTTP 客户端和 Apache HTTP Server 之间使用双向 SSLQ但h意,?Apache HTTP Server ?WebLogic Server 之间使用的是单向 SSL?
要在 Apache HTTP Server 插g?WebLogic Server 之间使用 SSL 协议Q请执行下列操作Q?
httpd.conf
文g中的 WebLogicPort
参数讄?a >步骤 2 中配|的 WebLogic Server SSL 监听端口?
httpd.conf
文g中的 SecureProxy
参数讄?ON
?
httpd.conf
文g中设|可定义有关 SSL q接的信息的M其他参数。有兛_以ؓ(f)插g配置?SSL 参数的完整列表,请参?Web 服务器插件的 SSL 参数?配置 Apache 插g以?SSL 时会(x)出现以下已知问题Q?
<Location>
标记内配|?
<Location /weblogic>
SetHandler weblogic-handler
</Location>
<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
PathTrim /weblogic
</IfModule>
以下配置?span style="font-weight: bold">正确讄Q?
<Location /weblogic>
SetHandler weblogic-handler
PathTrim /weblogic
</Location>
Include
指o(h)不能?Apache SSL 一起用。必d httpd.conf
文g中直接配|所有参数。?SSL 时请不要使用以下配置Q?<IfModule mod_weblogic.c>
MatchExpression *.jsp
Include weblogic.conf
</IfModule>
?Apache HTTP Server 插g试q接?WebLogic Server Ӟ插g使用几个配置参数定{待q接?WebLogic Server L的时间长度,以及(qing)建立q接后插件等待响应的旉长度。如果插件无法连接或未收到响应,则插件将试q接到群集中的其?WebLogic Server 实例q向其发送请求。如果连接失败或者没有来自群集中M WebLogic Server 的响应,则会(x)发送错误消息?
?nbsp;3-1 说明插g如何处理故障转移?
WebLogic Server L无法响应q接h可能表明下列问题Q?
所?WebLogic Server 实例都无法响应可能表明下列问题:(x)
在有负蝲ӞApache 插g可能收到来自后端 WebLogic Server 实例?CONNECTION_REFUSED 错误。可Ҏ(gu)以下调整提示减少 CONNECTION_REFUSED 错误Q?
AcceptBackLog
讄?
httpd.conf
文g中的 KeepAlive
指o(h)讄?On。例如:(x) # KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
请参阅位?http://httpd.apache.org/docs-project/ ?Apache HTTP Server 2.0 文档?
TcpTimedWaitDelay
讄低的倹{通过~辑 HKEY_LOCAL_MACHINE
下的注册表项来设|?Windows NT 中的 TIME_WAIT 旉间隔?SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay
如果此项不存在,则可以将其作?DWORD 值创建。数字值是要等待的U数Q可其讄Z?30 ?240 之间的Q意倹{如果未讄Q默认情况下 Windows NT ?x)?TIME_WAIT
讄?240 U?
HKEY_LOCAL_MACHINE
下的注册表项降低 TcpTimedWaitDelay
的|(x) SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
tcp_time_wait_interval
降低ZU(如果可能Q对 WebLogic Server 计算机和 Apache 计算机都q行此设|)(j)Q?$ndd /dev/tcp
param name to set - tcp_time_wait_interval
value=1000
limit
(.csh
) ?ulimit
(.sh
) 指o(h)Q可以制作一个脚本来提高此限制。例如:(x) #!/bin/sh
ulimit -S -n 100
exec httpd
如果仅运行一?WebLogic Server 实例Q则插g仅尝试连接到使用 WebLogicHost 参数定义的服务器。如果尝试失败,则会(x)q回 HTTP 503
错误消息。插件l尝试连接到该同一 WebLogic Server 实例Q直到超?ConnectTimeoutSecs?
使用 httpd.conf
?weblogic.conf
文g中的 WebLogicCluster
参数指定 WebLogic Server 列表Ӟ插g该列表用作在群集成员之间进行负载^衡的L(fng)。将W一个请求\由到q些服务器之一后,?x)返回一个动态服务器列表Q其中包含群集中已更新的服务器列表。更新的列表d集中的M新服务器q删除不再属于群集或无法响应h的Q何服务器。当集中发生更Ҏ(gu)Q会(x)使用 HTTP 响应自动更新此列表?
当请求包含存储在 Cookie ?POST 数据中的?x)话信息或包含编码?URL 中的?x)话信息Ӟ会(x)?ID ?x)包含对最初徏立会(x)话的特定服务器实例(UCؓ(f)L务器Q的引用Qƈ包含对复制原始会(x)话的其他服务器(UCؓ(f)ơ服务器)(j)的引用。包?Cookie 的请求会(x)试q接C服务器。如果该试p|Q则?x)将该请求\由到ơ服务器。如果主服务器和ơ服务器均故障Q则?x)话丢失,插g尝试与动态群集列表中的其他服务器建立新的q接。请参阅?nbsp;3-1 q接故障转移?
注意Q?/strong> | 如果 POST 数据大于 64KQ插件将不会(x)?POST 数据q行解析以获取会(x)?ID。因此,如果(zhn)将?x)?ID 存储?POST 数据中,插g无法请求\由到正确的主服务器或ơ服务器,从而可能导致会(x)话数据的丢失?/td> |
在上图中Q红圈中允许的最大重试次数等?ConnectTimeoutSecs 除以 ConnectRetrySecs?