Tomcat系列之服務器的基本配置及Nginx反向代理tomcat服務——(一)

Tomcat系列之服務器的基本配置及Nginx反向代理tomcat服務
2013-09-24 10:17:42
原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://freeloda.blog.51cto.com/2033581/1300915

大綱

一、Tomcat 基本配置

1.爲Tomcat提供SysV腳本 
2.catalina 腳本講解 
3.telnet 登錄管理Tomcat 
4.配置Tomcat虛擬主機 
5.Tomcat圖形管理接口

  • manager 管理應用程序的部署及監控

  • host-manager 虛擬主機的管理

6.部署JSP網站案例

  • 佈署JavaCenter Home(開源的SNS網站)

二、Nginx反向代理Tomcat服務器

1.Nginx將請求反向代理到後端Tomcat 
2.Nginx將圖片緩存到本地 
3.Nginx將請求實現動靜分離

注,實驗環境說明,操作系統:CentOS 6.4 x86_64,軟件版本:jdk-7u40、apache-tomcat-7.0.42、Nginx-1.4.2,博客中所用到的軟件請到這裏下載:http://yunpan.cn/QGBCLwrZnpLMS


一、Tomcat 基本配置

1.爲Tomcat提供SysV腳本

注,在上一篇博文中我們已經演示安裝了Tomcat,這裏我們就不在演示,不清楚的博友可以參考這篇博文,http://freeloda.blog.51cto.com/2033581/1299644,在上一篇博文中我們沒有增加,SysV腳本,在這篇博文中我們來增加一下,下面我們就來具體演示一下。

1
2
3
4
5
6
7
8
9
10
[root@tomcat ~]# vim /etc/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
CATALINA_HOME=/usr/local/tomcat #注意你的腳本路徑
export CATALINA_HOME
# export CATALINA_OPTS="-Xms128m -Xmx256m"
exec $CATALINA_HOME/bin/catalina.sh $*

下面我們來增加執行權限,並加入服務列表設置開機自啓動,

1
2
3
[root@tomcat ~]# chmod +x /etc/init.d/tomcat
[root@tomcat ~]# chkconfig --add tomcat
[root@tomcat ~]# chkconfig tomcat --list

tomcat 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉

下面我們來啓動一下Tomcat並測試一下,

1
2
3
4
5
6
[root@tomcat ~]# service tomcat start
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

查看一下啓動的端口號,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@tomcat ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name
tcp    0   0 0.0.0.0:22         0.0.0.0:*          LISTEN   1044/sshd  
tcp    0   0 127.0.0.1:25        0.0.0.0:*          LISTEN   1121/master 
tcp    0   0 127.0.0.1:6010       0.0.0.0:*          LISTEN   12988/sshd 
tcp    0   0 127.0.0.1:6011       0.0.0.0:*          LISTEN   13053/sshd 
tcp    0   0 :::8080           :::*            LISTEN   13088/java 
tcp    0   0 :::22            :::*            LISTEN   1044/sshd  
tcp    0   0 ::1:25           :::*            LISTEN   1121/master 
tcp    0   0 ::1:6010          :::*            LISTEN   12988/sshd 
tcp    0   0 ::1:6011          :::*            LISTEN   13053/sshd 
tcp    0   0 ::ffff:127.0.0.1:8005    :::*            LISTEN   13088/java 
tcp    0   0 :::8009           :::*            LISTEN   13088/java

用瀏覽器訪問一下,

測試效果

好了,到這裏Tomcat的SysV腳本增加完成,下面我們來說一下catalina腳本。

2.catalina 腳本講解

首先我們來查看一下這個腳本,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@tomcat bin]# catalina.sh -h
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr/java/jdk1.7.0_40
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
 debug       Start Catalina in a debugger
 debug -security  Debug Catalina with a security manager
 jpda start    Start Catalina under JPDA debugger
 run        Start Catalina in the current window
 run -security   Start in the current window with security manager
 start       Start Catalina in a separate window
 start -security  Start in a separate window with security manager
 stop       Stop Catalina, waiting up to 5 seconds for the process to end
 stop n      Stop Catalina, waiting up to n seconds for the process to end
 stop -force    Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
 stop n -force   Stop Catalina, wait up to n seconds and then use kill -KILL if still running
 configtest    Run a basic syntax check on server.xml - check exit code for result
 version      What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined

