2011-02-09 20 views
4

嗨 我們開始用J2EE創建我們的應用程序。我們現在創建了一個Webservice並將其部署到Glassfish服務器。我們已經寫了一個Apache代理規則通過https://our.server.com/webservice-war訪問它(僅HTTPS端口是開放該服務器):Apache HTTP Server後面的Glassfish Server Webservice

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,劉若英

回答

2

找到了解決辦法!

Anonym給了我一個關於mod_jk的好消息。所以在這裏完整的配置(對於RHEL5)。

首先,下載mod_jk模塊的Apache:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/

將在模塊目錄/ etc/httpd的/模塊,使其executeable:

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

之後,創建的/ etc/httpd的/ conf目錄/工。屬性:

# 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 

Port 8009是Glassfish jk連接器偵聽的地方(我們稍後會談到)。

不,我們必須配置mod_jk的,因此創建文件:

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/一切都會BI重定向:用以下內容/etc/httpd/conf.d/mod_jk.conf到Glassfish yourapp-war應用上下文)

重要的是,如果您在apache上使用虛擬主機,則必須爲您的虛擬服務器設置選項: JkMountCopy在 。解說:

如果該指令被設置爲「開」在 一些虛擬服務器,從 全球服務器將被複制到 坐騎此虛擬服務器,更準確地說 由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的,一切要高度重視的工作。

0

至於重寫HTTPS - > HTTP,我不知道這是可能的(還)不使用的mod_jk,見here ,也看到這個little guide

雖然,一般來說,你需要配置Glassfish並設置http.proxyPort(也可能是http.proxyHost)。希望這應該反映在自動生成的WSDL URL中。

這裏有3點不同的方式來做到這一點:

使用的asadmin(在GlassFish bin /目錄下,運行

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

編輯domain.xml中和下添加<java-config>元件

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

打開GlassFish管理網頁,應用程序服務器下 - > VM設置 - > JVM選項,添加這些選項

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

不幸的是,它不能解決問題。仍然是錯誤的環節。也許我可以在glassfish上創建一個重寫規則。還不知道。 – reen 2011-02-10 07:18:19

4

我發現我認爲是一個非常簡單和優雅的方式來處理這個問題:使用mod_substitute。由於我們這些問題已經在使用Apache,而且它內置簡單,所以我最喜歡這種方法。

我把類似下面的方框中的我的Apache conf文件之一,並找到快樂:

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

+1非常棒,謝謝。 – 2014-06-04 00:21:34

0

在GlassFish Server開源版3.1.2.2設置

server-config.network-config.protocols.protocol.http-listener-1.http.server-name=MyHost:80 

(建5 )解決了我的問題。