Apache HTTP Server背后的Glassfish Server Web服务

时间:2011-02-09 20:03:18

标签: java apache jsf

您好 我们开始使用J2EE创建应用程序。我们现在创建了一个Webservice并将其部署到Glassfish服务器。我们编写了一个apache代理规则,通过 https://our.server.com/webservice-war 访问它(只有https端口对该服务器开放):

ProxyRequests Off
ProxyPass /webservice-war http://our.server.com:8080/webservice-war
ProxyPassReverse /webservice-war http://our.server.com:8080/webservice-war

现在一切正常,但是当我们转到ServiceEndpoint页面(自动生成)时,会有一个指向WSDL页面的链接: 的 http://our.server.com:8080/webservice-war/HostaliasSearchImplService?wsdl

这是完全错误的(Glassfish侦听端口8080)。并且https也改为http

任何人都知道如何修复它,自动生成的链接是:

https://our.server.com/webservice-war/HostaliasSearchImplService?wsdl

BR,Rene

4 个答案:

答案 0 :(得分:4)

我发现了我认为处理这个问题的一种非常简单而优雅的方法:使用mod_substitute。由于我们这些有这个问题的人已经在使用Apache,并且它内置且简单,我最喜欢这种方法。

我在我的一个Apache conf文件中放了一个与下面类似的块,并找到了欢乐:

<Location />
   AddOutputFilterByType SUBSTITUTE text/xml
   Substitute "s|http://internal:8080/foo|https://external/foo|ni"
</Location>

答案 1 :(得分:2)

找到了解决方案!

Anonym给了我一个关于mod_jk的好提示。所以这里是完整的配置(对于RHEL5)。

首先下载apache的mod_jk模块:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/

放入模块目录/ etc / httpd / modules并使其可执行:

chmod +x mod_jk-1.2.31-httpd-2.2.x.so

之后创建/etc/httpd/conf/workers.properties:

# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

端口8009是Glassfish jk连接器侦听的位置(我们稍后会介绍)。

不,我们必须配置mod_jk,因此使用以下内容创建文件:/etc/httpd/conf.d/mod_jk.conf:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.x.so
JkWorkersFile /etc/httpd/conf/workers.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send everything for context /atsi-war to worker named worker1 (ajp13)
JkMount /yourapp-war/* worker1

(这意味着您的http://apache.webserver.com/yourapp-war/中的所有内容都将被重定向到Glassfish yourapp-war应用程序上下文)

重要的是,如果您在apache上使用虚拟主机,则必须设置选项:     JkMountCopy On 为您的虚拟服务器。解释:

  

如果此指令设置为“On”in   一些虚拟服务器,来自的安装   全局服务器将被复制到   更确切地说,这个虚拟服务器   由JkMount定义的所有挂载   JkUnMount。

现在我们必须在glassfish中创建jk连接器:

asadmin create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs server jk-connector
asadmin set configs.config.server-config.network-config.network-listeners.network-listener.jk-connector.jk-enabled=true

重启Glassfish,一切都可行。

答案 2 :(得分:0)

至于重写https - &gt; http,我不确定(还)不使用mod_jk,请参阅here ,但另请参阅此little guide

虽然,通常,您需要配置Glassfish并设置http.proxyPort(也可能是http.proxyHost)。希望这应该反映在自动生成的WSDL URL中。

以下是3种不同的方法:

<强> 1 使用asadmin(在Glassfish bin /目录中,运行

asadmin create-jvm-options "-Dhttp.proxyPort=80"
asadmin create-jvm-options "-Dhttp.proxyHost=our.server.com"

<强> 2 编辑domain.xml并在<java-config>元素下添加

 <jvm-options>-Dhttp.proxyPort=80</jvm-options>
 <jvm-options>-Dhttp.proxyHost=our.server.com</jvm-options>

第3 在Application Server - &gt;下打开Glassfish管理页面。 VM设置 - &gt; JVM选项并添加这些选项

http.proxyPort=80
http.proxyHost=our.server.com

答案 3 :(得分:0)

设置

server-config.network-config.protocols.protocol.http-listener-1.http.server-name=MyHost:80
GlassFish Server上的

开放源代码3.1.2.2(版本5)解决了我的问题。