注,從幫助上來看,這個腳本使用還是挺簡單的。下面我們來說幾個常用的選項,

catalina.sh

  • start 啓動Tomcat

  • stop 關閉Tomcat

  • configtest 測試配置文件是否有錯

  • version 查看Tomcat版本

下面我們就來具體演示一下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@tomcat ~]# catalina.sh configtest
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr/java/jdk1.7.0_40
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
九月 21, 2013 11:08:26 下午 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
九月 21, 2013 11:08:27 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
九月 21, 2013 11:08:27 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-bio-8009"]
九月 21, 2013 11:08:27 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1269 ms

注,使用configtest選項時,得關閉Tomcat,不然會報錯。

啓動Tomcat,

1
2
3
4
5
6
[root@tomcat ~]# catalina.sh start
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr/java/jdk1.7.0_40
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

關閉Tomcat,

1
2
3
4
5
6
[root@tomcat ~]# catalina.sh stop
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr/java/jdk1.7.0_40
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

查看Tomcat版本,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@tomcat ~]# catalina.sh version
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr/java/jdk1.7.0_40
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.42
Server built:  Jul 2 2013 08:57:41
Server number: 7.0.42.0
OS Name:    Linux
OS Version:   2.6.32-358.el6.x86_64
Architecture:  amd64
JVM Version:  1.7.0_40-b43
JVM Vendor:   Oracle Corporation

好了,catalina腳本,我們就說到這裏了,下面我們來說一下telnet管理Tomcat。

3.telnet 登錄管理Tomcat

注,在說telnet管理Tomcat之前,我們得先看一下默認的配置文件,這裏面定義了默認的管理端口,

1
2
[root@tomcat ~]# vim /usr/local/tomcat/conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">

說明,定義了一個管理端口爲8005,我們可以用telnet直接登錄進本機的8005端口,來執行SHUTDOWN命令,來關閉Tomcat實例。下面我們來具體演示一下,

先安裝telnet客戶端,

1
[root@tomcat ~]# yum install -y telnet

