#./configure --prefix=/usr/local/apache2 \
--enable-modules=most \
--enable-mods-shared=all \ 能夠去掉all 表示全用靜態 不去掉 表示全部模塊爲動態。
--enable-so \
用此編譯啓動Apache httpd服務時,報錯:
Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration
緣由多是沒有加載相應的apache模塊,在httpd.conf中添加以下指令能夠規避該問題:
LoadModule authz_host_module modules/mod_authz_host.so
也多是Apache編譯時選擇了只是支持加載共享模塊的模式(--enable-so),單獨編譯共享模塊,經過配置指令LoadModule進行動態加載。
一個個查找並加載這些模塊比較麻煩,能夠編譯一個靜態連接各內置模塊的httpd版本,而後替換掉原來的/usr/sbin/httpd程序,
這樣不會出現相似Invalid command 'Order', Invalid command 'AddType'這樣的錯誤。固然多進程時,共享模塊可節約內存。php
linux是最經常使用的web服務器,本節咱們將經過整合apache和tomcat構建一個java/jsp運行平臺,詳細介紹web服務器的搭建過程。
1、 apache與tomcat整合的必要性
Apache是最流行的Web服務器,開放源代碼,支持跨平臺的應用(能夠運行在幾乎全部的Linux、Unix、Windows系統平臺上),尤爲對Linux的支持至關完美。
apache的優勢有:
功能強大,apache自帶了不少功能模塊,可根據需求編譯本身須要的模塊。
配置簡單,apache的配置文件很是簡單,經過簡單的配置可實現強大功能。
速度飛快,apache處理靜態頁面文件效率很是高,能夠應對大併發和高負荷訪問請求。
性能穩定,apache在高負荷請求下性能表現卓越,執行效率很是高。
可是apache也有自身的缺點:
只支持靜態網頁,對於jsp、php等動態網頁不支持
Apache是以進程爲基礎的結構,進程要比線程消耗更多的系統開支,所以,不太適合於多處理器環境。
Tomcat是Sun和Apache合做作出來的JSPServer,有以下優勢:
支持Servlet和JSP,能夠很好的處理動態網頁。
跨平臺性好:Tomcat是Java程序,因此只要有JDK就可使用,不須要考慮操做系統平臺。
可是,tomcat也有自身缺點:
處理靜態頁面效率不高:Tomcat自己能夠作爲Web Server,可是tomcat在處理靜態頁面時沒有Apache迅速。
可配置性不強:tomcat不像Apache同樣配置簡單,穩定、強壯。
綜上所述,經過相互的整合恰好彌補了各自的缺點,經過整合能夠實現:
客戶端請求靜態頁面時,由Apache服務器響應請求。
客戶端請求動態頁面時,則是Tomcat服務器響應請求。
經過apache信息過濾,實現網站動、靜頁面分離,保證了應用的可擴展性和安全性。
既然要讓Apache和Tomcat協調工做,就必需有一個鏈接器把它們聯繫起來,這就是下面要提到的Connector,下個小節具體講述Connector的選擇和使用。css
2、 準備文件
JDK版本 jdk-8u31-linux-i586.tar.gz。
到Apache官方網站下載所須要的文件:
httpd-2.2.0.tar.gz
apache-tomcat-5.5.12.tar.gz
jakarta-tomcat-connectors-1.2.15-src.tar.gz
其中httpd和jakarta-tomcat-connectors爲源碼包,apache-tomcat爲二進制包。html
3、 Apache和Tomcat鏈接器
Apache是模塊化的web服務器,這意味着核心中只包含實現最基本功能的模塊。擴展功能能夠做爲模塊動態加載來實現。爲了讓apache和tomcat協調工做,開源愛好者們開發出了不少能夠利用的模塊,在Apache2.2版本以前,通常有兩個模塊可供選擇:mod_jk2和mod_jk,mod_jk2模塊是比較早的一種鏈接器,在動、靜頁面過濾上可使用正則表達式,所以使用配置靈活,可是mod_jk2模塊如今已經沒有開發人員支持了,版本更新也就此中止。繼承jk2模塊的是mod_jk模塊,mod_jk模塊支持Apache 1.x和2.X系列版本,如今通常都使用mod_jk作Apache和Tomcat的鏈接器。
在Apache2.2版本之後,又出現了兩種鏈接器可供選擇,那就是http-proxy和proxy-ajp模塊,apache的proxy(代理)模塊能夠實現雙向代理,功能很是強大,從鏈接器的實現原理看,用http-proxy模塊實現也是很天然的事情,只需打開tomcat的http功能,而後用apache的proxy代理功能將動態請求交給tomcat處理,而靜態數據交給apache自身就能夠了。proxy-ajp模塊是專門爲tomcat整合所開發的,經過ajp協議專門代理對tomcat的請求。根據官方的測試,proxy-ajp的執行效率要比http-proxy高,所以在Apache2.2之後的版本,用proxy-ajp模塊做爲apache和tomcat的鏈接器是個不錯的選擇。
須要說明的是,這些鏈接功能的實現,都是經過在apache中加載相應的功能模塊實現,好比上面提到的mod_jk、mod_jk二、proxy-ajp模塊,都要事先經過源碼編譯出對應的模塊,而後經過apache配置文件動態加載,實現鏈接器功能。這點也是apache的優點所在。
在下面的講述中,咱們將重點講述mod_jk做爲鏈接器的安裝配置與實現。
3、 Apache與tomcat以及JK模塊的安裝
下面以cent os 6.7操做系統爲例,詳細介紹apache+tomcat+jk的安裝過程。
1.安裝apache
Apache 目前有幾種主要版本,包括1.3.x、2.0.x以及2.2.x等等,在 1.3.x之前的版本中一般取名以apache開頭,2.x之後版本則用httpd開頭來命名。
apache的官方地址爲http://httpd.apache.org/,這裏以源碼的方式進行安裝,咱們下載的版本是Apache2.2.0,下載後的壓縮包文件爲httpd-2.2.0.tar.gz。
下面是具體的編譯安裝過程:
[root@webserver ~]#tar -zxvf httpd-2.2.0.tar.gz
[root@webserver ~]#cd httpd-2.2.0
[root@webserver ~]#./configure --prefix=/usr/local/apache2 \
--enable-modules=most \
--enable-mods-shared=all \
--enable-so \
[root@webserver ~]#make
[root@webserver ~]#make installjava
Apache安裝步驟以及選項的含義已經在第五章有詳細的介紹,這裏不在詳述,這裏咱們設定apache的安裝路徑爲/usr/local/apache2,「--enable-modules=most」表示將大部分模塊靜態編譯到httpd二進制文件中,「--enable-mods-shared=all」表示動態加載全部模塊,若是去掉-shared話,是靜態加載全部模塊。
2. 安裝GDK
下載jdk 官網地址:http://www.oracle.com/technetwor ... nloads-2133151.html 咱們在這裏下載jdk-8u31-linux-i586.tar.gz
百度網盤下載地址: http://pan.baidu.com/s/1bnfb4ez
下載後解壓:
tar zxvf jdk-8u31-linux-i586.tar.gz
mv jdk1.8.0_31 /usr/local/jdk1.8.0_31
vim /etc/profile.d/java.sh //加入以下配置
JAVA_HOME=/usr/local/jdk1.8.0_31
JAVA_BIN=/usr/local/jdk1.8.0_31/bin
JRE_HOME=/usr/local/jdk1.8.0_31/jre
PATH=$PATH:/usr/local/jdk1.8.0_31/bin:/usr/local/jdk1.8.0_31/jre/bin
CLASSPATH=/usr/local/jdk1.8.0_31/jre/lib:/usr/local/jdk1.8.0_31/lib:/usr/local/jdk1.8.0_31/jre/lib/charsets.jarlinux
. /etc/profile.d/java.shweb
若是以上配置成功,則下面的命令能夠看到java的版本:
java -version 正則表達式
3. 安裝tomcat
Tomcat 官網tomcat.apache.org
cd /usr/local/src/
wget http://apache.fayea.com/tomcat/t ... omcat-7.0.57.tar.gz
tar zxvf apache-tomcat-7.0.57.tar.gz
mv apache-tomcat-7.0.57 /usr/local/tomcat
cp -pv /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat
vim /etc/init.d/tomcat //從第二行加入
# chkconfig: 2345 63 37
# description: tomcat server init script
# Source Function Library
. /etc/init.d/functions
JAVA_HOME=/usr/local/jdk1.8.0_31
CATALINA_HOME=/usr/local/tomcat
chmod 755 /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig tomcat on
service tomcat start
ps aux |grep tomcat
瀏覽器輸入 http://ip:8080 能夠看到tomcat的歡迎頁shell
4.安裝JK模塊
爲了更靈活的使用mod_jk鏈接器,這裏咱們採用源碼方式編譯出所須要的JK模塊,JK的源碼能夠從這個地址去下載,http://archive.apache.org/dist/jakarta/tomcat-connectors/jk/,可是不保證此鏈接永久有效,這裏採用的JK版本爲jk-1.2.15。
下載後的JK源碼壓縮包文件爲jakarta-tomcat-connectors-current-src.tar.gz,這裏也將此壓縮包放到/usr/local下,具體安裝步驟以下:
[root@webserver ~]# cd /usr/local/
[root@webserver local]# tar xzvf jakarta-tomcat-connectors-1.2.15-src.tar.gz
[root@webserver local]# cd jakarta-tomcat-connectors-1.2.15-src/jk/native
[root@webserver native]#chmod 755 buildconf.sh
[root@webserver native]# ./buildconf.sh 生成文件如出錯 表示缺乏libtool庫 需安裝
[root@webserver native]#./configure \ --with-apxs=/usr/local/apache/bin/apxs #這裏指定的是apache安裝目錄中apxs的位置 編譯時如出現/bin/rm: cannot remove `libtoolT’: No such file or directory 需打開 configure,把 $RM 「$cfgfile」 那行註釋掉,從新再運行 ./configure 就能夠了
[root@webserver native]# make
[root@webserver native]# make install
[root@webserver native]# cd apache-2.0
[root@webserver native]#ll mod_jk.so
-rwxr-xr-x 1 root root 477305 Oct 9 08:49 mod_jk.soapache
能夠看到有mod_jk.so文件生成,這就是咱們須要的JK鏈接器,默認狀況下JK模塊會自動安裝到/usr/local/apache2/modules目錄下,若是沒有自動安裝到此目錄,手動拷貝此文件到modules目錄便可。vim
4、 apache與tomcat整合配置
本節詳細講述apache和tomcat整合的詳細配置過程,這裏假定web服務器的IP地址爲192.168.60.198,測試的jsp程序放置在/webdata/www目錄下,若是沒有此目錄,須要首先建立這個目錄,由於在下面配置過程當中,會陸續用到/webdata/www這個路徑。
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啓動時自動建立,這裏只需建立前兩個文件便可。
(1)tomcat workers配置文件
定義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
設置worker屬性的格式爲:
worker.worker名字.屬性=
這裏只說明ajp13協議支持的幾個經常使用屬性:
Host:監聽ajp13請求的的tomcat worker主機地址
Port:tomcat worker主機監聽的端口。默認狀況下tomcat在ajp13協議中使用的端口爲8009。
lbfactor:當tomcat用做負載均衡時,此屬性被使用,表示此tomcat worker節點的負載均衡權值。
下面是咱們的workers.properties文件內容:
[root@localhost ~]#vi /usr/local/apache2/conf/workers.properties
worker.list=tomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
(2)URL過濾規則文件uriworkermap.properties
也就是URI 映射文件,用來指定哪些 URL 由 Tomcat 處理,也能夠直接在 httpd.conf 中配置這些 URI,可是獨立這些配置的好處是 JK 模塊會按期更新該文件的內容,使得咱們修改配置的時候無需從新啓動 Apache 服務器。
下面是咱們的一個映射文件的內容:
[root@localhost ~]#vi /usr/local/apache2/conf/uriworkermap.properties
/*=tomcat1
!/*.jpg=tomcat1
!/*.gif=tomcat1
!/*.png=tomcat1
!/*.bmp=tomcat1
!/*.html=tomcat1
!/*.htm=tomcat1
!/*.swf=tomcat1
!/*.css= tomcat1
!/*.js= tomcat1
在上面的配置文件中,「/*=tomcat1」表示將全部的請求都交給tomcat1來處理,而這個「tomcat1」就是咱們在workers.properties文件中由worker.list指定的。這裏的「/」是個相對路徑,表示存放網頁的根目錄,這裏是上面假定的/webdata/www目錄。
「!/*.jpg=tomcat1」則表示在根目錄下,以「*.jpg」結尾的文件都不禁JK進行處理,其它設置含義相似,也就是讓apache處理圖片、js文件、css文件以及靜態html網頁文件。
特別注意,這裏有個前後順序的問題,JK模塊在處理網頁根目錄文件的時候,會首先過濾掉不讓本身處理的設定,剩下的設定本身所有處理。
例如上面的設定中,JK模塊會首先在/webdata/www目錄過濾掉全部圖片、flash、js文件、css文件和靜態網頁,將剩下的文件類型本身所有處理。
2.Apache的配置
(1)apache的目錄結構
上面咱們經過源碼方式把apache安裝到了/usr/local/apache2下,詳細的目錄結構以下所示:
目錄名稱 目錄做用
bin Apache二進制程序及服務程序目錄
lib 庫文件目錄
conf 主配置文件目錄
logs 日誌文件目錄
htdocs 默認web應用根目錄
cgi-bin 默認的cgi目錄
modules 動態加載模塊目錄,上面生成的JK模塊,就放在了這個目錄下。
manual Apache使用文檔目錄
man Man幫助文件目錄
error 默認的錯誤應答文件目錄
include 包含頭文件的目錄
icons Apache圖標文件目錄
(2)apache的配置文件
/usr/local/apache2/conf/httpd.conf(apache主要配置文件)
httpd.conf是包含若干指令的純文本文件,配置文件的每一行包含一個指令,指令是不區分大小寫的,可是指令的參數卻對大小寫比較敏感,「#」開頭的行被視爲註解並被忽略,可是,註解不能出如今指令的後邊。配置文件中的指令對整個web服務器都是有效的。
/usr/local/apache2/bin/apachectl (apache啓動/關閉程序)
能夠經過「/usr/local/apache2/bin/apachectl start/stop/restart」的方式啓動/關閉/重啓apache進程。apachectl實際上是個shell腳本,它能夠自動檢測httpd.conf的指令設定,讓apache在最優的方式下啓動。
/usr/local/apache2/bin/httpd
httpd是一個啓動apache的二進制文件。
/usr/local/apache2/modules
Apache是模塊化的web服務器,全部編譯的模塊默認都會放到這個目錄下,而後能夠在httpd.conf文件中指定模塊位置,動態加載!
/usr/local/apache2/logs/access_log
/usr/local/apache2/logs/error_log
這兩個分別爲apache的訪問日誌文件和錯誤日誌文件,經過監測這兩個文件,咱們能夠了解apache的運行狀態。
(3)httpd.conf基本設定
httpd.conf配置文件有3個部分組成,分別是:全局變量、配置主服務器、配置虛擬主機。
下面咱們詳解講述下/usr/local/apache2/conf/httpd.conf文件各個指令的含義。
[root@webserver ~]#vi /usr/local/apache2/conf/httpd.conf
全局變量配置部分
ServerRoot "/usr/local/apache2"
ServerRoot用於指定守護進程httpd的運行目錄, httpd在啓動以後自動將進程的當前目錄切換到這個指定的目錄下,可使用相對路徑和絕對路徑。
PidFile logs/httpd.pid
PidFile指定的文件將記錄httpd守護進程的進程號,因爲httpd能自動複製其自身,所以apache啓動後,系統中就有多個httpd進程,但只有一個進程爲最初啓動的進程,它爲其餘進程的父進程,對父進程發送信號將影響全部的httpd進程。
Timeout 300
Timeout用來定義客戶端和服務器端程序鏈接的超時間隔,單位爲秒,超過這個時間間隔,服務器將斷開與客戶端的鏈接。
KeepAlive On
KeepAlive用來定義是否容許用戶創建永久鏈接,On爲容許創建永久鏈接,Off表示拒絕用戶創建永久鏈接,例如,要打開一個含有不少圖片的頁面,徹底能夠創建一個tcp鏈接將全部信息從服務器傳到客戶端便可,而沒有必要對每一個圖片都創建一個tcp鏈接。此選項建議設置爲On。
MaxKeepAliveRequests 100
MaxKeepAliveRequests用來定義一個tcp鏈接能夠進行HTTP請求的最大次數,設置爲0表明不限制請求次數,這個選項與上面的KeepAlive相互關聯,當KeepAlive設定爲On,這個設置開始起做用。
KeepAliveTimeout 15
KeepAliveTimeout用來限定一次鏈接中最後一次請求完成後延時等待的時間,若是超過了這個等待時間,服務器就斷開鏈接。
<IfModule prefork.c>
ServerLimit 300
StartServers 5
MinSpareServers 5
MaxSpareServers 20
MaxClients 300
MaxRequestsPerChild 2000
</IfModule>
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
上面的兩段指令實際上是對web服務器的使用資源進行的設置,apache能夠運行在prefork和worker兩種模式下,能夠經過/usr/local/apache2/bin/httpd –l來肯定當前apache運行在哪一種模式,在編譯apache時,若是指定「--with-mpm=MPM」參數,那麼apache默認運行在prefork模式下,若是指定的是「--with-mpm=worker」參數,那麼默認運行在worker模式下。若是沒有作任何模式指定,那麼apache默認也運行在prefork模式下。
prefork採用預派生子進程方式,用單獨的子進程來處理不一樣的請求,進程之間彼此獨立。
StartServers表示在啓動apache時,就自動啓動的進程數目。
MinSpareServers設置了最小的空閒進程數,這樣能夠沒必要在請求到來時再產生新的進程,從而減少了系統開銷以增長性能。
MaxSpareServers設置了最大的空閒進程數,若是空閒進程數大於這個值,apache會自動關閉這些多餘進程,若是這個值設置的比小MinSpareServers,則Apache會自動把其調整爲 MinSpareServers+1。
MaxRequestsPerChild設置了每一個子進程可處理的最大請求數,也就是一個進程可以提供的最大傳輸次數,當一個進程的請求超過此數目時,程序鏈接自動關閉。0意味着無限,即子進程永不銷燬。這裏咱們設置爲2000,已經基本能知足中小型網站的須要。
MaxClients設定Apache能夠同時處理的請求數目。是對Apache性能影響最大的參數,默認值150對於中小網站基本夠了,可是對於大型網站,是遠遠不夠的,若是請求總數已達到這個值,那麼後面的請求就必須排隊,這就是系統資源充足而網站訪問卻很慢的主要緣由。理論上這個值設置的越大,能夠處理的請求的越多,可是apache默認限制不能超過256,若是要設置的值大於256,能夠直接使用ServerLimit指令加大MaxClients。這裏咱們設置的值是300。
相對於prefork,worker是全新的支持多線程和多進程的混合模型,因爲是使用線程來處理請求,因此能夠處理更多的請求,對系統資源的使用開銷也比較小。
MinSpareThreads設置了最少的空閒線程數。
MaxSpareThreads設置了最多的空閒線程數。
MaxClients設定同時連入客戶端的最大數。若是現有子進程中的線程總數不能知足請求的負載,控制進程將派生出新的子進程。默認最大子進程數是16,加大時須要經過ServerLimit來進行聲明,ServerLimit最大值爲20000,注意,若是指定了ServerLimit,那麼此值乘以ThreadsPerChild必須大於等於MaxClients,而MaxClients必須是ThreadsPerChild的整數倍,不然 Apache將會自動調節到一個相應值。
ThreadsPerChild設定每一個子進程的工做線程數,此選項在worker模式下與性能密切相關,默認最大值爲64,若是系統負載很大,不能知足需求的話,須要使用 ThreadLimit指令,此指令默認最大值爲20000,Worker模式下所能同時處理請求總數由子進程數乘以ThreadsPerChild值來肯定,保證大於等於MaxClients的設定值。
Listen 80
此指令是設置apache的監聽端口,默認的http服務都是運行在80端口下,固然也能夠修改成其它端口。
LoadModule jk_module modules/mod_jk.so
加載mod_jk模塊,上面咱們已經生成了JK模塊,而且放到了modules目錄下,這裏這需指定加載便可。
……如下省略……
配置主服務器
User nobody
Group nobody
這裏是設定執行httpd的用戶和組,默認是nobody用戶啓動apache,這裏將組也設置爲nobody。
ServerAdmin you@example.com
這裏指定的是網站管理員的郵件地址,若是apache出現問題,會發信到這個郵箱。
ServerName www.example.com:80
這裏是指定系統的主機名,若是沒有指定,會以系統的hostname爲依據。特別注意,這裏設定的主機名必定要能找到對應的IP地址(主機名和IP的對應關係能夠在/etc/hosts設置)。
UseCanonicalName Off
設定是否使用標準的主機名,若是設置爲On,則以ServerName指定的主機名爲主。若是web主機有多個主機名,請設置爲Off。
DocumentRoot "/usr/local/apache2/htdocs"
此指令很是重要,是用來放置網頁的路徑,apache會默認到這個路徑下尋找網頁,並顯示在瀏覽器上。
<Directory />
#這裏的「/」是相對路徑,表示DocumentRoot指定的目錄。
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/usr/local/apache2/htdocs">
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
上面這段信息是對DocumentRoot指定目錄的權限設定,有3個必須知道的參數:
Options 表示在這個目錄內可以執行的操做,主要有5個可設定的值:
Indexes:此參數表示,若是在DocumentRoot指定目錄下找不到以index打頭的文件時,就將此目錄下全部文件列出來,很不安全,不建議使用這個參數。
FollowSymLinks:表示在DocumentRoot指定目錄下容許符號連接到其它目錄。
ExecCGI:表示容許在DocumentRoot指定的目錄下執行cgi操做。
Includes:准許SSI(Server-side Includes)操做。
MultiViews:不經常使用,根據語言的不一樣顯示不通的信息提示。
AllowOverride 經過設定的值決定是否讀取目錄中的.htaccess文件,來改變原來所設置的權限,其實徹底能夠在httpd.conf中設置全部的權限,可是這樣對apache使用者的其它用戶若是要修改一些權限的話,就比較麻煩了,所以apache預設可讓用戶以本身目錄下的. htaccess文件複寫權限,經常使用的選項有兩個:
All:表示能夠讀取.htaccess文件的內容,修改原來的訪問權限。
None:表示不讀取.htaccess文件,權限統一控制。
Order 用來控制目錄和文件的訪問受權,經常使用的組合有2個:
Deny,Allow:表示先檢查禁止的設定,沒有禁止的所有容許。
Allow,Deny:表示先檢查容許的設定,沒有容許的所有禁止。
DirectoryIndex index.html index.htm index.jsp index.html.var
這裏是對apache打開網站默認首頁的設定,apache在打開網站首頁時通常會查找index.*之類的網頁文件,DirectoryIndex指令就是設置apache依次尋找能打開網站首頁的順序,例如咱們要打開www.ixdba.net網站,apache會首先在DocumentRoot指定的目錄下尋找index.html,也就是www.ixdba.net/index.html,若是沒有找到index.html網頁,那麼apache會接着查找index.htm,若是找到就執行www.ixdba.net/index.htm打開首頁,以此類推。
UserDir public_html
UserDir用於設定用戶我的主頁存放的目錄,默認爲「public_html」目錄,例若有個用戶爲ixdba,若是他的根目錄爲/home/ixdba,那麼他的默認主頁存放路徑爲/home/ixdba/public_html。
AccessFileName .htaccess
定義每一個用戶目錄下的訪問控制文件的文件名,默認爲.htaccess,
TypesConfig conf/mime.types
TypesConfig用來定義在哪裏查詢mime.types文件
HostnameLookups Off
用來指定apache在日誌中記錄訪問端地址是ip仍是域名,若是爲Off,則記錄IP地址,若是是On,記錄域名信息,建議設置爲Off。
ErrorLog logs/error_log
指定錯誤日誌文件的位置
CustomLog logs/access_log common
指定apache訪問日誌文件的位置和記錄日誌的模式。
ServerTokens Full
這個指令定義包含在HTTP迴應頭中的信息類型,默認爲「Full」,表示在迴應頭中將包含操做系統類型和編譯信息,能夠設爲Full|OS|Minor|Minimal|Major|Prod列各值中的一個,Full包含的信息最多,而Prod最少。
ServerSignature On
此指令有3個選項,On、Off和Email,On選項表示在apache的出錯頁面會顯示apache版本以及加載的模塊信息,Email選項與On相同,可是還會多出一個包含管理員郵件地址的mailto鏈接。Off表示不顯示任何上面信息。
Alias /icons/ "/usr/local/apache2/icons/"
< Directory "/usr/local/apache2/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
< /Directory>
上面這段信息是apache中對別名的設定,當訪問http://ip或域名/icons時,因爲Alias的緣由,apache不會去DocumentRoot指定的目錄查找文件,而是直接訪問/usr/local/apache2/icons 目錄下對應的文件信息。而<Directory>標籤就是對這個目錄權限的設定。
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
< Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
< /Directory>
這段信息和上面的Alias設定相似,只不過這個是設置cgi腳本的執行權限而已,apache默認在/usr/local/apache2/cgi-bin目錄下具備cgi腳本執行權限。
JkWorkersFile /usr/local/apache2/conf/workers.properties
JkMountFile /usr/local/apache2/conf/uriworkermap.properties
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
JkLogStampformat "[%a %b %d %H:%M:%S %Y]"
上面這5行是對JK鏈接器屬性的設定,第1、二行指定Tomcat workers配置文件以及對網頁的過濾規則,第三行指定JK模塊的日誌輸出文件,第四行指定日誌輸出級別,最後一行指定日誌輸出格式。
虛擬主機的設定
NameVirtualHost *:80
表示啓用虛擬主機,若是開啓虛擬主機,上面DocumentRoot指令指定的配置將失效,以虛擬主機中指定的DocumentRoot爲主。
<VirtualHost *:80>
ServerAdmin webmaster@ixdba.net
DocumentRoot /webdata/www
ServerName 192.168.6.13
ErrorLog logs/error_log
CustomLog logs/access_log common
JkMountFile conf/uriworkermap.properties
< /VirtualHost>
上面這段是添加一個虛擬主機,其實虛擬主機是經過不一樣的ServerName 來區分的,這裏爲了演示方便,使用IP代替域名。咱們常常看到在一個web服務器上有不少個網站,而且每一個站點都不相同,這就是經過虛擬主機技術實現的。
每一個虛擬主機用<VirtualHost>標籤設定,各個字段含義以下:
ServerAdmin:表示虛擬主機的管理員郵件地址。
DocumentRoot:指定虛擬主機站點文件路徑。
ServerName:虛擬主機的站點域名
ErrorLog:指定虛擬主機站點錯誤日誌輸出文件。
CustomLog:指定虛擬主機站點訪問日誌輸出文件。
JkMountFile:指定對此虛擬主機的URL映射文件。
例如,咱們要在一個服務器上創建3個網站,只需配置下面3個虛擬主機便可:
<VirtualHost *:80>
ServerAdmin webmaster_www@ixdba.net
DocumentRoot /webdata/html
ServerName www.ixdba.net
ErrorLog logs/www.error_log
CustomLog logs/www.access_log common
< /VirtualHost>
< VirtualHost *:80>
ServerAdmin webmaster_bbs@ixdba.net
DocumentRoot /webdata/bbs
ServerName bbs.ixdba.net
ErrorLog logs/bbs.error_log
CustomLog logs/bbs.access_log common
< /VirtualHost>
< VirtualHost *:80>
ServerAdmin webmaster_mail@ixdba.net
DocumentRoot /webdata/mail
ServerName mail.ixdba.net
ErrorLog logs/mail.error_log
CustomLog logs/mail.access_log common
< /VirtualHost>
這樣,就創建了3個虛擬主機,對應的站點域名分別是www.ixdba.net、bbs.ixdba.net、mail.ixdba.net,接下來的工做就是將這3個站點域名對應的IP所有解析到一臺web服務器便可。
3.Tomcat的配置
(1)tomcat的目錄機構
在上面的操做中,Tomcat安裝在了/usr/local/tomcat5.5.12下,tomcat每一個目錄的含義以下所示:
目錄名稱 目錄做用
bin 存放各類平臺下啓動和關閉Tomcat的腳本文件
comm 存在Tomcat服務器及全部的web應用程序能夠訪問的JAR文件
conf 存放Tomcat的各類配置文件,最重要的是 server.xml和web.xml
logs 存放Tomcat日誌文件
server 此目錄又包含lib和webapps 2個主要目錄,webapps存放Tomcat自帶的兩個WEB應用admin應用和manager應用,lib存放Tomcat服務器所需的各類JAR文件
shared 此目錄又包含lib目錄,lib目錄主要存放全部web應用均可以訪問的jar文件(可是不能被Tomcat服務器訪問)
webapps Tomcat的主要Web發佈目錄,默認狀況下把Web應用文件放於此目錄
work 存放JSP編譯後產生的class文件
(2)server.xml的配置
server.xml是tomcat的核心配置文件,爲了支持與apache的整合,在tomcat中也須要配置虛擬主機,server.xml是一個有標籤組成的文本文件,找到默認的<Host>標籤,在此標籤結尾,也就是</Host>後面增長以下虛擬主機配置:
<Host name="192.168.6.13" debug="0" appBase="/webdata/www" unpackWARs="true">
<Context path="" docBase="" debug="1"/>
< /Host>
其中:
name:指定虛擬主機名字,這裏爲了演示方便,用IP代替。
debug:指定日誌輸出級別
appBase:存放Web應用程序的基本目錄,能夠是絕對路徑或相對於$CATALINA_HOME的目錄,默認是$CATALINA_HOME/webapps。
unpackWARs:若是爲true,則tomcat會自動將WAR文件解壓後運行,不然不解壓而直接從WAR文件中運行應用程序。
autoDeploy:若是爲true,表示Tomcat啓動時會自動發佈appBase目錄下全部的Web應用(包括新加入的Web應用)
path:表示此Web應用程序的url入口,如爲「/jsp」,則請求的URL爲http://localhost/jsp/
docBase:指定此Web應用的絕對或相對路徑,也能夠爲WAR文件的路徑。
這樣tomcat的虛擬主機就建立完成了。
注意:tomcat的虛擬主機必定要和apache配置的虛擬主機指向同一個目錄,這裏統一指向到/webdata/www目錄下,因此接下來只需在/webdata/www中放置jsp程序便可。
在server.xml中,還須要注意的幾個標籤有:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
這是tomcat對http訪問協議的設定,http默認的監聽端口爲8080,在apache和tomcat整合的配置中,是不須要開啓tomcat的http監聽的,爲了安全期間,建議註釋掉此標籤,關閉http默認的監聽端口。
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
上面這段是tomcat對ajp13協議的設定,ajp13協議默認的監聽端口爲8009,整合apache和tomcat必須啓用該協議,JK模塊就是經過ajp協議實現apache和tomcat協調工做的。
(3)配置tomcat啓動腳本
Tomcat的bin目錄主要存放各類平臺下啓動和關閉tomcat的腳本文件,在linux下主要有catalina.sh、startup.sh和shutdown.sh 3個腳本,而startup.sh和shutdown.sh其實都用不一樣的參數調用了catalina.sh腳本。
Tomcat在啓動的時候會去查找jdk的安裝路徑,所以,咱們須要配置系統環境變量,這裏詳細講述下linux下環境變量的設定。
/etc/profile:是配置系統全局環境變量,系統中全部應用均可以使用這個環境變量。
~/.bash_profile:是用戶環境變量,每一個用戶能夠經過配置這個文件而設定不一樣的環境變量。
針對java環境變量的設置,能夠在/etc/profile中指定JAVA_HOME,也能夠在啓動tomcat的用戶環境變量.bash_profile中指定JAVA_HOME,這裏咱們在catalina.sh腳本中指定java環境變量,編輯catalina.sh文件,添加以下內容:
# OS specific support. $var _must_ be set to either true or false.
JAVA_HOME=/usr/local/jdk1.6.0_07
export JAVA_HOME
cygwin=false
os400=false
上面加粗部分是新加內容,其它爲catalina.sh文件原有內容。經過JAVA_HOME指定了JDK的安裝路徑,而後經過export設置生效。 4.測試apache與tomcat整合 到這裏爲止,apache與tomcat整合配置已經完畢了,接下來咱們經過添加jsp程序來測試整合的結果,看是否達到了預期的效果。 這裏咱們將/usr/local/tomcat5.5.12/webapps/ROOT/目錄下的全部文件拷貝到/webdata/www下,而後啓動tomcat與apache服務,執行步驟以下: [root@localhost~]#cp –r /usr/local/tomcat5.5.12/webapps/ROOT/* /webdata/www [root@localhost ~]# /usr/local/tomcat5.5.12/bin/startup.sh [root@localhost ~]# /usr/local/apache2/bin/apachectl start 啓動服務完畢,就能夠訪問站點了,輸入http://192.168.60.198,若是能訪問到tomcat默認的jsp頁面,表示tomcat解析成功,接着,在/webdata/www下創建一個test.html的靜態頁面,內容以下: <html> <head> < meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Administration</title> < /head> < body> apache and tomcat sussessful, This is html pages! < /body> < /html> 經過訪問http://192.168.60.198/test.html,應該出現: apache and tomcat sussessful ,This is html pages! 則表示靜態頁面也能夠正確解析。 因爲tomcat也能處理靜態的頁面和圖片等資源文件,那麼如何才能肯定這些靜態資源文件都是由apache處理了呢,知道這個很重要,由於作apache和tomcat集成的主要緣由就是爲了實現動、靜資源分離處理。 一個小技巧,能夠經過apache和tomcat提供的異常信息報錯頁面的不一樣來區分這個頁面或者文件是被誰處理的,例如輸入http://192.168.60.198/test.html,則顯示了頁面內容,那麼隨便輸入一個網頁http://192.168.60.198/test1.html,服務器上原本是不存在這個頁面的,所以會輸出報錯頁面,根據這個報錯信息就能夠判斷頁面是被apache或者tomcat處理的。同理,對於圖片、js文件和css文件等均可以經過這個方法去驗證。