tomcat整合apache
歷時4個多小時,最終把tomcat與apache整合起來了。
中間出了各種各樣的問題,現記錄一下,也希望能對后來者有點幫助。
背景
apache與tomcat的差別聯系大家都知道:tomcat能處理jsp頁面,也能處理html頁面
apache僅僅能處理靜態資源,如html頁面,圖片,js等等,并且apache處理html頁面比tomcat處理html的速度快。
那為了提升整個系統的訪問速度。
我們就把apache與tomcat整合到一起,我們發的全部請求都是先給apache,假設詳細的請求是html(還包含.jpg,.js等靜態資源)就直接讓apache處理,假設是jsp或servlet等動態信息,就交給tomcat處理。
下載與安裝
jdk 1.7tomcat 6 ?(tomcat7在整合中似乎有些問題,大家就用tomcat6吧)
apache 2.2.4
mod_jk 這就是把apache無法處理的動態請求發送給tomcat的東西。 這里要注意,mod_jk的版本號一定要與apache的版本號匹配
我建議大家就直接在百度上搜 "mod_jk-1.2.26-httpd-2.2.4" 或者去http://download.csdn.net/download/wng1978/6708623 這里直接下載
我一直強調版本號問題,就是由于我自己下載的各種組件的版本號不匹配,中間浪費了非常多時間。
因此,我再說句題外話
大家在新接觸一個東西時,特別是還處在搭環境的階段的時候,下載的各個組件最好就依照你所閱讀的那個文章所說的版本號,這樣至少不會出現版本號沖突的問題。
剛開始學習的人,一旦碰到這樣的版本號問題,是非常打擊積極性的。整合
mod_jk
解壓縮mod_jk-1.2.26-httpd-2.2.4.rar,得到mod_jk-1.2.26-httpd-2.2.4.so,將它改名為mod_jk.so后放到apache的安裝文件夾下的modules中。
編輯apache/conf/httpd.conf文件
? 找到Listen 80這一行( ctrl+f )改動為 Listen 81? 在httpd.conf的最后加上
? # 設置虛擬主機,定義port為81<VirtualHost 127.0.0.1:81>ServerName 127.0.0.1#定義服務名稱 E:/apache-tomcat-6.0.44-8500/webapps 是我的tomcat的位置DocumentRoot "E:/apache-tomcat-6.0.44-8500/webapps"#定義站點項目所在路徑,把路徑指向 tomcat 中的默認站點文件夾DirectoryIndex index.html index.htm index.jspErrorLog logs/shsc-error_log.txt##以下樣例中的ajp13,請大家記住,后面咱們還要用CustomLog logs/shsc-access_log.txt common#樣例1,讓 Apache 支持對webapps/sun.shop/blog 中頁面傳送JkMount /sun.shop/blog/* ajp13#樣例2,向Apache請求此文件夾內頁面時。系統將轉向用Tomcat解析JkMount /*.jsp ajp13#樣例4。向 Apache 請求jsp頁面時,用 Tomcat 進行解析JkMount /*.do ajp13#樣例5,向 Apache 請求.do 動作時。 用 Tomcat 進行解析JkMount /*.action ajp13#樣例6,向 Apache 請求 .action 動作時, 用 Tomcat 進行解析</VirtualHost># 同意client訪問此路徑 <Directory "E:/apache-tomcat-6.0.44-8500/webapps"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>說實話,我不知道Directory后面那個文件夾與virtualhost里面那個documentroot中的文件夾有什么差別聯系
眼下,我設置這個兩個路徑一直,都是tomcat下的webapps
檢查
我已經在E:/apache-tomcat-6.0.44-8500/webapps 下部署了一個叫PathTest的項目,根文件夾下有個index.html文件。http://localhost:81/PathTest/
在瀏覽器中輸入上面的地址。
換一個地址
假設你的瀏覽器也能出現類似上面的效果,說明apache本身已經安裝好了。
連接tomcat
將apache連接到tomcat上?再給httpd.conf后面加上下面內容
上面tomcat的地址大家依據自己的修改一下就可以。
設定tomcat
設定tomcat那邊怎樣接受apache的請求。
? ? ?在上一步里我們有這種配置? ? ?JkWorkersFile "E:/apache-tomcat-6.0.44-8500/conf/workers.properties"
? ? ?在那么去tomcat的conf文件夾下看看,并沒有workers這個文件,怎么辦?新建一個就能夠了嘛。并寫入例如以下內容:
大家看這一行
worker.list=ajp13 #模塊版本號
這個ajp13和httpd.conf中的 JkMount /sun.shop/blog/* ajp13 的ajp13 是相應的
你把兩處的ajp13改成"mytomcat"也是能夠的。
還有 worker.ajp13.port=8009 這個port指的是tomcat中ajp協議的port,不是我們經經常使用的那個支持http的8080。
換句話說這個8009,最好就不要改。
另外,我的tomcat的port號改成了8500。
在什么地方改?
在tomcat/conf/server.xml下
8500與8009分別支持兩種協議。
OK,如今我們試一試。
開啟tomcat,訪問 http://localhost:8500/PathTest/jsp/a.jsp
是一個非常easy的jsp
開啟apache,
對了還沒有說怎么開啟apache服務呢。
在apache/bin下有個ApacheMonitor。
雙擊
選定服務后,start就可以。
然后訪問 ?http://localhost:81/PathTest/jsp/a.jsp
注意,我們的port號是81,是訪問apache的。
apache看到請求的地址是jsp,就通過JkWorkersFile找到apache后面的tomcat,tomcat處理后,再把結果給apache,然后apache再給瀏覽器。
假設http://localhost:81/PathTest/jsp/a.jsp 和 http://localhost:8500/PathTest/jsp/a.jsp 的返回結果一樣。
就說明apache與tomcat整合完成。
可能出現的問題
1 啟動apache的時候 彈出這個錯誤 the requested operation has failed? 假設不是port問題的話,那么就是httpd.conf被我們改動錯了。
? 怎么辦
? 命令行內進入安裝文件夾apache\bin。使用命令httpd -t。然后出現“Syntax error on line 133 of E:/apache\conf/httpd.conf :ServerAdmin takes one argument, the email address of the server administrator”,看它提示信息,說明,在這個配置文件中面的133行,出現了問題
上面的133行錯誤是什么意思呢?
給后面加上一個地址就OK
2 上面的配置中,我們在81port,訪問html,jsp,js,jpg都是沒有問題的,深入甚至增加mvc框架后的.do,.action都能夠正常處理。? 但是我們假設訪問的是servlet呢?
? 眼下沒有特別好的方法。
? 給httpd.conf下的VirtualHost里面加上這個
? JkMount /*/servlet/* ajp13?
? 這是什么意思?
? 假設請求的url中間包括"servlet"這個字符,apache就把它發給tomcat。
這篇文章參考了非常多博客,詳細參考信息就不一一列出了
轉載于:https://www.cnblogs.com/jhcelue/p/6855532.html
總結
以上是生活随笔為你收集整理的tomcat整合apache的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android入门之文件系统操作(一)简
- 下一篇: 看周志华教授的一番话有感