下面我們一測試並查看,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@tomcat ~]# telnet localhost 8005
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SHUTDOWN #輸入SHOWDOWN就可以直接關閉Tomcat服務。
Connection closed by foreign host.
[root@tomcat ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name
tcp    0   0 0.0.0.0:22         0.0.0.0:*          LISTEN   1044/sshd  
tcp    0   0 127.0.0.1:25        0.0.0.0:*          LISTEN   1121/master 
tcp    0   0 127.0.0.1:6010       0.0.0.0:*          LISTEN   12988/sshd 
tcp    0   0 127.0.0.1:6011       0.0.0.0:*          LISTEN   13053/sshd 
tcp    0   0 :::22            :::*            LISTEN   1044/sshd  
tcp    0   0 ::1:25           :::*            LISTEN   1121/master 
tcp    0   0 ::1:6010          :::*            LISTEN   12988/sshd 
tcp    0   0 ::1:6011          :::*            LISTEN   13053/sshd

注,大家可以看到Tomcat服務器已經關閉。好了,telnet管理我們就說到這裏,下面我們來說一下,Tomcat虛擬主機的配置。

4.配置Tomcat虛擬主機

注,在說Tomcat虛擬主機之前,咱們來詳細的看看默認的配置文件,雖然在上一篇博客中全部有講解,在這篇博客中我還是再和大家簡單說一下,下面是默認配置文件。大家可以看到,絕大部分的配置文件是註釋,包含在<!-- -->、全是註釋。下面我們就來具體的看看,註釋我們就不說了,說具體的定義的內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
[root@tomcat ~]# cat /usr/local/tomcat/conf/server.xml
<?xml version='1.0' encoding='utf-8'?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements. See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->
<!-- Note: A "Server" is not itself a "Container", so you may not
   define subcomponents such as "Valves" at this level.
   Documentation at /docs/config/server.html
-->
<Server port="8005" shutdown="SHUTDOWN"#大家可以看到,這裏是我們剛纔講解的,定義一個管理接口
 <!-- Security listener. Documentation at /docs/config/listeners.html
 <Listener className="org.apache.catalina.security.SecurityListener" />
 -->
 <!--APR library loader. Documentation at /docs/apr.html -->
 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
 <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
 <Listener className="org.apache.catalina.core.JasperListener" />
 <!-- Prevent memory leaks due to use of particular java/javax APIs-->
 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
 <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
 <!-- Global JNDI resources
    Documentation at /docs/jndi-resources-howto.html
 -->
 <GlobalNamingResources>
  <!-- Editable user database that can also be used by
     UserDatabaseRealm to authenticate users
  -->
  <Resource name="UserDatabase" auth="Container"
       type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved"
       factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
       pathname="conf/tomcat-users.xml" />
 </GlobalNamingResources>
 <!-- A "Service" is a collection of one or more "Connectors" that share
    a single "Container" Note: A "Service" is not itself a "Container",
    so you may not define subcomponents such as "Valves" at this level.
    Documentation at /docs/config/service.html
  -->
 <Service name="Catalina"#定義一個Service命令爲Catalina
  <!--The connectors can use a shared executor, you can define one or more named thread pools-->
  <!--
  <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="150" minSpareThreads="4"/>
  -->
  <!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     Java AJP Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL HTTP/1.1 Connector on port 8080
  -->
  <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" /> #這裏定義了一個連接器,協議爲http,端口爲8080,最大連接超時爲20s,這裏還定義了一個SSL的重定向端口8443。我們可以根據需要進行修改。一般我們都用80端口與443端口。
  <!-- A "Connector" using the shared thread pool-->
  <!--
  <Connector executor="tomcatThreadPool"
        port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443" />
  -->
  <!-- Define a SSL HTTP/1.1 Connector on port 8443
     This connector uses the JSSE configuration, when using APR, the
     connector should be using the OpenSSL style configuration
     described in the APR documentation -->
  <!--
  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
        maxThreads="150" scheme="https" secure="true"
        clientAuth="false" sslProtocol="TLS" /> #這裏定義了一個SSL的案例,主要定義相關密鑰與證書。
  -->
  <!-- Define an AJP 1.3 Connector on port 8009 -->
  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #這裏定義了一個支持AJP協議的連接器。
  <!-- An Engine represents the entry point (within Catalina) that processes
     every request. The Engine implementation for Tomcat stand alone
     analyzes the HTTP headers included with the request, and passes them
     on to the appropriate Host (virtual host).
     Documentation at /docs/config/engine.html -->
  <!-- You should set jvmRoute to support load-balancing via AJP ie :
  <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
  -->
  <Engine name="Catalina" defaultHost="localhost"#這裏定義了一個名爲Catalina的引擎,並定義了一個默認主機爲localhost。
   <!--For clustering, please take a look at documentation at:
     /docs/cluster-howto.html (simple how to)
     /docs/config/cluster.html (reference documentation) -->
   <!--
   <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
   -->
   <!-- Use the LockOutRealm to prevent attempts to guess user passwords
      via a brute-force attack -->
   <Realm className="org.apache.catalina.realm.LockOutRealm">
    <!-- This Realm uses the UserDatabase configured in the global JNDI
       resources under the key "UserDatabase". Any edits
       that are performed against this UserDatabase are immediately
       available for use by the Realm. -->
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
        resourceName="UserDatabase"/>
   </Realm>
   <Host name="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="true"#這裏就是定義的虛擬主機。
    <!-- SingleSignOn valve, share authentication between web applications
       Documentation at: /docs/config/valve.html -->
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->
    <!-- Access log processes all example.
       Documentation at: /docs/config/valve.html
       Note: The pattern used is equivalent to using pattern="common" -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="localhost_access_log." suffix=".txt"
        pattern="%h %l %u %t &quot;%r&quot; %s %b" /> #這裏定義了一個日誌相關的屬性。
   </Host>
  </Engine>
 </Service>
</Server>

好了,在這裏我們又簡單的說明一下,配置文件下面我們就來具體演示一下怎麼配置虛擬主機。

首先,我們來修改一下配置文件,

[root@tomcat conf]# vim server.xml

#增加下面幾行

1
2
3
4
<Host name="www.test.com" appBase="/web/webapp"
   unpackWARs="true" autoDeploy="true">
     <Context path="/" docBase="/web/webapp" reloadable="true"/>
</Host>

接下來我們來創建文檔目錄與測試頁面,

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@tomcat ~]# mkdir -pv /web/webapp
[root@tomcat ~]# cd /web/webapp
[root@tomcat webapp]# vim index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
 <head>
  <title>JSP test page.</title>
 </head>
 <body>
  <% out.println("Welcome to test. Site, http://www.test.com"); %>
 </body>
