http://blog.sina.com.cn/s/blog_3c9872d00102w00y.html
Apache與Tomcat整合應用是一個老話題,不算新技能,但對非運維人員在配置過程中或許也會遇到一些問題。這里只是把自己多回配置的過程做一個摘錄,供自己翻閱并望對過路的人有用。
Apache是當下在Windows、Unix、Linux 等操作系統中最流行的Web服務器軟件之一,其反應速度快、運行效率高,不僅支持HTML等靜態頁面,在加載插件后也可支持 PHP 頁面等。Tomcat是Apache軟件基金協會與Sun公司聯合開發的Web服務器,除支持HTML靜態頁面外,還是JSP、Servlet等JAVA WEB應用的服務器。在相同運行環境下,Tomcat對靜態頁面的反應速度沒有Apache靈敏,整合 Apache與Tomcat能使系統運行于一個良好環境下,實現JAVA的動態與靜態頁面分離,不僅讓系統更安全,同時也可提高系統效率。
一、JAVA應用基礎架構
通用的JAVA應用架構如下,包括WEB Server、APP Server和DB Server三個部分:
1、WEB Server
WEB Server置于企業防火墻外,這個防火墻也可以認為是一個CISCO路由器,在CISCO路由器上開放兩個端口為:80和443,其中:
80端口:用于正常的http訪問
443端口:用于https訪問,即如果你在ie里打入https://xxx.xxx.xx這樣的地址,默認走的是443這個端口
WebServer專門用于解析HTML、JS(JavaScript)、CSS、JPG/GIF等圖片格式文件、TXT、VBSCRIPT、PHP等“靜態”網頁內容。
2、APP Server
APP Server置于企業防火墻內,它和Web Server之間的連接必須且一定為內部IP連接。App Server用于解析我們的任何需要Java編譯器才能解析的“動態”網頁,其實App Server本身也能解析任何靜態網頁的。在應用中我們這樣來想一下:我們讓負責專門解析靜態網頁的Web Server來解析html等內容,而讓App Server專門用于解析任何需要Java編譯器才能解析的東西,讓它們各司其職。這樣作的好處:
1)為App Server“減壓”,同時也提高了性能;
2)不用再把8080這個端口暴露在internet上,也很安全,畢竟我們的App Server上是有我們的代碼的,就算是編譯過的代碼也容易被“反編譯”,這是很不安全的;
3)為將來進一步的“集群擴展”打好了基礎。
3、DB Server
比方說我們用MySQL,它需要通過3306與App Server進行連接,那么這個1521我們稱為數據庫連接端口,如果把它暴露在Internet上就比較危險,就算密碼很復雜,但 對于高明的黑客來說,要攻破你的口令也只是時間上的問題而己。因此我們把我們的DB Server也和App Server一樣,置于內網的防火墻,任何的DB連接與管理只能通過內網來訪問。
二、系統安裝與配置
系統安裝包括MySQL的安裝,WEB Server即Apache的安裝,App Server即Tomcat的安裝。關于這三個系統安裝網上相關的文檔很多,此處略去。以下主要摘錄需要重點配置的內容。
1、Apache的配置
做技術的人應該都會Apache的基礎配置,如果不會確實需要學一學。
Apache的配置主要集中在httpd.conf文件中,它位于Apache的安裝目錄下,比如我的是在“C:\webserver\apache\apache22\conf”目錄下。用Ultraedit或Notepad++編輯器打開文件,通常需要修改的內容包括ServerName、DocumentRoot、VirtualHost內容等。此處我修改的內容包括:
1)DocumentRoot原目錄為C:/webserver/apache/apache22/htdocs,修改為D:/WWW/apache/htdocs,將網站發布路徑與Apache安裝路徑分開;
2)找到如下紅色標示內容:
Options FollowSymLinks
AllowOverride None
Order deny,allow
deny from all
把這個”deny from all”改成”allow fromall’。
Options FollowSymLinks
AllowOverride None
Order deny,allow
allow from all
以免訪問Apache根目錄下的文件時出現以下錯誤提示:
3)再找到下面這樣的行
Options FollowSymLinks indexes
把它注掉改成下面這樣
#Options FollowSymLinks indexes
Options None
以免在訪問Apache目錄時出現直接列表顯示子目錄或目錄下文件的不安全情況,如下圖樣子:
以上配置修改完成后重啟Apache服務,保證要能正常運行。
三、Apache與Tomcat的整合配置
Apache(Web Server)負責處理HTML靜態內容,Tomcat(App Server)負責處理動態內容;原理圖如下:
上述架構的原理是: 在Apache中裝載一個模塊,這個模塊叫mod_jk; Apache通過80端口負責解析任何靜態web內容; 任何不能解析的內容,用表達式告訴mod_jk,讓mod_jk派發給相關的App Server去解釋。
因此,首先把 mod_jk-1.2.31-httpd-2.2.3(可從網上搜索下載該模塊,如http://download.csdn.net/detail/shangkaikuo/4494837)拷貝到 "/Apache2.2/modules" 目錄下。接下來:
1、添加workers.properties文件
在 “/Tomcat 8.0/conf ” 文件夾下(也可以是其它目錄下)增加 workers.properties 文件,輸入以下內容。(將其中相應目錄替換成自己本地tomcat或jre安裝目錄)
#讓mod_jk模塊認識Tomcat
workers.tomcat_home=d:/webserver/tomcat/tomcat8
#讓mod_jk模塊認識JRE
workers.java_home=C:/java/jdk1.8.0_45/jre
#指定文件路徑分割符
ps=/
##
#工作端口,此端口應該與server.xml中Connector元素的AJP/1.3協議所使用的端口相匹配
worker.list=AJP13
worker.AJP13.port=8009
#Tomcat服務器的地址
worker.AJP13.host=localhost
#類型
worker.AJP13.type=ajp13
#負載平衡因數
worker.AJP13.lbfactor=1
**注意:worker.list=AJP13中,AJP13為自定義名稱,但此名稱必須與下文所述的 “/Apache 2.2/conf/httpd.conf ” 文件中,JkMount指令對應的名稱相匹配。
2、httpd.conf文件中添加配置內容
加入workers.properties文件后,可修改 “/Apache 2.2/conf/httpd.conf ” 文件,加入以下配置,注意JkMount指令中的變量必須與worker.list所配置的名稱相同。
# 此處mod_jk-1.2.31-httpd-2.2.3文件為你下載的文件
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
# 指定tomcat監聽配置文件地址
JkWorkersFile "C:/webserver/tomcat/tomcat8/conf/workers.properties"
#JkWorkersFile "C:/webserver/apache/apache22/conf/workers.properties"
# 指定日志存放位置
JkLogFile "C:/webserver/tomcat/tomcat8/logs/mod_jk2.log"
JkLogLevel info
-virtualhost *-
ServerName localhost
DocumentRoot "C:/webserver/tomcat/tomcat8/webapps"
DirectoryIndex index.html index.htm index.jsp index.action
ErrorLog logs/shsc-error_log.txt
CustomLog logs/shsc-access_log.txt common
JkMount /*WEB-INF AJP13
JkMount /*j_spring_security_check AJP13
JkMount /*.action AJP13
JkMount /servlet/* AJP13
JkMount /*.jsp AJP13
JkMount /*.do AJP13
JkMount /*.action AJP13
-/virtualhost-
上述配置中的紅色內容是為了告訴Apache哪些交給Tomcat去處理,其它的都交由Apache自身去處理。
其中綠色的兩句比較關鍵,分別告訴:Apache載入一個額外的插件,用于連接tomcat; 連接時的配置參數描述位于Tomcat安裝目錄的/conf目錄下的一個叫workers.properties文件中,mod_jk一般使用ajp13協議連接,使用的是tomcat的8009端口。
完成以上配置后,重啟 Apache、Tomcat。此時Apache、Tomcat的默認目錄為 "C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps ”,Apache使用默認的80端口、Tomcat端口改成1080或其它非8080默認端口(修改是為了安全,也可以不用修改)。在Tomcat默認目錄下添加test目錄,在該目錄下加入index.jsp頁面,然后通過http://localhost/test/index.jsp試試是否可以正常訪問,如頁面可正常訪問,證明整合配置已經成功。
至此,似乎整個配置工作已經完成,但是如果你想試著把靜態的HTML頁面放到Apache的htdocs發布目錄下,把JSP等動態內容放到Tomcat的webapps目錄下(該目錄下不存放*.html文件),然后通過http://localhost/index.html想訪問Apache目錄下的內容,你會發現404之類的不能訪問的錯誤。如何解決,這里暫時賣個關子.......如果你能看出問題,能容易解決掉,就誠摯為你點個贊!