tomcat安裝配置

配置apache和tomcat一起工作:

1、安裝apr和apr-util

# wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.2.tar.gz
# wget  
# tar -zxvf apr-1.5.2.tar.gz 
# ./configure --prefix=/usr/local/apr --disable-ipv6
# make && make install
# tar -zxvf apr-util-1.5.4.tar.gz
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install

2、安裝apache

[root@liang-study ops]# tar -zxvf httpd-2.4.25.tar.gz 
[root@liang-study ops]# cd httpd-2.4.25
[root@liang-study httpd-2.4.25]# ./configure --prefix=/usr/local/apache --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer  --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm  --enable-slotmem-plain --enable-watchdog
[root@liang-study bin]# vim /etc/init.d/httpd
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: The Apache HTTP Server is an efficient and extensible  \
#	       server implementing the current HTTP standards.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd/httpd.pid
#
### BEGIN INIT INFO
# Provides: httpd
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: distcache
# Short-Description: start and stop Apache HTTP Server
# Description: The Apache HTTP Server is an extensible server 
#  implementing the current HTTP standards.
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/usr/local/apache/logs/httpd}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}

# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.  So we just do it the way init scripts
# are expected to behave here.
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

# When stopping httpd, a delay (of default 10 second) is required
# before SIGKILLing the httpd parent; this gives enough time for the
# httpd parent to SIGKILL any errant children.
stop() {
	status -p ${pidfile} $httpd > /dev/null
	if [[ $? = 0 ]]; then
		echo -n $"Stopping $prog: "
		killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
	else
		echo -n $"Stopping $prog: "
		success
	fi
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=6
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        # Force LSB behaviour from killproc
        LSB=1 killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
        if [ $RETVAL -eq 7 ]; then
            failure $"httpd shutdown"
        fi
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
        status -p ${pidfile} $httpd
	RETVAL=$?
	;;
  restart)
	stop
	start
	;;
  condrestart|try-restart)
	if status -p ${pidfile} $httpd >&/dev/null; then
		stop
		start
	fi
	;;
  force-reload|reload)
        reload
	;;
  graceful|help|configtest|fullstatus)
	$apachectl $@
	RETVAL=$?
	;;
  *)
	echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
	RETVAL=2
esac

exit $RETVAL
[root@liang-study bin]# chkconfig --add httpd
[root@liang-study bin]# chkconfig --level 2345 httpd on
[root@liang-study bin]# service httpd start

3、安裝java環境

[root@localhost ops]# wget -c 
[root@localhost ops]# tar -zxvf  jdk-7u79-linux-i586.tar.gz 
[root@localhost ops]# mv jdk1.7.0_79/ /usr/local/jdk
在/etc/profile文件末尾添加環境變量
     export JAVA_HOME=/usr/local/jdk
     export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
     PATH=$PATH:$JAVA_HOME/bin
[root@localhost ops]# source /etc/profile

4、安裝tomcat

[root@localhost ops]# wget 
[root@localhost ops]# tar -zxvf apache-tomcat-8.5.9.tar.gz
[root@localhost ops]# mv apache-tomcat-8.5.9 /usr/local/tomcat
在/etc/profile文件末尾添加環境變量
    export TOMCAT_HOME=/usr/local/tomcat
    export PATH=$PATH:$TOMECAT_HOME/bin
[root@localhost ops]# source /etc/profile
[root@localhost ops]# 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/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.9
Server built:   Dec 5 2016 20:18:12 UTC
Server number:  8.5.9.0
OS Name:        Linux
OS Version:     2.6.32-504.el6.x86_64
Architecture:   i386
JVM Version:    1.7.0_79-b15
JVM Vendor:     Oracle Corporation
[root@localhost conf]# jps   #查看JVM容器
15447 Jps
15382 Bootstrap
[root@localhost ops]# vim /etc/init.d/tomcat    #添加啓動控制腳本
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
JAVA_OPTS='-Xms256m -Xmx512m'
JAVA_HOME=/usr/local/jdk
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
exec $CATALINA_HOME/bin/catalina.sh $*
添加完成後即可通過命令控制啓動或者停止
service tomcat {start|stop|restart}

5、配置apache通過mod_proxy模塊與tomcat連接

確認apache已經裝載proxy相關模塊
[root@liang-study modules]# /usr/local/apache/bin/httpd -D DUMP_MODULES |grep proxy
 proxy_module (shared)
 proxy_connect_module (shared)
 proxy_http_module (shared)
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_express_module (shared)
 proxy_hcheck_module (shared)
5.1、使用http連接器
 在http.conf配置文件中添加include鏈接
 Include conf/extra/tomcat-http.conf
