歡迎您光臨本站 註冊首頁

[安裝配置] Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

[安裝配置] Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

# ver 1.0  by jhsea3do (Jul.9th.2005)
# 本文僅涉及配置,不涉及各插件的安裝
# 本文適合對apache配置比較熟悉的朋友,文中配置內容均最為最簡化,但附有註釋,請自行修改添加內容
# 本文參考文檔為apache網站的官方文檔,對於文中沒有涉及或者不解之處請多參考該文檔。
# 本文中的調試環境將在下面提到,但應該同樣適合於其他環境,比如linux, tomcat4, 本文可能對apache 1.x 不適用
# 如轉載本文,請註明作者為 jhsea3do@gmail.com, 謝謝

=========================================================


看到論壇上老有人對JK配置不解,結合我長期的使用經驗,我再炒一次冷飯, 希望有問題的人能夠細細品嘗

另外本文中提到的JK不是指mod_jk2,jk2項目已經停止了開發和技術支持,原因是效率方面的問題,apache官方推薦使用mod_jk

以下配置為文中涉及的內容
jakarta-tomcat-5.0.30
Apache/2.0.52 (Win32)
mod_ssl/2.0.52 OpenSSL/0.9.7e
mod_jk/1.2.13

文章分以下三部分進行說明
1. 配置Apache虛擬主機(基於域名)
3. 配置JK
2. 配置SSL

如打算按照本文內容試驗,可以先做好以下3個域名的本地解析
   
   # %windir%\system32\drivers\etc\hosts  ||  /etc/hosts
   127.0.0.1       localhost lcl.javaws.com
   192.168.1.2        www.javaws.com dyn.javaws.com
   


=========================================================

[ 本帖最後由 HonestQiao 於 2006-7-13 11:48 編輯 ]
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

1. 配置Apache虛擬主機
---------------------

a. 註釋httpd.conf中的以下內容,刪除默認主機
   
   #ServerAdmin
   #ServerName
   #DocumentRoot
   

b. 確保vhost的支持模塊被apache載入
   
   LoadModule vhost_alias_module modules/mod_vhost_alias.so
   

c. 並添加如下內容,其中3個conf文件代表了3個虛擬主機lcl, dns, dyn
   
   # Use vHost
   NameVirtualHost *:80
   NameVirtualHost *:443
   <IfModule mod_vhost_alias.c>;
     Include conf/sites/com.javaws.lcl.conf
     Include conf/sites/com.javaws.www.conf
     Include conf/sites/com.javaws.dyn.conf
   </IfModule>;
   
       
d. 在conf目錄下建立sites目錄,創建 com.javaws.lcl.conf文件,並配置lcl主機的內容
   
   # lcl.javaws.com
   #
<VirtualHost *:80>;
   ServerAdmin        jhsea3do@lcl.javaws.com               
   DocumentRoot        "D:/www/com/javaws/lcl"
   ServerName                lcl.javaws.com
   ServerAlias        127.0.0.1 localhost                # 該虛擬主機別名
   ErrorLog        logs/sites/lcl.javaws.com-error_log        # 注意建立在logs目錄下建立相關的sites目錄
   CustomLog        logs/sites/lcl.javaws.com-access_log common
   #
   <Directory "D:/www/com/javaws/lcl">;
     Options FollowSymLinks
     AllowOverride None
     Order allow,deny
     Deny from all
   </Directory>;
   #
</VirtualHost>;
   

e. 根據上面的文件配置其他的主機內容,保存httpd.conf,重啟apache2,在3個虛擬主機上放置不同的文件,應該能在瀏覽器中使用對應的域名訪問到
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

2. 配置JK
---------

a. 確保mod_jk的支持模塊被apache載入
   
   LoadModule jk_module modules/mod_jk.so
   

b. 配置httpd.conf使其載入workers的配置文件(該文件為全局配置文件,請勿放入虛擬機的配置文件中)
   
   # Use mod_jk
   <IfModule mod_jk.c>;
     JkWorkersFile                conf/jks/workers.properties
   </IfModule>;
   

   以下為workers.properties文件的內容
   
   # workers.properties.minimal
   #
   worker.list=localhost,jkstatus                        # 共有兩個worker可供使用
   #
   worker.localhost1.type=ajp13                                # worker localhost1 對應的 jk socket (private worker)
   worker.localhost1.host=localhost
   worker.localhost1.port=8009
   #
   worker.localhost.type=lb                                # worker localhost 使用負載均衡模式 (public worker)
   worker.localhost.balance_workers=localhost1                # 僅使用 localhost1 作為 localhost 的負載均衡,
   #                                                        # 如果你有多個private worker,可以放在balance中
   #
   worker.jkstatus.type=status                                # worker jkstatus 使用 status 模式
   

