Linux Apache Tomcat 整合(JK方式)

火星人 @ 2014-03-08 , reply:0


版本:請注意如果整合時一定要看,apache和tomcat的官方文檔,版本不一樣,整合細節也不太一樣 Apache: 2.2.21 Tomcat: 6.0.33 mod_jk: 1.2.32 JDK: 1.6
  1. apache-tomcat-6.0.33.tar.gz
  2. wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz
  1. httpd-2.2.21.tar.gz
  2. wget http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.gz
  1. tomcat-connectors-1.2.32-src.tar.gz (mod_JK 模塊)
  2. wget http://mirror.bjtu.edu.cn/apache//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.32-src.tar.gz

  1. JDK(jdk-6u26-linux-i586)
  2. wget http://oracleotn.rd.llnwd.net/otn-pub/java/jdk/6u26-b03/jdk-6u26-linux-i586-rpm.bin
主要步驟: 1.安裝mod_jk模塊 2.編輯httpd.conf,使用LoadModule 把模塊載入進去 3.編輯httpd.conf,把httpd-vhosts.conf 載入進來,用來配置虛擬主機 4.編輯httpd.conf,加入mod_jk模塊的配置文件 5.編輯httpd-vhosts.conf配置文件,配置虛擬主機,並加入那些讓tomcat處理,那些讓apache來處理的JkMount/JkUnMount,詳apache tomcat整合配置那一節 6.在/usr/local/apache2/conf下創建tomcat的woker文件:worker.properties 7.編輯worker.properties,加入針對tomcat的配置文件(worker.list),詳見apache tomcat整合配置那一節 8.編輯tomcat的server.xml文件,修改<HOST>標籤里的內容,指定appBase的路徑 9.創建網站的目錄/web3,在/web3下創建ROOT目錄,用來放置網站的前台頁面,創建admin,放置網站的後台頁面 10.連接mysql資料庫 11.啟動Apache 、tomcat,並測試.
對Apache tomcat整合的一點理解: 1.網站一般是分為前台和後台,前台頁面放到一個目錄裡面比如:web,後台程序放到一個目錄下比如:admin
2.Apache虛擬主機的文檔根目錄指向tomcat的項目目錄(/web3),這個目錄下有2個目錄:ROOT、admin ROOT下面放著網站的所有前台頁面,admin裡面放著所有的後台程序