</html>

現在我們來測試一下我們修改的配置文件,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@tomcat ~]# service tomcat stop
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
^[[A[root@tomcat service tomcat configtest
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Sep 22, 2013 2:15:47 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Sep 22, 2013 2:15:47 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-80"]
Sep 22, 2013 2:15:47 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep 22, 2013 2:15:47 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1294 ms

注,大家可以看到,我們這裏沒有報錯,說明配置都是正確的,若配置有錯誤,會在最後一行提醒你。

再下面我們來啓動Tomcat並測試一下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@tomcat ~]# service tomcat start
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@tomcat ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name
tcp    0   0 0.0.0.0:22         0.0.0.0:*          LISTEN   1044/sshd  
tcp    0   0 127.0.0.1:25        0.0.0.0:*          LISTEN   1121/master 
tcp    0   0 127.0.0.1:6010       0.0.0.0:*          LISTEN   13368/sshd 
tcp    0   0 127.0.0.1:6011       0.0.0.0:*          LISTEN   13387/sshd 
tcp    0   0 127.0.0.1:6012       0.0.0.0:*          LISTEN   13407/sshd 
tcp    0   0 :::80            :::*            LISTEN   13557/java 
tcp    0   0 :::22            :::*            LISTEN   1044/sshd  
tcp    0   0 ::1:25           :::*            LISTEN   1121/master 
tcp    0   0 ::1:6010          :::*            LISTEN   13368/sshd 
tcp    0   0 ::1:6011          :::*            LISTEN   13387/sshd 
tcp    0   0 ::1:6012          :::*            LISTEN   13407/sshd 
tcp    0   0 :::8009           :::*            LISTEN   13557/java

注,還有一點得說明一下,我這裏爲了方便測試,將默認端口8080修改爲了80端口。下面是測試效果,

test1

爲了幫助大家理解,我們這裏再次講解一下,Host組件與Context組件以及相關屬性。

Host組件:

位於Engine容器中用於接收請求並進行相應處理的主機或虛擬主機,如前面我們自定義的內容:

1
2
3
4
<Host name="www.test.com" appBase="/web/webapp"
   unpackWARs="true" autoDeploy="true">
     <Context path="/" docBase="/web/webapp" reloadable="true"/>
</Host>

常用屬性說明:

name:定義虛擬主機的域名

  • appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔後的WAR文件的目錄路徑;可以使用基於$CATALINA_HOME的相對路徑;

  • autoDeploy:在Tomcat處於運行狀態時放置於appBase目錄中的應用程序文件是否自動進行deploy;默認爲true;

  • unpackWars:在啓用此webapps時是否對WAR格式的歸檔文件先進行展開;默認爲true;

主機別名定義:

如果一個主機有兩個或兩個以上的主機名,額外的名稱均可以以別名的形式進行定義,如下: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Host name="www.test.com" appBase="webapps" unpackWARs="true">
 <Alias>web.test.com</Alias>
</Host>
Context組件:
Context在某些意義上類似於apache中的路徑別名,一個Context定義用於標識tomcat實例中的一個Web應用程序。如下面的定義:
  <!-- Tomcat Root Context -->
  <Context path="" docBase="/web/webapps"/>
  <!-- buzzin webapp -->
  <Context path="/bbs"
   docBase="/web/threads/bbs"
   reloadable="true">
  </Context>
  <!-- chat server -->
   <Context path="/chat" docBase="/web/chat"/>
  <!-- darian web -->
  <Context path="/darian" docBase="darian"/>

在Tomcat中,每一個context定義也可以使用一個單獨的XML文件進行,其文件的目錄爲$CATALINA_HOME/conf/<engine name>/<host name>。可以用於Context中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。

常用的屬性定義有:

  • docBase:相應的Web應用程序的存放位置;也可以使用相對路徑,起始路徑爲此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關係,比如,如果appBase爲deploy,而docBase絕不能爲deploy-bbs類的名字;

  • path:相對於Web服務器根路徑而言的URI;如果爲空“”,則表示爲此webapp的根路徑;如果context定義在一個單獨的xml文件中,此屬性不需要定義;

  • reloadable:是否允許重新加載此context相關的Web應用程序的類;默認爲false;

爲了便於大家理解,我們這裏再定義一個Context並測試一下,

我們先來修改一下配置文件

1
2
3
4
5
6
[root@tomcat conf]# vim server.xml
<Host name="www.test.com" appBase="/web/webapp"
    unpackWARs="true" autoDeploy="true">
      <Context path="/" docBase="/web/webapp" reloadable="true"/>
      <Context path="/test" docBase="/web/test" reloadable="true"/> #增加這一行
 </Host>

下面來增加目錄文檔與測試文件,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@tomcat webapp]# mkdir /web/test
[root@tomcat webapp]# cd /web/test
[root@tomcat test]# vim index.jsp
<%@ page language="java" %>
<html>
 <head><title>TomcatA</title></head>
 <body>
  <h1><font color="red">TomcatA </h1>
  <table align="centre" border="1">
   <tr>
    <td>Session ID</td>
  <% session.setAttribute("abc","abc"); %>
    <td><%= session.getId() %></td>
   </tr>
   <tr>
    <td>Created on</td>
    <td><%= session.getCreationTime() %></td>
   </tr>
  </table>
 </body>
</html>

測試一下配置文件是否有錯並啓動Tomcat,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@tomcat ~]# service tomcat configtest
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Sep 22, 2013 2:40:57 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Sep 22, 2013 2:40:58 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-80"]
Sep 22, 2013 2:40:58 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep 22, 2013 2:40:58 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1352 ms
[root@tomcat ~]# service tomcat start
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@tomcat ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name
tcp    0   0 0.0.0.0:22         0.0.0.0:*          LISTEN   1044/sshd  
tcp    0   0 127.0.0.1:25        0.0.0.0:*          LISTEN   1121/master 
tcp    0   0 127.0.0.1:6010       0.0.0.0:*          LISTEN   13587/sshd 
tcp    0   0 127.0.0.1:6011       0.0.0.0:*          LISTEN   13387/sshd 
tcp    0   0 127.0.0.1:6012       0.0.0.0:*          LISTEN   13407/sshd 
tcp    0   0 :::80            :::*            LISTEN   13945/java 
tcp    0   0 :::22            :::*            LISTEN   1044/sshd  
tcp    0   0 ::1:25           :::*            LISTEN   1121/master 
tcp    0   0 ::1:6010          :::*            LISTEN   13587/sshd 
tcp    0   0 ::1:6011          :::*            LISTEN   13387/sshd 
tcp    0   0 ::1:6012          :::*            LISTEN   13407/sshd 
tcp    0   0 ::ffff:127.0.0.1:8005    :::*            LISTEN   13945/java 
tcp    0   0 :::8009           :::*            LISTEN   13945/java

