您好 我们开始使用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
答案 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)解决了我的问题。