c. 編輯com.javaws.lcl.conf,配置lcl主機,使其支持 jk
   * 該配置代碼應該和<Directory />;配置平級
   
   #
   <IfModule mod_jk.c>;
     JkMountFile        conf/jks/jk1.com.javaws.lcl.urimaps.properties                # urimaps 配置文件
     JkLogFile                logs/sites/lcl.javaws.com-jk-info_log                        # jk的日誌
     JkLogLevel                info                                                        # jk的日誌紀錄等級
   </IfModule>;
   

   以下為jk1.com.javaws.lcl.urimaps.properties文件的內容
   
   # jk1.com.javaws.lcl.urimaps.properties
   #
   /*.jsp=localhost                                # 所有uri為*.jsp結尾的http請求均轉交localhost worker處理
   /*.jspa=localhost                                # 所有uri為*.jspa結尾的http請求均轉交localhost worker處理
   /*.do=localhost                                # 所有uri為*.do結尾的http請求均轉交localhost worker處理
   /servlets/*=localhost                        # 所有uri為/servlets/目錄下的http請求均轉交localhost worker處理
   /admin/*=localhost                                # 所有uri為/admin/目錄下的http請求均轉交localhost worker處理
   #
   !/admin/*.gif=localhost                        # /admin/ 目錄下的 gif, jpg 無需由jk處理
   !/admin/*.jpg=localhost                        # ...
   !/servlets/*.gif=localhost
   !/servlets/*.jpg=localhost
   #
   /jkmanager=jkstatus                                # 所有uri為/jkmanager/目錄下的http請求均轉交jkstatus worker處理
   

d. 啟動 tomcat , 確保 tomcat 載入了 ajp13 handle

e. 保存以上配置,重啟apache2, 這樣可以訪問對應的java uri
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

3. 配置SSL(如果不需要配置,可以略過)
------------------------------------

a. 製作密鑰和證書:ssl-javaws.com.crt、ssl-javaws.com.key, 確保mod_ssl的支持模塊被apache載入,win32版本的bin building不提供ssl支持(出於安全考慮),請用msvc60自行編譯
   
   LoadModule ssl_module modules/mod_ssl.so
   

b. 為需要SSL支持的站點配置加密的主機,比如lcl主機,可以在該主機的配置文件下加入:
   * 該配置代碼應該和<VirtualHost />;配置平級
   
<VirtualHost *:443>;
   ServerAdmin        jhsea3do@lcl.javaws.com               
   DocumentRoot        "D:/www/com/javaws/lcl"
   ServerName                lcl.javaws.com
   ServerAlias        127.0.0.1 localhost                # 該虛擬主機別名
   ErrorLog        logs/sites/lcl.javaws.com-error_log        # 注意建立在logs目錄下建立相關的sites目錄
   CustomLog        logs/sites/lcl.javaws.com-access_log common
   #
   <IfModule mod_ssl.c>;
     SSLEngine on               
     SSLCipherSuite                ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNUL
     SSLCertificateFile                "conf/certs/ssl-javaws.com.crt"
     SSLCertificateKeyFile        "conf/certs/ssl-javaws.com.key"
     <Files ~ "\.(cgi|shtml|phtml|php3?)$">;                # 對於CGI文件設置環境變數
       SSLOptions +StdEnvVars
     </Files>;
     SetEnvIf User-Agent ".*MSIE.*" \                        # 對於一些瀏覽器設置環境變數
       nokeepalive ssl-unclean-shutdown \
       downgrade-1.0 force-response-1.0
     CustomLog logs/ssl-request_log \                        # 日誌紀錄
       "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
   </IfModule>;
   #
   <Directory "D:/www/com/javaws/lcl">;
     Options FollowSymLinks
     AllowOverride None
     Order allow,deny
     Deny from all
   </Directory>;
   #
</VirtualHost>;
   

c. 配置原80埠的主機的所有請求均轉發到443埠上,此處需要打開mod_rewrite
   
   LoadModule rewrite_module modules/mod_rewrite.so
   
   * 以下配置內容位於80埠虛擬主機的配置文件中,配置代碼應該和<Directory />;配置平級
   
    <IfModule mod_ssl.c>;
      RewriteCond  %{REMOTE_HOST}                lcl\.javaws\.com\.org$
      RedirectMatch ^/(.*)                        https://lcl.javaws.com/$1
      RewriteCond  %{REMOTE_HOST}                localhos\.org$
      RedirectMatch ^/(.*)                        https://localhost/$1
      RewriteCond  %{REMOTE_HOST}                127\.0\.0\.1$
      RedirectMatch ^/(.*)                        https://127.0.0.1/$1
    </IfModule>;
   

d. 保存,使設置生效,開瀏覽器檢查實際結果


=========================================================

Fin
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

好文--現在還有人說用jk2呢。
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

<VirtualHost *:443>;這個有什麼意義嗎?
https不支持virtualhost的,不是技術的原因,而是安全策略的原因。

補充一下,我的意思是說https不支持name-based virtualhost,使用不同的埠還是可以的。解釋在這裡http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

[ 本帖最後由 perryhg 於 2006-7-4 13:30 編輯 ]
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

按我的配置方法的確可以多個https站點並存

我的確是不知道這方面相關安全策略方面的知識,你能說一下或者介紹相關的文章么?
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

為什麼我配置虛擬主機時 需要在APACHE  和 TOMCAT裡面都進行配置?
jhsea3do能幫我解答解答嗎?
《解決方案》

Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合

原帖由 "tony-jia" 發表:
為什麼我配置虛擬主機時 需要在APACHE  和 TOMCAT裡面都進行配置?
jhsea3do能幫我解答解答嗎?

因為apache和tomcat工作在不同的埠,兩個不同的服務
你配置虛擬主機就必須兩個都配置
《解決方案》

你使用的是RedirectMatch,這個不算是虛擬主機啊,用戶的瀏覽器會被重定向到最終指定的目標上去。這個跟<VirtualHost *:443>沒有任何關係。

[火星人 ] [安裝配置] Tomcat JK(NOT JK2) Apache2 帶SSL/vHost 整合已經有817次圍觀

http://coctec.com/docs/service/show-post-25295.html