下面我們就用瀏覽器測試一下,

test2

好了,到這裏我們的Tomcat虛擬主機的講解就到這裏了,下面我們來說一下Tomcat圖形管理接口。

5.Tomcat圖形管理接口

  • manager 管理應用程序的部署及監控

  • host-manager 虛擬主機的管理

我們先來看一下默認的圖形配置界面,

test3

注,大家注意看右上角,我用紅色方框標記出來的,大家可以看有三個按鈕,分別爲

  • Server Status 主要用來查看服務器的狀態

  • Manager App 主要用來管理應用程序的部署及監控

  • Host Manager 主要用來管理虛擬主機

下面我們就來具休的配置一下,大家可以看到,你點擊任何一個按鈕都要輸入用戶名和密碼的,在我們配置之前我們先來說一下,Tomcat的Manager功能,

Manager的四個管理角色:

  • manager-gui - allows access to the HTML GUI and the status pages

  • manager-script - allows access to the text interface and the status pages

  • manager-jmx - allows access to the JMX proxy and the status pages

  • manager-status - allows access to the status pages only

注,這裏我說一下,上面的英文比較簡單我就不在裏翻譯了,大家自己看一下。

下面我們就來啓用manager功能,修改tomcat-user.xml文件,添加如下行:

1
2
3
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