在conf/extra/下創建tomcat-http.conf配置文件
<VirtualHost *:80>
  ProxyVia Off
  ProxyRequests Off
  ProxyPass / http://192.168.210.198:8080/
  ProxyPa***everse / http://192.168.210.198:8080/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location  / >
    Require all granted
  </Location>
</VirtualHost>
之後即可重啓httpd服務,驗證是否可以正常轉發到tomcat處理
5.2、使用ajp連接器
在http.conf配置文件中添加include鏈接
    Include conf/extra/tomcat-ajp.conf
在conf/extra/下創建tomcat-http.conf配置文件
<VirtualHost *:80>
ProxyVia Off
ProxyRequests Off
ProxyPreserveHost Off
<Proxy *>
  Require all granted
</Proxy>
  ProxyPass  /  ajp://192.168.210.198:8009/
  ProxyPa***everse  /  ajp://192.168.210.198:8009/
<Location  / >
  Require all granted
</Location>
</VirtualHost>

關於如上apache指令的說明:


ProxyPreserveHost {On|Off}:如果啓用此功能,代理會將用戶請求報文中的Host:行發送給後端的服務器,而不再使用ProxyPass指定的服務器地址。如果想在反向代理中支持虛擬主機,則需要開啓此項,否則就無需打開此功能。


ProxyVia  {On|Off|Full|Block}:用於控制在http首部是否使用Via:,主要用於在多級代理中控制代理請求的流向。默認爲Off,即不啓用此功能;On表示每個請求和響應報文均添加Via:;Full表示每個Via:行都會添加當前apache服務器的版本號信息;Block表示每個代理請求報文中的Via:都會被移除。


ProxyRequests {On|Off}:是否開啓apache正向代理的功能;啓用此項時爲了代理http協議必須啓用mod_proxy_http模塊。同時,如果爲apache設置了ProxyPass,則必須將ProxyRequests設置爲Off。


ProxyPass  [path]  !|url  [key=value key=value ...]]:將後端服務器某URL與當前服務器的某虛擬路徑關聯起來作爲提供服務的路徑,path爲當前服務器上的某虛擬路徑,url爲後端服務器上某URL路徑。使用此指令時必須將ProxyRequests的值設置爲Off。需要注意的是,如果path以“/”結尾,則對應的url也必須以“/”結尾,反之亦然。

另外,mod_proxy模塊在httpd 2.1的版本之後支持與後端服務器的連接池功能,連接在按需創建在可以保存至連接池中以備進一步使用。連接池大小或其它設定可以通過在ProxyPass中使用key=value的方式定義。常用的key如下所示:

◇ min:連接池的最小容量,此值與實際連接個數無關,僅表示連接池最小要初始化的空間大小。

◇ max:連接池的最大容量,每個MPM都有自己獨立的容量;都值與MPM本身有關,如Prefork的總是爲1,而其它的則取決於ThreadsPerChild指令的值。

◇ loadfactor:用於負載均衡集羣配置中,定義對應後端服務器的權重,取值範圍爲1-100。

◇ retry:當apache將請求發送至後端服務器得到錯誤響應時等待多長時間以後再重試。單位是秒鐘。


如果Proxy指定是以balancer://開頭,即用於負載均衡集羣時,其還可以接受一些特殊的參數,如下所示:

◇lbmethod:apache實現負載均衡的調度方法,默認是byrequests,即基於權重將統計請求個數進行調度,bytraffic則執行基於權重的流量計數調度,bybusyness通過考量每個後端服務器的當前負載進行調度。

◇ maxattempts:放棄請求之前實現故障轉移的次數,默認爲1,其最大值不應該大於總的節點數。

◇ nofailover:取值爲On或Off,設置爲On時表示後端服務器故障時,用戶的session將損壞;因此,在後端服務器不支持session複製時可將其設置爲On。

◇ stickysession:調度器的sticky session的名字,根據web程序語言的不同,其值爲JSESSIONID或PHPSESSIONID。

上述指令除了能在banlancer://或ProxyPass中設定之外,也可使用ProxySet指令直接進行設置,如:

<Proxy balancer://hotcluster>

BalancerMember  http://www1.magedu.com:8080 loadfactor=1

BalancerMember  http://www2.magedu.com:8080 loadfactor=2

ProxySet  lbmethod=bytraffic

</Proxy>


ProxyPa***everse:用於讓apache調整HTTP重定向響應報文中的Location、Content-Location及URI標籤所對應的URL,在反向代理環境中必須使用此指令避免重定向報文繞過proxy服務器。


6、配置apache通過mod_jk模塊與Tomcat連接

  mod_jk是ASF的一個項目,是一個工作於apache端基於AJP協議與Tomcat通信的連接器,它是apache的一個模塊,是AJP協議的客戶端(服務端是Tomcat的AJP連接器)。

[root@liang-study ]# wget 
[root@liang-study ]# cd tomcat-connectors-1.2.37-src/native/ 
[root@liang-study ]# ./configure --with-apxs=/usr/local/apache/bin/apxs 
[root@liang-study ]# make && make install

