由于 Tomcat 基于 Java,實際上在各種 Linux 發(fā)行版里的配置方法都大同小異,只是我看見在 Arch Linux 環(huán)境里搭建 Tomcat 的文章比較少,所以在 Arch Linux 實踐一遍然后得出此文。此文假設(shè)你對 Tomcat 并不十分了解,主要筆墨將會在 Tomcat 的配置之上。
1、安裝 Java JDK
在 Arch Linux 的 extra 源里有 jdk7-openjdk 和 openjdk6,可以直接使用 pacman 安裝,至于選用哪一個可以視具體情況而定。我安裝的是 OpenJDK 7:
$ sudo pacman -S jdk7-openjdk
2、安裝 Tomcat
同樣地,extra 源里已有 tomcat 版本5、6、7,可以根據(jù)具體情況而定,我這里安裝的是tomcat 6。
$ sudo pacman -S tomcat6
默認(rèn)情況 tomcat 6 安裝路徑為 /usr/share/tomcat6,這里羅列一下主要目錄的作用(箭頭表示目錄鏈接的實際位置):
- /usr/share/tomcat6: 程序主目錄,也是變量 $CATALINA_HOME 所指向的位置,在單 tomcat 實例的情況下,也是變量 $CATALINA_BASE 所指向的位置。
- conf -> /etc/tomcat6: 配置文件目錄。
- lib -> /usr/share/java/tomcat6: 共享jar包目錄,這些包既給 tomcat 所使用,也能給 web 應(yīng)用程序所引用。
- logs -> /var/log/tomcat6: 日志目錄,對于查找錯誤以及查看訪問記錄很有幫助。
- webapps -> /var/lib/tomcat6/webapps: 默認(rèn)的 web 應(yīng)用程序目錄,tomcat 6 自帶了幾個示例程序,下面會介紹。
現(xiàn)在可以嘗試啟動 tomcat 服務(wù):
$ sudo / etc / rc.d / tomcat start
根據(jù)安裝的 Java 運行時的不同,啟動時可能有錯誤,檢查啟動腳本的配置文件 /etc/conf.d/tomcat6 里面的 TOMCAT_JAVA_HOME 變量的值,在我的安裝中 Java 運行時應(yīng)該在 /opt/java 里(用 $ which java 就可以看到了),因此將:
TOMCAT_JAVA_HOME=/usr/lib/jvm/java-7-openjdk 更改為如下即可: TOMCAT_JAVA_HOME=/opt/java
重啟 tomcat 服務(wù):
$ sudo / etc / rc.d / tomcat6 restart
一般應(yīng)該沒有問題,打開任意瀏覽器并在地址欄里輸入 “http://localhost:8080″,如果看到 tomcat 貓即說明服務(wù)已經(jīng)安裝妥當(dāng)并且能正常運行了。
3、認(rèn)識 webapps 目錄
這個目錄位于 tomcat6 的安裝目錄之下,實際內(nèi)容位于 /var/lib/tomcat6/webapps。 webapps 目錄里每一個目錄對應(yīng)一個web應(yīng)用程序,比如 docs 目錄的訪問地址是 http://localhost:8080/docs,同理 manager 目錄的訪問地址是 http://localhost:8080/manager,其中比較特殊的是 ROOT 目錄,它對應(yīng)的訪問地址恰好是網(wǎng)站的根目錄,即 http://localhost:8080/。
Tomcat 附帶的示例程序可以逐個訪問體驗一下,其中 manager 和 host-manager 這兩個應(yīng)用程序設(shè)置了需要登錄驗證才能訪問,增加登錄用戶的方法是編輯 Tomcat 安裝目錄下的配置文件 conf/tomcat-users.xml (實際上也是文件 /etc/tomcat6/tomcat-users.xml),添加如下幾行:
<role rolename = "manager-gui" /> <role rolename = "admin-script" /> <role rolename = "admin-gui" /> <user username = "tomcat" password = "tomcat" roles = "manager-gui,admin-script,admin-gui" />
然后重啟 Tomcat 服務(wù),即可以通過用戶名 tomcat 和密碼 tomcat 登錄并訪問 manager 和 host-manager 兩個應(yīng)用程序。
每個 Java Web 應(yīng)用程序 都有如下的 目錄結(jié)構(gòu) :
- /index.html 訪客直接訪問的資源,比如靜態(tài)圖片和CSS樣式表。
- /WEB-INF/ 訪客不能直接訪問的資源。
- /WEB-INF/classes 應(yīng)用程序的 Java 源碼編譯后的class文件。
- /WEB-INF/web.xml 應(yīng)用程序的配置文件。
- /WEB-INF/lib 應(yīng)用程序所引用的包。
當(dāng)然也不是所有都是必須的,你甚至可以創(chuàng)建一個目錄,比如“hello”,然后在里面只創(chuàng)建一個 index.html 文件(內(nèi)容隨便),即可以通過 http://localhost:8080/hello/index.html 訪問了。(當(dāng)然這樣的不是Web應(yīng)用程序,此方法僅用于測試用)
下面使用 Apache Maven 創(chuàng)建一個最簡單的 Web 應(yīng)用程序,在用戶目錄里執(zhí)行如下命令創(chuàng)建 Web 應(yīng)用程序的骨架:
$ mvn archetype:generate
在交互界面中,
Choose a number or apply filter: 輸入 174,即創(chuàng)建 maven-archetype-webapp 類型項目。 Choose version: 輸入5,即版本 1.0。 Define value for property ‘groupId’: 輸入 org.test。 Define value for property ‘a(chǎn)rtifactId’: 輸入 demo。 Define value for property ‘version’: 輸入 1.0。 Define value for property ‘package’: 輸入 org.test.demo Confirm properties configuration: 直接回車
上面涉及 Maven 知識不在此文的討論范圍,如果不熟悉的話可以參閱免費的中文電子圖書 《Maven in action》 ,順帶提一下,Maven 是Java項目構(gòu)建和管理的最常用工具之一。
現(xiàn)在應(yīng)該看到一個名為 demo 的目錄,進(jìn)入后可以使用 Maven 打包項目:
$
cd
demo
$ mvn package
打包的結(jié)果是文件 ./target/demo.war,把這個文件復(fù)制到 webapps 目錄:
$ sudo cp target / demo.war / var / lib / tomcat6 / webapps /
由于 Tomcat 默認(rèn)創(chuàng)建的站點會自動部署應(yīng)用程序,所以剛才復(fù)制到 webapps 目錄的文件 demo.war 會被自動解壓縮,檢視 webapps 目錄應(yīng)該會發(fā)現(xiàn)多出一個名字為 demo 的目錄,現(xiàn)在可以在瀏覽器里嘗試訪問 http://localhost:8080/demo,應(yīng)該看到 “Hello World!”字樣,這就是剛才用 Maven 創(chuàng)建的 Web 應(yīng)用程序運行的結(jié)果。
需要說明的是,java web 應(yīng)用程序打包之后所形成的 war 文件并不是一定要解壓出來才能運行的,這點將會在下一節(jié)的配置里會講到。
4、認(rèn)識 Tomcat 的主配置文件 server.xml
這個文件位于 tomcat 6 安裝目錄之下的 conf 目錄之內(nèi),實際內(nèi)容位于 /etc/tomcat6/server.xml。
正如該文件的擴(kuò)展名所示,這是一個 xml 格式的文件,打開之后將會看到如下的結(jié)構(gòu):
<Server port = "8005" shutdown = "SHUTDOWN" > <Service name = "Catalina" > <Executor ...... /> <Connector ...... /> <Connector ...... /> <Engine name = "Catalina" ... > <Host name = "localhost" ... > <Context ... /> </Host > </Engine > </Service > </Server >
即一個由 Server->Service->Engine->Host->Context 組成的四層結(jié)構(gòu),從里層向外層分別是:
- Context: 即 Web 應(yīng)用程序,一個 Context 即對于一個 Web 應(yīng)用程序。
- Host :即虛擬主機,比如 www.dog.com 對應(yīng)一個虛擬主機,api.dog.com 對于另一個虛擬主機。一個 Host 用于定義一個虛擬主機。(所謂的”一個虛擬主機 ”可簡單理解為”一個網(wǎng)站 ”)
- Engine:一組虛擬主機的集合 。比如www.dog.com 和 api.dog.com 可以組成一組虛擬主機集合。
- Service:一組 Engine 的集合 ,包括線程池 Executor 和連接器 Connector 的定義。
CONNECTOR 的配置
一個 Connector 即一個對外界開放的端口,簡單理解就是大部分網(wǎng)絡(luò)服務(wù)程序都會遇到的 IpAddress:Port 的組合,比如 192.168.0.10:8080 就是一個端口,當(dāng)然在 Connector 里可以定義的內(nèi)容要豐富得多,即 Connector 這個 XML 節(jié)點里可以加上許多屬性。下面列舉一下常用的:
- enableLookups :(default=true) 是否允許 反向解析訪客的IP地址 ,當(dāng)你的應(yīng)用程序使用 request.getRemoteHost() 時如果只需要IP地址,建議禁用此項,這樣能節(jié)省反向域名解析的時間。
- maxPostSize :(default=2097152 即2MB) 最大允許 POST 上傳的數(shù)據(jù)大小 (單位為:字節(jié)),對于一般網(wǎng)站來說,比如有寫評論寫文章的網(wǎng)站,默認(rèn)的2MB已經(jīng)足夠,不過如果網(wǎng)站帶有圖片甚至 文件上傳 功能,則需要根據(jù)具體情況來定。
-
protocol:連接器的類型
,tomcat 6 有如下幾種選擇
- org.apache.coyote.http11.Http11Protocol:簡寫為 “HTTP/1.1″,這是默認(rèn)的連接器,一個訪客網(wǎng)絡(luò)連接需要一個線程,并發(fā)性能比較低。
- org.apache.coyote.http11.Http11NioProtocol:NIO連接器,一個由非阻塞的socket工作模式構(gòu)成的連接器,并發(fā)性能良好,純Java實現(xiàn)。
- org.apache.coyote.http11.Http11AprProtocol:APR連接器,所謂 APR 就是網(wǎng)絡(luò)上最多服務(wù)器使用的 Web 服務(wù)程序 Apache Http Server 所使用的庫,Tomcat 建議在生產(chǎn)環(huán)境使用,具體方法下面會介紹。
- redirectPort :當(dāng)用戶訪問非https的資源而該資源又需要https方式訪問時,tomcat會自動重定向到https端口,一般https使用 TCP 443端口,所以一般取值” 443 ″。
- SSLEnabled:(default=false), 設(shè)置當(dāng)前連接器是否使用安全SSL傳輸,如果設(shè)置為”true”,則應(yīng)該同時設(shè)置下面兩個屬性: scheme=”https” (default=http) 可以設(shè)置為 http 或者 https。 secure=”true” (default=false)。
- adress:連接器所綁定的IP地址 ,當(dāng)一臺服務(wù)器存在多個ip地址時可以指定其中的需要綁定的一個, 默認(rèn)不設(shè)置 該屬性的值表示綁定當(dāng)前服務(wù)器的所有ip地址。
- compressableMimeType:(default=”text/html,text/xml,text/plain”) 指定需要GZIP壓縮的資源的類型。
- compression:(default=off) 是否啟用GZIP壓縮 ,可以取值 on/off/force,設(shè)置為on之后會對 compressableMimeType 屬性指定的資源類型啟用GZIP壓縮。
- connectionTimeout :(default=”60000″) 當(dāng)訪客網(wǎng)絡(luò)連接后,服務(wù)器 等待第一行Request頭出現(xiàn)的時間 。單位是毫秒。
- executor :指定當(dāng)前連接器使用的線程池的名稱,如果指定,則忽略其他針對線程數(shù)量的設(shè)置,比如 maxThreads。
- maxThreads :(default=200) 最多可創(chuàng)建線程的數(shù)量。
- port=”80″:綁定端口 。
- keepAliveTimeout :(default=connectionTimeout),訪客完成一次請求后維持網(wǎng)絡(luò)連接的時間。
一個簡單的 Connector 定義如下:
<Connector port = "80" protocol = "HTTP/1.1" connectionTimeout = "60000" redirectPort = "443" />
EXECUTOR 的配置
Executor 用于定義共享的線程池。默認(rèn)情況下每個 Connector 都會產(chǎn)生自己的一個線程池,如果你想多個 Connector 共享一個線程池,則可以先定義一個線程池,如:
<Executor name = "tomcatThreadPool" namePrefix = "catalina-exec-" maxThreads = "150" minSpareThreads = "4" />
然后修改上述的 Connector 配置,增加 executor 屬性,修改后的配置如下:
<Connector executor = "tomcatThreadPool" port = "80" protocol = "HTTP/1.1" connectionTimeout = "60000" redirectPort = "443" />
HOST 的配置
一個 Host 配置即為一個虛擬主機,例如下面是一個簡單的 Host 配置:
<Host name = "localhost" appBase = "webapps" unpackWARs = "true" autoDeploy = "true" > <Alias > dog.com </Alias > <Valve className = "org.apache.catalina.valves.AccessLogValve" directory = "logs" prefix = "localhost_access_log." suffix = ".txt" pattern = "common" resolveHosts = "false" /> </Host >
Host 配置節(jié)點各個屬性的作用:
- name:設(shè)置虛擬主機的域名,比如 localhost 表示本機名稱,實際應(yīng)用時應(yīng)該填寫具體域名,比如 www.dog.com 或者 dog.com,當(dāng)然如果該虛擬主機是給內(nèi)部人員訪問的,也可以直接填寫服務(wù)器的 ip 地址,比如 192.168.1.10。
- autoDeploy :是否允許自動部署,默認(rèn)值是 true,即表示 Tomcat 會自動檢測 appBase 目錄下面的文件變化從而自動應(yīng)用到正在運行的 Web 應(yīng)用程序。
- unpackWARs:設(shè)置是否自動展開 war 壓縮包再運行 Web 應(yīng)用程序,默認(rèn)值是 true。
- appBase :設(shè)置 Web 應(yīng)用程序組的路徑。前面說過一個虛擬主機可以由多個 Web 應(yīng)用程序構(gòu)成,所以這里的 appBase 所指向的目錄應(yīng)該是準(zhǔn)備用于存放這一組 Web 應(yīng)用程序的目錄,而不是具體某個 Web 應(yīng)用程序的目錄本身(即使該虛擬主機只由一個 Web 應(yīng)用程序組成)。 appBase 屬性的值可以是相對于 Tomcat 安裝目錄的相對路徑,也可以是絕對路徑,需要注意的是該路徑必須是 Tomcat 有權(quán)限訪問的 ,通過 Arch Linux 源安裝的 Tomcat 是通過 tomcat 用戶運行的,因此創(chuàng)建一個新的 appBase 目錄之后可以使用 chown 命令更改目錄的所有者。
下面舉例說明如何創(chuàng)建一個新的虛擬主機 www.dog.com:
在目錄 /var/lib/tomcat6 下面可以看到安裝 Tomcat 時默認(rèn)創(chuàng)建的 webapps 目錄,為了方便管理我們即將創(chuàng)建的虛擬主機的文檔也在 /var/lib/tomcat6 里創(chuàng)建:
$ sudo mkdir dog
然后在 dog 目錄里面創(chuàng)建目錄 ROOT,再在 ROOT 里面創(chuàng)建文件 index.html(內(nèi)容隨便)。
現(xiàn)在將目錄的所有者和所有組都更改為 tomcat:
$ sudo chown -R tomcat:tomcat dog
然后在 server.xml 的 Host 節(jié)點下增加如下 Host 節(jié)點:
<Host name = "www.dog.com" appBase = "/var/lib/tomcat6/dog" > </Host >
重啟 Tomcat 服務(wù)就可以在瀏覽器里通過地址 http://www.dog.com 訪問這個新創(chuàng)建的虛擬主機了,當(dāng)然你必須要先在 /etc/hosts 文件里增加 www.dog.com 到 127.0.0.1 的解析記錄,如下:
127.0.0.1 www.dog.com
有時一個虛擬主機可能會同時綁定多個域名,比如 www.dog.com 和 dog.com,這時可以通過在 Host 配置節(jié)點里增加 Alias 實現(xiàn),比如:
<Alias > dog.com </Alias >
另外上面示例當(dāng)中的 <Valve className=… /> 配置了訪客的訪問日志的儲存位置以及文件名。
ENGINE 的配置
默認(rèn)的 Engine 節(jié)點如下:
<Engine name = "Catalina" defaultHost = "localhost" > </Engine >
這個應(yīng)該不用展開敘述了,其中 defaultHost 用于指定訪客在沒有相應(yīng)的虛擬主機時,Tomcat 默認(rèn)選擇的虛擬主機的名稱。考慮如下的情形:
假如有3個域名都 DNS 解析到你的服務(wù)器,比如 dog.com, www.dog.com, api.dog.com,當(dāng)前你只配置了虛擬主機 dog.com 和 www.dog.com,那么當(dāng)有個訪客通過 api.dog.com 訪問你的服務(wù)器時,Tomcat 就會依據(jù) defaultHost 的設(shè)置返回其中一個虛擬主機運行的結(jié)果。實際應(yīng)用中 defaultHost 應(yīng)該設(shè)置為你的主力域名,比如 www.dog.com。
5、多站點的配置:設(shè)置多個HOST節(jié)點
有時我們需要在一臺服務(wù)器上跑多個站點,通過 Tomcat 很容易實現(xiàn)這點,下面假設(shè)我們要搭建 www.dog.com 和 www.cat.com 這兩個站點。
首先要確定你的兩個域名的 DNS 已經(jīng)能正確解析到你的服務(wù)器,因為這里我們是做實驗,所以可以在本機添加域名解析。修改 /etc/hosts 文件,加入如下兩行:
127.0.0.1 www.cat.com 127.0.0.1 www.dog.com
然后在 /var/lib/tomcat6 目錄里分別創(chuàng)建名字為 cat 和 dog 的兩個目錄,然后在每個目錄里都創(chuàng)建名字為 ROOT 的目錄,并在 ROOT 里面創(chuàng)建名字為 index.html 文件(內(nèi)容隨便)。然后將目錄 cat 和 dog 的所有者和所有組都更改為 tomcat,方法參考上一節(jié),這里不再贅述。
現(xiàn)在編輯 Tomcat 的主配置文件 server.xml,在默認(rèn)的 Host 節(jié)點下面再加入如下兩個新的 Host 節(jié)點:
<Host name = "www.dog.com" appBase = "/var/lib/tomcat6/dog" autoDeploy = "true" unpackWARs = "true" > </Host > <Host name = "www.cat.com" appBase = "/var/lib/tomcat6/cat" autoDeploy = "true" unpackWARs = "true" > </Host >
在 Host 節(jié)點里面可以根據(jù)上一節(jié)的說明加入自己需要的屬性或者 Alias 和 Value 子節(jié)點。重啟 Tomcat 服務(wù),現(xiàn)在應(yīng)該可以在瀏覽器里分別通過 http://www.dog.com 和 http://www.cat.com 瀏覽這兩個站點了。
6、使用 NIO 連接器
默認(rèn)的連接器并發(fā)性能不太好,如果網(wǎng)站的并發(fā)訪問量不大則無所謂,或者在公司內(nèi)部網(wǎng)這點可能體會不出來(因為在內(nèi)部網(wǎng)可能每個請求在1秒鐘之內(nèi)就完成了),當(dāng)環(huán)境換成 Internet 之后,可能每個客戶請求在網(wǎng)絡(luò)會幾秒甚至幾十秒的延時才傳輸完成,這樣則會導(dǎo)致“許多訪客同時連接”的現(xiàn)象,當(dāng) Tomcat 的連接器所有線程都被占用的情況下,后來者(訪客)就會被卡在門外。因此我們最好在實際環(huán)境中把默認(rèn)的連接器改成 NIO 連接器(non blocking Java connector)。方法很簡單,只要把 Connector 節(jié)點的 protocol 屬性值更改為 “org.apache.coyote.http11.Http11NioProtocol” 即可,例如原先的是這樣:
<Connector port = "80" protocol = "HTTP/1.1" redirectPort = "443" />
修改為:
<Connector port = "80" protocol = "org.apache.coyote.http11.Http11NioProtocol" redirectPort = "443" />
然后重啟 Tomcat 服務(wù)器即可。
7、為網(wǎng)站添加 SSL 證書
有時網(wǎng)站可能涉及重要的業(yè)務(wù)數(shù)據(jù),在互聯(lián)網(wǎng)上傳輸這些頁面最好以 https 方式傳輸,這樣可以防止重要信息被中間環(huán)節(jié)竊取。
詳細(xì)的方法可以參考我之前的一篇文章 《添加 GoDaddy SSL 證書到你的網(wǎng)站》 ,文章介紹如何申請簽名的 SSL 證書以及如何修改 Tomcat 的配置。如果你現(xiàn)在只是想試驗一下為網(wǎng)站添加 https 功能,或者只是在公司的內(nèi)部網(wǎng)站使用上 https,則可以使用一個簡單的方法實現(xiàn):使用自簽名 SSL 證書。所謂自簽名的 SSL 證書就是自己產(chǎn)生的證書,這種證書沒有通過第三方證書商簽名認(rèn)證,所以在瀏覽這種網(wǎng)站時瀏覽器會提示證書錯誤,不過訪客是完全可以繼續(xù)瀏覽網(wǎng)站內(nèi)容。
下面假設(shè)我們要為上一節(jié)的 www.dog.com 添加SSL證書。首先使用 Java 自帶的 keytool 工具產(chǎn)生一個 keystore 文件(一種用于存放證書的文件格式),在自家目錄執(zhí)行如下命令:
$ keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
然后它會提示你設(shè)置一個密碼以及輸入DN信息:
Enter keystore password: 設(shè)置一個用于保護(hù)你keystore文件的密碼,例如123456 Re-enter new password: 重復(fù)上面的密碼 What is your first and last name? [Unknown]: www.dog.com (就是域名啦) What is the name of your organizational unit? [Unknown]: Networking 組織單位名稱(隨便) What is the name of your organization? [Unknown]: dog.com 組織名稱(隨便) What is the name of your City or Locality? [Unknown]: Shenzhen 所在城市(隨便) What is the name of your State or Province? [Unknown]: Guangdong 所在省份(隨便) What is the two-letter country code for this unit? [Unknown]: CN 所在國家的兩位代號(隨便) Is CN=www.dog.com, OU=Networking, O=dog.com, L=Shenzhen, ST=Guangdong, C=CN correct? [no]: yes 以上信息正確則輸入yes Enter key password for (RETURN if same as keystore password): 這一步直接敲回車
完成后會在當(dāng)前目錄產(chǎn)生一個 tomcat.keystore 文件。把這個文件復(fù)制到 dog 網(wǎng)站應(yīng)用程序的根目錄(即 /var/lib/tomcat6/dog):
$ sudo cp tomcat.keystore / var / lib / tomcat6 / dog
然后修改 Tomcat 的主配置文件 server.xml,在默認(rèn)的 Connector 節(jié)點之下添加如下的新 Connector 節(jié)點:
<Connector
port
=
"443"
protocol
=
"HTTP/1.1″
SSLEnabled="
true
"
scheme="
https
" secure="
true
"
clientAuth="
false
" sslProtocol="
TLS
"
keystoreFile="
/var/lib/tomcat6/dog/tomcat.keystore
"
keystorePass="
123456
" />
假如你使用的是 NIO 連接器,則應(yīng)該這樣把 protocol 屬性值換成 Http11NioProtocol,即:
<Connector
port
=
"443"
protocol
=
"Http11NioProtocol″
SSLEnabled="
true
"
scheme="
https
" secure="
true
"
clientAuth="
false
" sslProtocol="
TLS
"
keystoreFile="
/var/lib/tomcat6/dog/tomcat.keystore
"
keystorePass="
123456
" />
重啟 Tomcat 服務(wù),用瀏覽器訪問 https://www.dog.com,這時瀏覽器可能會提示證書錯誤,忽略它(對于 Firefox 瀏覽器還需要點擊 “添加例外” 按鈕才能忽略)即可以看到已經(jīng)是 https 方式在瀏覽網(wǎng)頁了。
8、使用 APR 高性能連接器
APR 即 Apache Portable Runtime ,提供了 Apache Http 的高性能特性,下面普通連接器、NIO和APR的特性簡單比較( 摘自這里 ):
Java Blocking Connector Java Nio Blocking Connector APR Connector Classname Http11Protocol Http11NioProtocol Http11AprProtocol Tomcat Version 3.x 4.x 5.x 6.x 6.x 5.5.x 6.x Support Polling NO YES YES Polling Size N/A Unlimited - Restricted by mem Unlimited - Configurable Read HTTP Request Blocking Non Blocking Blocking Read HTTP Body Blocking Sim Blocking Blocking Write HTTP Response Blocking Sim Blocking Blocking SSL Support Java SSL Java SSL OpenSSL SSL Handshake Blocking Non blocking Blocking Max Connections maxThreads See polling size See polling size
Tomcat 文檔在 NIO 和 APR 之間比較推薦后者,由于我沒有實際環(huán)境(即大量從 internet 過來的訪問)詳細(xì)測試和比較,所以我也不太清楚兩者相差多少。下面介紹使用 APR 的方法:
先安裝 APR for Tomcat 的本地庫和 OpenSSL(假如需要使用 SSL 證書并且系統(tǒng)還沒安裝的話),Arch Linux 的 local 源里面已經(jīng)存在這兩者,所以安裝方法很簡單:
$ sudo pacman -S tomcat-native $ sudo pacman -S openssl
然后修改 Tomcat 的主配置文件 server.xml,把 Connector 的 protocol 屬性值修改為“org.apache.coyote.http11.Http11AprProtocol”,修改后的配置大致如下:
<Connector port = "80" protocol = "org.apache.coyote.http11.Http11AprProtocol" redirectPort = "443" />
(注:保留 protocol=”HTTP/1.1″ 屬性值也是可以的)
然后重啟 Tomcat 服務(wù)即可,如何知道是否用上 APR 連接器呢?只要翻查 Tomcat 的日志文件就知道了,默認(rèn)的日志文件為:/var/log/tomcat6/catalina.err:
$ sudo tail / var / log / tomcat6 / catalina.err
如果在重啟 Tomcat 服務(wù)后看到日志末尾處有出現(xiàn)下面紅色字的內(nèi)容,則表示已經(jīng)成功用上 APR連接器了。
Feb 19, 2012 9:44:05 AM org.apache.coyote.http11. Http11AprProtocol start INFO: Starting Coyote HTTP/1.1 on http-80 Feb 19, 2012 9:44:05 AM org.apache.coyote.http11. Http11AprProtocol start INFO: Starting Coyote HTTP/1.1 on http-443 Feb 19, 2012 9:44:05 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 1281 ms
如果你使用了 APR 連接器同時又需要添加 SSL 證書(即需要 https 訪問功能),則需要使用 OpenSSL 的方法產(chǎn)生加密私鑰并且修改一下相應(yīng)的 Connector 的配置,仍然以上面第7節(jié)的例子,即為 www.dog.com 站點添加 SSL 證書來講解。
先用 OpenSSL 產(chǎn)生私鑰以及自簽名,在自家目錄下執(zhí)行下面命令:
# Generate private key $ openssl genrsa -out ca.key 1024 # Generate CSR $ openssl req -new -key ca.key -out ca.csr # Generate Self Signed Key $ openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
同上面第7節(jié)類似,中途也會要求你輸入 DN 信息,完成后把 ca.crt 和 ca.key 文件復(fù)制到 dog 站點應(yīng)用程序的根目錄:
$ sudo cp ca.crt / var / lib / tomcat6 / dog $ sudo cp ca.key / var / lib / tomcat6 / dog
然后修改 Connector 節(jié)點為如下:
<Connector port = "443" SSLEnabled = "true" scheme = "https" secure = "true" SSLCertificateFile = "/var/lib/tomcat6/dog/ca.crt" SSLCertificateKeyFile = "/var/lib/tomcat6/dog/ca.key" />
重啟 Tomcat 服務(wù)之后生效。
最后
此文簡單講述在 Arch Linux 環(huán)境下安裝 Tomcat 6、修改主配置文件、搭建多站點、添加 SSL 證書以及使用高性能的 NIO 和 APR 連接器的方法和步驟。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