3.apache tomcat 是怎麼工作的
假設有一個虛擬主機www.apache.com對應的文檔根目錄就是以上的/web3目錄,當我們在瀏覽器中輸入www.apache.com時,通過DNS伺服器或者hosts文件解析到對應的IP地址192.168.100.250,我們在虛擬主機配置中指定 JkMount / tomcat1
JkMount /* tomcat1
JkMount /index.html tomcat1
根和根下面所有的文件都是由tomcat1這個tomcat的worder來處理,也就是讓tomcat來處理,當然還有根下面的index.html.這裡的/是指/web3 這個時候,apache就會把請求交給tomcat來處理,tomcat一旦接手之後,它就開始在appBase指定目錄(/web3)下尋找ROOT目錄(默認是ROOT目錄,可以修改),然後到ROOT目錄下尋找WEB-INF目錄,再到WEB-INF目錄中找到web.xml文件,讀取web.xml中的<welcome-file-list>中指定的index.html或者index.htm(相當於apache配置文件中指定DirectoryIndex index.html index.htm) <welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list> 然後通過這個index.html找到處理這個index.html的servlet程序,找到之後就去執行這個程序,這個程序會執行ROOT找到要顯示頁面,比如index.jsp,當然這個程序里已經提前指定好了tomcat會去找到那個網頁去執行,執行之後就成為html靜態代碼,再把它返回給apache,然後apache再返回給客戶端瀏覽器,客戶端瀏覽器執行這些代碼之後,就顯示出來.這當中還有就是客戶端瀏覽器執行的過程,瀏覽器執行靜態代碼時,碰到什麼標籤,才去取什麼內容,比如:遇到aa.css樣式表,然後才去伺服器端去取,而不是伺服器端一次性都把所有的靜態內容都發給瀏覽器. 如果瀏覽器請求的是圖片、視頻、flash,css,js這些靜態內容時,是由Apache直接處理的.


一、安裝Apache
1.安裝
  1. [root@router ~]# tar xvfz httpd-2.2.21.tar.gz
  2. [root@router ~]# cd httpd-2.2.21
  3. [root@router httpd-2.2.21]# ./configure --prefix=/usr/local/apache2 --enable-modules=most --enable-mods-shared=all --enable-so --with-included-apr
  4. 配置時根據需要、增加選項來啟用某個功能.
  5. [root@router httpd-2.2.21]#make && make install

2.編輯/etc/profile文件
把Apache的bin目錄加入到PATH變數中去,在文件中加入以下的行,這樣就可以直接使用apachectl start/stop/restart
  1. export PATH=$PATH:/usr/local/apache2/bin
  2. [root@router httpd-2.2.21]# source /etc/profile //使其生效
  3. [root@router httpd-2.2.21]# apachectl -l 查看Apache靜態編譯到內核的模塊
  4. Compiled in modules:
  5. core.c
  6. prefork.c //默認是prefork工作方式,如果在編譯時不指定的話
  7. http_core.c
  8. mod_so.c //如果以後動態載入模塊,那這個模塊靜態編譯到內核中

3.建立虛擬主機放的文檔根目錄

  1. [root@router ~]# mkdir /web3


4.客戶端修改hosts文件,沒有DNS解析,測試就用Hosts文件來解析,加入以下內容.
  1. 192.168.100.250 www.apache.com
二、安裝JDK
1.安裝
在tomcat運行環境下,JDK是必不可少的軟體,tomcat只是一個Servlet/JSP容器,底層的操作都需要JDK來完成.
  1. [root@router ~]# chmod x jdk-6u26-linux-i586-rpm.bin //增加執行許可權
  2. [root@router ~]# cp jdk-6u26-linux-i586-rpm.bin /usr/local/
  3. [root@router ~]# cd /usr/local/
  4. [root@router local]# ./jdk-6u26-linux-i586-rpm.bin
  5. 看到Press Enter to continue..... 這字樣,按回車即可完成安裝
  6. [root@router local]# ln -s /usr/java/jdk1.6.0_26/ /usr/local/java //做一個軟連接到/usr/local/java下
2.設置環境變數 vi /etc/profile
在文件的面加入以下內容
  1. JAVA_HOME=/usr/local/java
  2. CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  3. PATH=$JAVA_HOME/bin:$PATH
  4. export PATH JAVA_HOME CLASSPATH
  5. 保存退出.
  6. [root@server1 lib]# source /etc/profile //使配置即時生效

3.測試JAVA是否安裝成功
  1. [root@server1 lib]# java -version
  2. java version "1.6.0_26" //是我們安裝的版本,安裝成功
  3. Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
  4. Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
三、安裝tomcat
  1. [root@router local]# cp apache-tomcat-7.0.22.tar.gz /usr/local/
  2. [root@router local]# tar xvfz apache-tomcat-7.0.22.tar.gz
  3. [root@router local]# mv apache-tomcat-6.0.33 tomcat-6.0.33 //重命名一下,方便記憶與管理
  4. 這樣tomcat就安裝完成了.
  5. 啟動tomcat
  6. [root@router tomcat-6.0.33]# bin/startup.sh
從客戶端訪問正常

在/usr/local/tomcat-6.0.33/bin 修改catalina.sh,在文件的最下面加入以下內容:
  1. JAVA_HOME=/usr/local/java

四、安裝JK模塊
1.安裝,如果是源碼安裝,會自帶apxs工具,如果採用rpm包安裝的話,不一定帶這個工具,還需要重新安裝
        

  1. [root@router ~]# tar xvrz tomcat-connectors-1.2.32-src.tar.gz
  2. [root@router ~]# cd tomcat-connectors-1.2.32-src
  3. [root@router tomcat-connectors-1.2.32-src]# cd native/
  4. [root@router native]# ./buildconf.sh
  5. [root@router native]# ./configure --with-apxs=/usr/local/apache2/bin/apxs
  6. #這裡指定的是apache安裝目錄中apxs的位置,這個apxs方便我們動態載入模塊
  7. [root@router ~]# ll /usr/local/apache2/modules/mod_jk.so #已經幫我們複製到apache的modules目錄中去了.
  8. -rwxr-xr-x 1 root root 878139 11-01 14:06 /usr/local/apache2/modules/mod_jk.so

2.修改apache主配置文件,使其在啟動時載入可以載入JK模塊,在模塊載入的位置添加以下行:
  1. LoadModule jk_module modules/mod_jk.so
  2. [root@router htdocs]# httpd -D DUMP_MODULES 可以查看jk模塊是否被載入了
五、apache與tomcat整合配置
1、Tomcat workers
Tomcat worker是一個服務於web server、等待執行servlet/JSP的Tomcat實例,創建tomcat workers需要增加3個配置文件,分別是Tomcat workers配置文件workers.properties,URL映射文件uriworkermap.properties和JK模塊日誌輸出文件mod_jk.log,mod_jk.log文件會在apache啟動時自動創建,這裡只需創建前兩個文件即可. 定義Tomcat workers的方法是在apache的conf目錄下編寫一個名為“workers.properties”的屬性文件,使其作為apache的插件來發揮作用,下面講述workers.properties配置說明. worker.list用來定義Workers列表,當apache啟動時,workers.properties作為插件將初始化出現在worker.list列表中的workers. 定義worker類型的格式: worker.worker名字.type= 例如: 定義一個名為“tomcat12”的worker,其使用ajp12協議與tomcat 進程通訊:   worker.tomcat12.type=ajp12 定義一個名為“tomcat13”的worker,其使用ajp13協議與tomcat 進程通訊:   worker.remote.type=ajp13   定義一個名為“tomcatjni”的worker,其使用JNI的方式與tomcat 進程通訊   worker.tomcatjni.type=jni   定義一個名為“tomcatloadbalancer”的worker,作為對多個tomcat進程的負載平衡使用:   worker.tomcatloadbalancer.type=lb 這裡只說明ajp13協議支持的幾個常用屬性:  Host:監聽ajp13請求的的tomcat worker主機地址  Port:tomcat worker主機監聽的埠.默認情況下tomcat在ajp13協議中使用的埠為8009.  lbfactor:當tomcat用作負載均衡時,此屬性被使用,表示此tomcat worker節點的負載均衡權值.
2、創建workers.properties文件
參照: http://tomcat.apache.org/connectors-doc/reference/workers.html
        

  1. [root@router ~]# vim /usr/local/apache2/conf/workers.properties 內容如下:
  2. worker.list=tomcat1
  3. worker.tomcat1.port=8009
  4. worker.tomcat1.host=localhost
  5. worker.tomcat1.type=ajp13
4.編輯Apache主配置文件/usr/local/apache2/conf/httpd.conf ,加入以下內容: 參照:http://tomcat.apache.org/connectors-doc/reference/apache.html
  1. JkWorkersFile conf/workers.properties
  2. JkLogFile logs/mod_jk.log
  3. JkLogLevel debug
  1. # Virtual hosts
  2. Include conf/extra/httpd-vhosts.conf #把這行的註釋去掉,使用這個配置文件來配置虛擬主機
5.編輯extra/httpd-vhosts.conf 這個虛擬主機配置文件,配置如下:
  1. <VirtualHost *:80>
  2. DocumentRoot "/web3" //Apache文檔根目錄
  3. ErrorLog "logs/www-error.log"
  4. CustomLog "logs/www-access.log" common
  5. ServerName www.apache.com
  6. DirectoryIndex index.html
  7. <Directory "/web3/"> //一定要有這段,控制目錄訪問的許可權,如果沒有這段是沒辦法訪問的,默認是禁止訪問
  8. Options FollowSymLinks MultiViews
  9. AllowOverride None
  10. Order deny,allow
  11. Allow from all
  12. </Directory>
  13. #前台頁面配置
  14. #這裡面的/ 是代表 /web3
  15. JkMount / tomcat1
  16. JkMount /* tomcat1
  17. JkMount /index.html tomcat1
  18. #把這存放靜態頁面的目錄,起別名(訪問方便起見,也是為了安全)指向實際的位置
  19. Alias /css /web3/ROOT/css
  20. Alias /image /web3/ROOT/image
  21. Alias /images /web3/ROOT/images
  22. Alias /js /web3/ROOT/js
  23. Alias /swf /web3/ROOT/swf
  24. Alias /video /web3/ROOT/video
  25. #所有的css、images、js、video等這些靜態文件不讓tomcat1來處理,Apache來處理這些文件
  26. JkUnMount /css/* tomcat1
  27. JkUnMount /image/* tomcat1
  28. JkUnMount /images/* tomcat1
  29. JkUnMount /js/* tomcat1
  30. JkUnMount /swf/* tomcat1
  31. JkUnMount /video/* tomcat1
  32. #後台頁面配置
  33. JkMount /admin tomcat1
  34. JkMount /admin/* tomcat1
  35. JkMount /admin/index.html tomcat1
  36. Alias /admin/css /web3/admin/css
  37. Alias /admin/images /web3/admin/images
  38. Alias /admin/js /web3/admin/js
  39. #所有的css、images、js、video等這些靜態文件不讓tomcat1來處理,Apache來處理這些文件
  40. JkUnMount /admin/css/* tomcat1
  41. JkUnMount /admin/images/* tomcat1
  42. JkUnMount /admin/js/* tomcat1
  43. </VirtualHost>

6、Tomcat的配置(server.xml的配置) server.xml是tomcat的核心配置文件,找到默認的<Host>標籤
  1. <Host name="localhost" appBase="/web3"
  2. unpackWARs="true" autoDeploy="true"
  3. xmlValidation="false" xmlNamespaceAware="false">

把appBase指向 /web3,就是Apache虛擬主機(www.apache.com)指向的目錄,如果使用默認的ROOT的目錄的話,只需要在/web3目錄下新建一個ROOT目錄,然後把你的前台頁面放到這裡面就可以訪問到,tomcat會默認到ROOT下面找WEB-INF下的web.xml文件然後找到index.html這個,這個index.html不一定存在,這個就是tomcat處理的問題
7.準備測試網站,放到/web3目錄下
  1. [root@router web3]# ls
  2. admin ROOT
  3. [root@router web3]# ls ROOT/
  4. 404.jsp favicon.ico help _leftheadforuser.jsp _menu.yingda.jsp recommend _userfoot.jsp
  5. 500.jsp fckeditor image literature page.jsp reg_next.jsp validemail.jsp
  6. about _footer.jsp images login_register.jsp paper search.jsp video
  7. bulletin _header.jsp index.jsp loginstatus.jsp product soft WEB-INF
  8. css _header.yingda.jsp index.yingda.jsp magazine publisher swf xml.data.jsp
  9. entry _headforuser.jsp js _menu.jsp reader user
  10. [root@router web3]# ls ROOT/WEB-INF/
  11. classes jboss-web.xml lib tld web.xml

8.啟動apache和tomcat,測試訪問
  1. [root@router ~]# /usr/local/apache2/bin/apachectl start
  2. [root@router ~]# /usr/local/tomcat-6.0.33/bin/startup.sh

訪問前台頁面


訪問後台頁面,要加上/admin,這裡面放著後台的程序. 可以訪問到,正常


那怎麼知道,那些js/css/images/swf/vedio文件夾裡面的內容是apache解析的 可以這樣,像下圖輸入一個不存在的css文件,然後看報錯信息,


如果是tomcat 解析的話,錯誤頁面會有tomcat的版本信息,像下圖


jsp頁面是tomcat來解析的,看下圖,隨便輸入一個不存在的jsp頁面,肯定會報錯了 看到報錯就知道這是tomcat報的錯.這樣就知道jsp頁面是由tomcat來解析的.

本文出自 「雷納科斯的博客」 博客,請務必保留此出處http://linux5588.blog.51cto.com/65280/750826




[火星人 via ] Linux Apache Tomcat 整合(JK方式)已經有108次圍觀

http://www.coctec.com/docs/linux/show-post-46723.html