最近幾天熟悉公司的項目環境,是nginx+tomcat+mysql模式。
關於nginx不用多說,在這個環境裏就是做一個接受http請求的一個作用然後轉發給tomcat處理,具體是在nginx.conf裏面的做一些簡單的配置。
安裝tomcat,首先得先安裝JDK,直接解壓到相關目錄,然後配置環境變量
vim /etc/profile.d/java.sh
然後source /etc/profile.d/java.sh
讓之生效。
然後安裝tomcat,這裏就不多解釋了,具體安裝參考
http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=8008&highlight=tomcat
這裏主要記錄tomcat的配置文件
具體參考地址是
http://dengxi.blog.51cto.com/4804263/1720063
tomcat的conf下有如下幾個配置文件,他們分別是
[root@ha111conf]# ls Catalina catalina.properties logging.properties tomcat-users.xml web.xml catalina.policy context.xml server.xml tomcat-users.xsd
server.xml: 主配置文件,包含Service,Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息;
context.xml:每個webapp都可以有專用的配置文件,這些配置文件通常位於webapp應用程序目錄下的WEB-INF目錄中,用於定義會話管理器、JDBC等;conf/context.xml是爲各webapp提供默認配置;
web.xml:每個webapp“部署”之後才能被訪問;此文件則用於爲所有的webapp提供默認部署相關的配置;
tomcat-users.xml:用戶認證的賬號和密碼配置文件;
catalina.policy:當使用-security選項啓動tomcat實例時會讀取此配置文件來實現其安全運行策略;
catalina.properties:Java屬性的定義文件,用於設定類加載器路徑等,以及一些JVM性能相關的調優參數;
logging.properties:日誌相關的配置信息;
下面我們詳細解析一下server.xml
1 server組件
<Server port=”8005” shutdown=”SHUTDOWN”>
這會讓Tomcat啓動一個server實例(即一個JVM),它監聽在8005端口以接收shutdown命令。各Server的定義不能使用同一個端口,這意味着如果在同一個物理機上啓動了多個Server實例,必須配置它們使用不同的端口。這個端口的定義用於爲管理員提供一個關閉此實例的便捷途徑,因此,管理員可以直接telnet至此端口使用SHUTDOWN命令關閉此實例。不過,基於安全角度的考慮,這通常不允許遠程進行,只監聽在127.0.0.1。
Server的相關屬性:
port: 接收shutdown指令的端口,默認僅允許通過本機訪問,默認爲8005;
shutdown:發往此Server用於實現關閉tomcat實例的命令字符串,默認爲SHUTDOWN;
className: 用於實現此Server容器的完全限定類的名稱,默認爲org.apache.catalina.core.StandardServer;
2 service組件
Service主要用於關聯一個引擎和與此引擎相關的連接器,每個連接器通過一個特定的端口和協議接收入站請求交將其轉發至關聯的引擎
進行處理。因此,Service要包含一個引擎、一個或多個連接器。
如:
<Servicename=”Catalina”>
這定義了一個名爲Catalina的Service,此名字也會在產生相關的日誌信息時記錄在日誌文件當中。
Service相關的屬性:
className:用於實現service的類名,一般都是org.apache.catalina.core.StandardService。
name:此服務的名稱,默認爲Catalina;
3 Connector組件
進入Tomcat的請求可以根據Tomcat的工作模式分爲如下兩類:
Tomcat作爲應用程序服務器:請求來自於前端的web服務器,這可能是Apache,IIS, Nginx等;
Tomcat作爲獨立服務器:請求來自於web瀏覽器;
Tomcat應該考慮工作情形併爲相應情形下的請求分別定義好需要的連接器才能正確接收來自於客戶端的請求。一個引擎可以有一個或多
個連接器,以適應多種請求方式。
定義連接器可以使用多種屬性,有些屬性也只適用於某特定的連接器類型。一般說來,常見於server.xml中的連接器類型通常有4種:
HTTP連接器
SSL連接器
AJP 1.3連接器
proxy連接器
如上面示例server.xml中定義的HTTP連接器:
<Connectorport="8080" protocol="HTTP/1.1" maxThreads="150"connectionTimeout="20000" redirectPort="8443"/>
定義連接器時可以配置的屬性非常多,但通常定義HTTP連接器時必須定義的屬性只有“port”,定義AJP連接器時必須定義的屬性只
有"protocol",因爲默認的協議爲HTTP。
以下爲常用屬性的說明:
address:指定連接器監聽的地址,默認爲所有地址,即0.0.0.0;
maxThreads:支持的最大併發連接數,默認爲200;
port:監聽的端口,默認爲8080;
protocol:連接器使用的協議,默認爲HTTP/1.1,定義AJP協議時通常爲AJP/1.3;
redirectPort:如果某連接器支持的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的端口;
connectionTimeout:等待客戶端發送請求的超時時間,單位爲毫秒,默認爲60000,即1分鐘;
enableLookups:是否通過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名;默認爲true;
acceptCount:設置等待隊列的最大長度;通常在tomcat所有處理線程均處於繁忙狀態時,新發來的請求將被放置於等待隊列中;
這裏定義了一個ssl連接器
<Connectorport="8443" maxThreads="150" minSpareThreads="25"maxSpareThreads="75" enableLookups="false"acceptCount="100" debug="0" scheme="https"secure="true" clientAuth="false" sslProtocol="TLS"/>
4 Engine組件
Engine是Servlet處理器的一個實例,即servlet引擎,默認爲定義在server.xml中的Catalina。Engine需要defaultHost屬性來爲其定義一
個接收所有發往非明確定義虛擬主機的請求的host組件。
如:
<Enginename="Catalina" defaultHost="localhost">
常用的屬性定義:
defaultHost:Tomcat支持基於FQDN的虛擬主機,這些虛擬主機可以通過在Engine容器中定義多個不同的Host組件來實現;但如果此引擎的連接器收到一個發往非非明確定義虛擬主機的請求時則需要將此請求發往一個默認的虛擬主機進行處理,因此,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名;
name:Engine組件的名稱,用於日誌和錯誤信息記錄時區別不同的引擎;
注,Engine容器中可以包含Realm、Host、Listener和Valve子容器。
5 Host組件
位於Engine容器中用於接收請求並進行相應處理的主機或虛擬主機,如前面默認配置文件中定義:
<Hostname="localhost" appBase="webapps" unpackWARs="true"autoDeploy="true" xmlValidation="false"xmlNamespaceAware="false"> </Host>
常用屬性說明:
appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔後的WAR文件的目錄路徑;可以使用基於$CATALINA_HOME的相對路徑;
autoDeploy:在Tomcat處於運行狀態時放置於appBase目錄中的應用程序文件是否自動進行deploy;默認爲true;
unpackWars:在啓用此webapps時是否對WAR格式的歸檔文件先進行展開;默認爲true;
下面是虛擬主機定義示例:
<Enginename="Catalina" defaultHost="localhost"> <Host name="localhost"appBase="webapps"> <Context path=""docBase="ROOT"/> <Context path="/bbs"docBase="/web/bss" reloadable="true"crossContext="true"/> </Host> <Host name="mail.test.com"appBase="/web/mail"> <Context path=""docBase="ROOT"/> </Host> </Engine>
主機別名定義:
如果一個主機有兩個或兩個以上的主機名,額外的名稱均可以以別名的形式進行定義,
<Hostname="www.test.com" appBase="webapps"unpackWARs="true"> <Alias>test.com</Alias> </Host>
未完待續~~~~