簡單解釋一下,Tomcat有內置的角色,我們這裏增加了兩個角色一個爲manager-gui,另一個爲admin-gui,用戶名和密碼都爲tomcat。

test4

注,增加的內容一定要在<tomcat-users></tomcat-users>之間。不然,不會生效。好了,下面我們一來測試一下配置文件,並重新啓動一下Tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@tomcat ~]# service tomcat configtest
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Sep 22, 2013 3:08:44 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Sep 22, 2013 3:08:44 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-80"]
Sep 22, 2013 3:08:44 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep 22, 2013 3:08:44 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1213 ms
[root@tomcat ~]# service tomcat start
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:    /usr
Using CLASSPATH:    /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@tomcat ~]# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name
tcp    0   0 0.0.0.0:22         0.0.0.0:*          LISTEN   1044/sshd  
tcp    0   0 127.0.0.1:25        0.0.0.0:*          LISTEN   1121/master 
tcp    0   0 127.0.0.1:6010       0.0.0.0:*          LISTEN   13587/sshd 
tcp    0   0 127.0.0.1:6011       0.0.0.0:*          LISTEN   13387/sshd 
tcp    0   0 127.0.0.1:6012       0.0.0.0:*          LISTEN   13407/sshd 
tcp    0   0 :::80            :::*            LISTEN   14197/java 
tcp    0   0 :::22            :::*            LISTEN   1044/sshd  
tcp    0   0 ::1:25           :::*            LISTEN   1121/master 
tcp    0   0 ::1:6010          :::*            LISTEN   13587/sshd 
tcp    0   0 ::1:6011          :::*            LISTEN   13387/sshd 
tcp    0   0 ::1:6012          :::*            LISTEN   13407/sshd 
tcp    0   0 ::ffff:127.0.0.1:8005    :::*            LISTEN   14197/java 
tcp    0   0 :::8009           :::*            LISTEN   14197/java

好了,下面我們用瀏覽器查看一下,

注,點擊Server Status按鈕,讓你輸入用戶名和密碼。我這裏全部設置是tomcat。

test5

然後,會出現以下界面。顯示全部服務器運行狀態!大家可以仔細的看一下,我就不帶着大家看了。

manager

下面是應用程序部署管理界面,

manager2

下面是虛擬主機管理頁面,

host-manager

注,我們一般在生產環境中用的最多是應用程序部署界面,可以進行熱佈署應用程序,很方便,大家可以嘗試一下。好了,圖形管理界面我們就說到這裏了,下面我們來說一下,Tomcat的一個小案例。我們說了那麼多,有朋友就會說了,怎麼一個案例也沒有呢?下面我們就來佈署一個社交網站的案例JavaCenter Home。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章