2011-01-11 41 views
1

目前,我們有我們的web應用程序是一個標準之類的事情,HTTP主信息的網頁,但重定向到HTTPS(SSL即)的登錄名和用戶行爲等如何通過Apache將多個Tomcat Web應用程序實例使用SSL?

目前,我們有我們所有的web應用實例(生產,測試演示等)部署到Jetty的一個實例中,我們可以通過www.ourapp.com/test和www.ourapp.com/demo以及明顯的www.ourapp.com訪問它們以進行生產。

這個問題是每次我們對一個實例進行更改時,我們需要重新啓動所有實例,這並不理想。此外,我並不特別喜歡使用Jetty進行製作,即使我們的應用程序目前的音量不是很高。

我想轉移到Apache的httpd轉發到多個實例的每個託管我們的應用程序的不同實例的tomcat。這將讓我關閉並重新啓動每個tomcat /應用程序實例。

我已經在各種不同的端口上安裝了多個tomcats安裝,因此它們不會與其他端口(例如8081,8082,8083)相沖突,將它們的AJP連接器端口設置爲彼此不同(例如8010,8011,8012)和httpd現在在端口8090上偵聽,以免與在端口80上運行的當前生產實例衝突。

在httpd.conf中,我有如下設置:

JkMount /測試* tomcatTest

而在workers.properties我的設置,如;

worker.tomcatTest.port = 8010
worker.tomcatTest.host =本地主機
worker.tomcatTest.type = AJP13
worker.tomcatTest.lbfactor = 100

的httpd被轉發到細最初的登陸頁面。當我需要進入SSL頁面進行登錄時,會出現這些問題等。每個tomcat安裝都會取消其SSL連接器的註釋,並且端口也會變化,如8444,8445,8446等。

希望您可以看到設置I試圖在這裏實現。我只需要一些幫助,讓非SSL頁面鏈接到SSL頁面,就像他們通常在一個Jetty/Tomcat實例中並且Apache沒有完成所有轉發一樣。任何指針我需要在這裏做什麼?

回答

1

如果要使用Tomcat的本地SSL連接器,則必須將應用程序重定向到主機上的Tomcat端口。它不能由Apache處理。這是因爲Apache還必須安裝每個Tomcat服務器的SSL證書 - 並且一次只能安裝一個證書。

最好使用Apache來終止您的SSL連接。

使用適當的證書配置Apache(請參閱下面的[1]),並啓用SSL。然後在SSL的VirtualHost定義中,再次添加所有JkMount行。

例如:

<VirtualHost _default_:443> 
    JkMount /test* tomcatTest 
</VirtualHost> 

這意味着SSL連接將被Apache處理,然後在踢到到Tomcat與AJP。這極大地簡化了配置,因爲您在Tomcat配置中所需的全部內容都是AJP連接器。

[1]你需要一個包含所有你想使用的虛擬主機的證書。創建其中一個有點超出了問題的範圍,但足以說明您需要在證書中使用subjectAltName,以便使用每個主機名。如果使用新的主機名創建新的應用程序,則需要重新生成證書。

另外我不是特別喜歡使用Jetty進行製作,即使我們的應用程序目前的音量不是很高。

對於99%的使用情況,Jetty在生產中絕對沒問題。我經常發現Tomcat更像是一個反覆無常的野獸,並且經常最終將它換爲Jetty。

+0

聽起來很棒內,所以我會能夠擁有類似以下的內容? 的 JkMount /測試* tomcatTest JkMount /演示* tomcatDemo JkMount/DEVP * tomcatDevp

+0

是的,偉大的,它的作品! –

1

你需要的實際上是ssl-offloading: 1.在jetty中配置什麼或路徑要用ssl保護; 2.使用apache前端碼頭,讓apache處理碼頭的所有ssl內容。 3.配置jetty接受ssl處理apache 4.在apache上設置多個vhost(對於單個ip),配置apache爲每個虛擬主機使用不同的SSL certifiacate。 ...

針對此話題一步一步的指導可以在這裏找到:

http://milestonenext.blogspot.de/2012/09/ssl-offloading-with-modjk-part-1.html

0

假設你worker.properties文件中包含這一點。

> worker.list=balancer,stat worker.tomcat1.type=ajp13 
> worker.tomcat1.port=8109 worker.tomcat1.host=localhost 
> worker.tomcat2.type=ajp13 worker.tomcat2.port=8209 
> worker.tomcat2.host=localhost worker.tomcat3.type=ajp13 
> worker.tomcat3.port=8309 worker.tomcat3.host=localhost 
>  worker.balancer.type=lb worker.balancer.balance_workers=tomcat1,tomcat2,tomcat3 
> worker.stat.type=status 

然後,你必須添加 JkMount/*平衡器

httpd-ssl.conf

<Virtualhost> 標籤

<VirtualHost _default_:443> 
#No change in other existing code 
JkMount /* balancer 

> </VirtualHost> 
相關問題