apache要使用mod_jk連接器,需要在啓動時加載此連接器模塊。爲了便於管理與mod_jk模塊相關的配置,這裏使用一個專門的配置文件/usr/local/apache/conf/extra/httpd-jk.conf來保存相關指令及其設置。其內容如下:

# Load the mod_jk
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /usr/local/apache/conf/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA
JkMount  /status/  stat1

除了需要使用LoadModule指令在apache中裝載模塊外,mod_jk還需要在apache的主配置文件中設置其它一些指令來配置其工作屬性。如JkWorkersFile則用於指定保存了worker相關工作屬性定義的配置文件,JkLogFile則用於指定mod_jk模塊的日誌文件,JkLogLevel則可用於指定日誌的級別(info, error, debug),此外還可以使用JkRequestLogFormat自定義日誌信息格式。而JkMount(格式: JkMount  <URL to match>  <Tomcat worker name>)指定則用於控制URL與Tomcat workers的對應關係。


爲了讓apache能使用/etc/httpd/extra/httpd-jk.conf配置文件中的配置信息,需要編輯/etc/httpd/httpd.conf,添加如下一行:

Include  /usr/local/apache/conf/extra/httpd-jk.conf


對於apache代理來說,每一個後端的Tomcat實例中的engine都可以視作一個worker,而每一個worker的地址、連接器的端口等信息都需要在apache端指定以便apache可以識別並使用這些worker。約定俗成,配置這些信息的文件通常爲workers.properties,其具體路徑則是使用前面介紹過的JkWorkersFile指定的,在apache啓動時,mod_jk會掃描此文件獲取每一個worker的配置信息。比如,我們這裏使用/etc/httpd/extra/workers.properties。


workers.properties文件一般由兩類指令組成:一是mod_jk可以連接的各worker名稱列表,二是每一個worker的屬性配置信息。它們分別遵循如下使用語法。

worker.list = < a comma separated list of worker names >
worker. <worker name> .<property> = <property value>


其中worker.list指令可以重複指定多次,而worker name則是Tomcat中engine組件jvmRoute參數的值。如:

worker.TomcatA.host=172.16.100.1


根據其工作機制的不同,worker有多種不同的類型,這是需要爲每個worker定義的一項屬性woker.<work name>.type。常見的類型如下:

◇ ajp13:此類型表示當前worker爲一個運行着的Tomcat實例。

◇ lb:lb即load balancing,專用於負載均衡場景中的woker;此worker並不真正負責處理用戶請求,而是將用戶請求調度給其它類型爲ajp13的worker。

◇   status:用戶顯示分佈式環境中各實際worker工作狀態的特殊worker,它不處理任何請求,也不關聯到任何實際工作的worker實例。具體示例如請參見後文中的配置。


worker其它常見的屬性說明:

◇ host:Tomcat 7的worker實例所在的主機;

◇ port:Tomcat 7實例上AJP1.3連接器的端口;

◇ connection_pool_minsize:最少要保存在連接池中的連接的個數;默認爲pool_size/2;

◇ connection_pool_timeout:連接池中連接的超時時長;

◇ mount:由當前worker提供的context路徑,如果有多個則使用空格格開;此屬性可以由JkMount指令替代;

◇ retries:錯誤發生時的重試次數;

◇ socket_timeout:mod_jk等待worker響應的時長,默認爲0,即無限等待;

◇ socket_keepalive:是否啓用keep alive的功能,1表示啓用,0表示禁用;

◇ lbfactor:worker的權重,可以在負載均衡的應用場景中爲worker定義此屬性;


另外,在負載均衡模式中,專用的屬性還有:

◇balance_workers:用於負載均衡模式中的各worker的名稱列表,需要注意的是,出現在此處的worker名稱一定不能在任何worker.list屬性列表中定義過,並且worker.list屬性中定義的worker名字必須包含負載均衡worker。具體示例請參見後文中的定義。

◇ method:可以設定爲R、T或B;默認爲R,即根據請求的個數進行調度;T表示根據已經發送給worker的實際流量大小進行調度;B表示根據實際負載情況進行調度。

◇sticky_session:在將某請求調度至某worker後,源於此址的所有後續請求都將直接調度至此worker,實現將用戶session與某worker綁定。默認爲值爲1,即啓用此功能。如果後端的各worker之間支持session複製,則可以將此屬性值設爲0。


根據前文中的指定,這裏使用/etc/httpd/extra/workers.properties來定義一個名爲TomcatA的worker,併爲其指定幾個屬性。文件內容如下:

worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.210.198
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status

至此,一個基於mod_jk模塊與後端名爲TomcatA的worker通信的配置已經完成,重啓httpd服務即可生效。




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