CentOS 6.5上安装并配置Tomcat

简介:

一、下载并安装jdk

到oracle官网下载jdk,然后上传到CentOS上。

1
2
3
4
5
6
7
cd  /opt/tools/
[root@mylinux1 tools] # ll jdk-8u101-linux-i586.tar.gz apache-tomcat-7.0.72.tar.gz 
-rw-r--r-- 1 root root   8931288 Sep 14 20:39 apache-tomcat-7.0.72. tar .gz
-rw-r--r-- 1 root root 183456778 Oct  4 20:19 jdk-8u101-linux-i586. tar .gz
tar  -zxf jdk-8u101-linux-i586. tar .gz 
mv  jdk1.8.0_101  /usr/local/jdk
chown  -R root:root  /usr/local/jdk

下面配置JAVA环境变量:

1
2
3
4
5
6
7
echo  '#Add java env below'  >> /etc/profile
echo  'export JAVA_HOME=/usr/local/jdk'  >> /etc/profile
echo  'export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HOME/bin:$PATH'  >> /etc/profile
echo  'export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar'  >> /etc/profile
echo  'export TOMCAT_HOME=/usr/local/tomcat'  >> /etc/profile
echo  '#java env ended'  >> /etc/profile
source  /etc/profile

[root@mylinux1 tools]# tail -6 /etc/profile

#Add java env below

export JAVA_HOME=/usr/local/jdk

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HOME/bin:$PATH

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

export TOMCAT_HOME=/usr/local/tomcat

#java env ended

测试是否安装成功:

[root@mylinux1 tools]# echo $JAVA_HOME

/usr/local/jdk

[root@mylinux1 tools]# java -version

-bash: /usr/local/jdk/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

解决方法:

yum -y install ld-linux.so.2

[root@mylinux1 tools]# java -version

java version "1.8.0_101"

Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

Java HotSpot(TM) Client VM (build 25.101-b13, mixed mode)

[root@mylinux1 tools]# jps -lvm

1180 sun.tools.jps.Jps -lvm -Denv.class.path=:/usr/local/jdk/lib:/usr/local/jdk/jre/lib:/usr/local/jdk/lib/tools.jar -Dapplication.home=/usr/local/jdk -Xms8m

二、安装tomcat

1
2
3
4
wget http: //mirrors .cnnic.cn /apache/tomcat/tomcat-7/v7 .0.72 /bin/apache-tomcat-7 .0.72. tar .gz
tar  -zxf apache-tomcat-7.0.72. tar .gz 
mv  apache-tomcat-7.0.72  /usr/local/tomcat
chown  -R root:root  /usr/local/tomcat/

三、启动tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@mylinux1 tools] # /usr/local/tomcat/bin/startup.sh 
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
Tomcat started.
[root@mylinux1 tools] # lsof -i :8080
COMMAND  PID USER   FD   TYPE DEVICE SIZE /OFF  NODE NAME
java    1266 root   46u  IPv6  13514      0t0  TCP *:webcache (LISTEN)
[root@mylinux1 tools] # netstat -lnt|grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      
[root@mylinux1 tools] # ps -ef|grep java
root       1266      1  2 21:33 pts /0     00:00:05  /usr/local/jdk/bin/java  -Djava.util.logging.config. file = /usr/local/tomcat/conf/logging .properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed. dirs = /usr/local/tomcat/endorsed  -classpath  /usr/local/tomcat/bin/bootstrap .jar: /usr/local/tomcat/bin/tomcat-juli .jar -Dcatalina.base= /usr/local/tomcat  -Dcatalina.home= /usr/local/tomcat  -Djava.io.tmpdir= /usr/local/tomcat/temp  org.apache.catalina.startup.Bootstrap start
root       1298   1052  0 21:36 pts /0     00:00:00  grep  java

wKiom1fztzWCOUhxAANmOYRH4yk809.jpg-wh_50

打开浏览器,输入http://localhost:8080访问,可以看到tomcat的默认页面。

四、tomcat配置文件

[root@mylinux1 tomcat]# ll logs/

total 24

-rw-r--r-- 1 root root 5300 Oct  4 21:33 catalina.2016-10-04.log  #命令行输出日志

-rw-r--r-- 1 root root 5300 Oct  4 21:33 catalina.out

-rw-r--r-- 1 root root    0 Oct  4 21:33 host-manager.2016-10-04.log  #jvm虚拟机管理日志

-rw-r--r-- 1 root root  445 Oct  4 21:33 localhost.2016-10-04.log  #访问日志

-rw-r--r-- 1 root root  908 Oct  4 21:39 localhost_access_log.2016-10-04.txt

-rw-r--r-- 1 root root    0 Oct  4 21:33 manager.2016-10-04.log  #管理日志

[root@mylinux1 tomcat]# ll conf/

total 208

drwxr-xr-x 3 root root   4096 Oct  4 21:33 Catalina

-rw------- 1 root root  12257 Sep 14 20:15 catalina.policy

-rw------- 1 root root   6322 Sep 14 20:15 catalina.properties

-rw------- 1 root root   1394 Sep 14 20:15 context.xml

-rw------- 1 root root   3288 Sep 14 20:15 logging.properties

-rw------- 1 root root   6613 Sep 14 20:15 server.xml

-rw------- 1 root root   1950 Sep 14 20:15 tomcat-users.xml

-rw------- 1 root root 167655 Sep 14 20:15 web.xml

下面是一个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
<!-- Server中的port监听关闭tomcat的请求, shutdown 指定向端口发送的命令串-->  
<Server port= "8005"  shutdown = "SHUTDOWN"  debug= "0" >  
   
    <Listener className= "org.apache.catalina.mbeans.ServerLifecycleListener"  
              debug= "0" />  
    <Listener className= "org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"  
              debug= "0" />  
   
    <GlobalNamingResources>  
      <Environment name= "simpleValue"  type = "java.lang.Integer"  value= "30" />  
      <Resource name= "UserDatabase"  auth= "Container"  
                type = "org.apache.catalina.UserDatabase"  
         description= "User database that can be updated and saved" >  
      < /Resource >  
      <ResourceParams name= "UserDatabase" >  
        <parameter>  
          <name>factory< /name >  
    <!--value与Logger差不多prefix和suffix解释一样,className指定value使用的类名如:org.apache.catalina.values.AccessLogValve类可以记录应用程序的访问信息,directory指定log 文件存放位置,pattern有两值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。 combined方式比common记录更多-->  
          <value>org.apache.catalina. users .MemoryUserDatabaseFactory< /value >  
        < /parameter >  
        <parameter>  
          <name>pathname< /name >  
          <value>conf /tomcat-users .xml< /value >  
        < /parameter >  
      < /ResourceParams >  
    < /GlobalNamingResources >  
   
    <Service name= "Catalina" >  
   
      <!-- Connector中的port创建服务器端的端口号,此端口监听用户端的请求  
maxThreads最大可以创建请求的线程数  
minSpareThreads服务启动时创建的处理请求的进程数  
enableLookups如果为 true ,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为 false 则不进行DNS查询,而是返回其ip地址  
redirectPort指定服务器正在处理http请求时收到一个SSL传输请求后重定向的端口号  
acceptCount指定当处理请求线程都被使用时,可以放入处理队列的数目,超出将不进行处理  
connectionTimeout指定超时的时间数(毫秒)-->  
      <Connector port= "80"  
                 maxThreads= "150"  minSpareThreads= "25"  maxSpareThreads= "75"  
                 enableLookups= "false"  redirectPort= "8443"  acceptCount= "100"  
                 debug= "0"  connectionTimeout= "20000"  
                 disableUploadTimeout= "true"  />  
      
      <Connector port= "8009"  
                 enableLookups= "false"  redirectPort= "8443"  debug= "0"  
                 protocol= "AJP/1.3"  />  
<!--Engine指定缺省的处理请求主机名,需要有一个与host元素的name属性一致-->  
      <Engine name= "Catalina"  defaultHost= "localhost"  debug= "0" >  
        <!--logger中表示日志信息className为指定logger使用的类名此类必须实现 org.apache.catalina.Logger接口prefix指定log文件的前缀,suffix指定后缀,timestamp如果为 true  则log文件名中加入时间-->  
        <Logger className= "org.apache.catalina.logger.FileLogger"  
                prefix= "catalina_log."  suffix= ".txt"  
                timestamp= "true" />  
     <!--Realm存放用户名密码及role数据库,className指定Realm使用的类名必须实现org.apache.catalina.Realm接口-->  
        <Realm className= "org.apache.catalina.realm.UserDatabaseRealm"  
                   debug= "0"  resourceName= "UserDatabase" />  
         <!--host中name是指定的主机名或ip,appBase应用程序目录,unpackWARs如果为 true 则会自动解压war文件直接运行否则不解压-->  
    <Host name= "192.168.4.247"  debug= "0"  appBase= "D:/project/hbgs_dddu/webapps"  
         unpackWARs= "true"  autoDeploy= "true"  
         xmlValidation= "false"  xmlNamespaceAware= "false" >  
    <!--logger中表示日志信息className为指定logger使用的类名此类必须实现 org.apache.catalina.Logger接口prefix指定log文件的前缀,suffix指定后缀,timestamp如果为 true  则log文件名中加入时间-->  
          <Logger className= "org.apache.catalina.logger.FileLogger"  
                   directory= "logs"    prefix= "localhost_log.zx"  suffix= ".txt"  
              timestamp= "true" />  
    <!--Context一个web应用程序通常为war文件,关于war的具体信息见servlet规范,docBase应用程序的路径或者war 文件的存放路径,path表示此web程序的url前缀,reloadable如果为 true ,Tomcat会自动检测应用程序的变化,自动装载新的应用程序,那么改变代码将不用再次重新启动tomcat-->  
    <Context path= ""  docBase= "D:/project/hbgs_dddu/webapps"  debug= "0"  reloadable= "true" />  
    < /Host >  
      < /Engine >  
    < /Service >  
< /Server >

五、配置tomcat管理用户

cd /usr/local/tomcat/conf/

vi tomcat-users.xml 

添加如下内容:

  <role rolename="manager-gui"/>

  <role rolename="admin-gui"/>

  <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

然后重启tomcat服务:

../bin/shutdown.sh 

../bin/startup.sh 

浏览器访问:

wKioL1fztxrReKuYAANyavXAdsY697.jpg-wh_50

打开tomcat默认页面,然后选择“Manager Appp”,然后在弹出的身份认证窗口中输入之前设置的密码,进行登录。

wKioL1fzuBqRv6AGAAOzUv0ghDE737.jpg-wh_50

wKiom1fzuPPS_nbTAAP0bgFt5yY790.jpg-wh_50

这个就是tomcat的管理界面,有很多配置和管理相关的操作接口,由于安全性的问题,一般在服务器上也不会启动管理界面,所以这里只是了解一下。

六、tomcat安全设置

1、Telnet管理端口保护

server.xml中默认有如下一行:

<Server port="8005" shutdown="SHUTDOWN">

这样允许任何人只要Telnet到服务器的8005端口,输入“SHUTDOWN”,回车,服务器就被关掉了。

安全设置: 1)修改默认的8005管理端口为其他端口(大于1024)

                  2)修改SHUTDOWN指令为其他字符串

示例配置:<Server port="8205" shutdown="c1gstudio"> 这样的话,只有Telnet到服务器的8205端口,输入“c1gstudio”回车,才能关闭tomcat。

2、禁用管理端

Tomcat管理台的应用文件,默认在{Tomcat安装目录}\server\webapps下,有admin和manager两个应用。
其用户密码,在{Tomcat安装目录}\conf/tomcat-users.xml中定义。在{Tomcat安装目录}\webapps下
admin.xml和manager.xml文件定义了可以通过访问/admin和/manager进入。

默认情况下,完全可以登录tomcat管理台,造成严重安全问题

安全设置: 1)删除默认的tomcat安装目录下的conf/tomcat-users.xml文件,重启tomcat后会自动生成新的文件。

                  2)删除tomcat安装目录下webapps初始化的所有目录和文件。

示例配置:<Context path="" docBase="/home/tomcat/local/tomcat_webapps" debug="0" reloadable="false" crossContext="true" />

3、文件列表访问控制

tomcat的安装目录下的conf/web.xml文件中的default部分有listings的配置。

        <init-param>

            <param-name>listings</param-name>

            <param-value>false</param-value>

        </init-param>

false为不列出目录文件,true为允许列出,默认为false。

4、隐藏版本信息

在配置中对一些常见错误进行重定向,避免当出现错误时tomcat默认显示的错误页面暴露服务器和版本信息。

安全设置: 1)修改conf/web.xml,重定向403、404以及500等错误到指定的错误页面

                  2)也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向。

示例配置:

用记事本打开\conf\web.xml文件,在文件的倒数第二行(一行之前)加入以下内容:

      <error-page>

         <error-code>403</error-code>

         <location>/forbidden.jsp</location>

      </error-page>

      <error-page>

         <error-code>404</error-code>

         <location>/notfound.jsp</location>

      </error-page>

      <error-page>

         <error-code>500</error-code>

         <location>/systembusy.jsp</location>

      </error-page>   

     注意:必须确保程序根目录下的错误页面已经存在。

5、Server header重写

安全设置:在HTTP Connector配置中加入server的配置。

示例配置: server="webserver"

说明:当tomcat HTTP端口直接提供web服务时,此配置生效。加入此配置,将会替换http响应server header部分的默认配置,默认是Apache-Coyote/1.1。

6、访问限制

通过配置信任ip的白名单,拒绝非白名单ip的访问,此配置主要是针对高保密级别的系统,一般产品不需要。

安全设置:通过配置限定访问的ip来源

示例配置:

      <Context path="" docBase=/home/tomcat/tomcat" debug="0" reloadable="false" crossContext="true">

           <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="202.96.181.210,202.110.151.*" deny="*.*.*.*" />

      </Context>

7、启停脚本权限回收

安全设置:去除其他用户对tomcat的bin目录下shutdown.sh、startup.sh以及catalina.sh的可执行权限。

示例配置:chmod -R 744 tomcat/bin/*

8、访问日志格式规范

安全设置:开启tomcat默认访问日志中的Referer和User-Agent记录

示例配置:

      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/>

说明:开启Referer和User-Agent为了一旦出现安全问题能够更好的根据日志进行问题排查。

9、关闭8009端口

8009/tcp open ajp13

安全设置:8009端口是tomcat和apache的mod_proxy_ajp,mod_jk沟通的端口,没有用到就关了。

配置示例:

tomcatpath/conf/server.xml 中的这段注释掉

<!--

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    -->

10、增加防火墙

更安全的方式是同时增加防火墙,来限制访问Tomcat的控制与连接器端口
你可以通过运行netstat -a来查看网络服务器socket及其他现有连接的清单
插入规则

iptables -A INPUT -p tcp -m tcp --dport 8005 -j DROP
保存规则
service iptables save
重载规则
service iptables restart

七、tomcat优化

1、在bin/catalina.bat文件中加入下面参数,对JVM进行优化
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
set  JAVA_OPTS=
-server 
-Xms4000M 
-Xmx4000M    #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-Xmn600M
-XX:PermSize=500M 
-XX:MaxPermSize=500M 
-Xss256K
-XX:+DisableExplicitGC 
-XX:SurvivorRatio=1 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC  
-XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSCompactAtFullCollection 
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128M  
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Djava.awt.headless= true
-Xloggc:log /gc .log

效果:

       系统响应时间增快

       JVM回收速度增快同时又不影响系统的响应率

       JVM内存最大化利用

       线程阻塞情况最小化

2、Tomcat连接参数的优化,主要是针对吞吐量做优化:

修改conf/server.xml文件,把原来

   <Connector port="8080" protocol="HTTP/1.1" />    

改成下面的内容

     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Connector port= "8080"  protocol= "HTTP/1.1"    
                URIEncoding= "UTF-8"      
                minSpareThreads= "25"     
                maxSpareThreads= "75"    
                enableLookups= "false"     
                disableUploadTimeout= "true"     
                connectionTimeout= "20000"    
                acceptCount= "300"       
                maxThreads= "300"     
                maxProcessors= "1000"     
                minProcessors= "5"    
                useURIValidationHack= "false"    
                compression= "on"     
                compressionMinSize= "2048"    
                compressableMimeType= "text/html,text/xml,text/javascript,text/css,text/plain"    
                redirectPort= "8443" />


八、JVM故障排除方法(例)

处理步骤:

1)jps 获取Java进程的PID

2)jstack pid >> java.txt导出占用高进程的线程栈

3)top -H -p PID 查看对应进程的哪个线程占用CPU过高

4)echo "obase=16; PID" |bc 将线程的PID转换为16进制

5)在第二步导出的java.txt中查找转换成为16进制的线程PID,找到对应的线程栈

6)分析负载高的线程栈都是什么业务操作,优化程序并处理问题(开发的工作)。

      



本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1858762,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
16天前
|
前端开发 Java 应用服务中间件
Springboot对MVC、tomcat扩展配置
Springboot对MVC、tomcat扩展配置
|
2天前
|
IDE JavaScript Java
如何配置tomcat
【4月更文挑战第15天】如何配置tomcat
11 2
|
2天前
|
Linux
centos 6.5安装yum
centos 6.5安装yum
16 0
|
2天前
|
运维 网络协议 Linux
【运维系列】Centos7安装并配置PXE服务
PXE是Intel开发的预启动执行环境,允许工作站通过网络从远程服务器启动操作系统。它依赖DHCP分配IP,DNS服务分配主机名,TFTP提供引导程序,HTTP/FTP/NFS提供安装源。要部署PXE服务器,需关闭selinux和防火墙,安装dhcpd、httpd、tftp、xinetd及相关服务,配置引导文件和Centos7安装源。最后,通过syslinux安装引导文件,并创建pxelinux.cfg/default配置文件来定义启动参数。
9 0
|
2天前
|
运维 网络协议 Linux
【运维系列】Centos7安装并配置postfix服务
安装CentOS7的Postfix和Dovecot,配置Postfix的`main.cf`文件,包括修改完全域名、允许所有IP、启用邮箱等。然后,配置Dovecot的多个配置文件以启用auth服务和调整相关设置。重启Postfix和Dovecot,设置开机自启,并关闭防火墙进行测试。最后,创建邮箱账户并在Windows邮箱客户端中添加账户设置。
9 0
|
2天前
|
Linux 网络安全
Centos6.5安装并配置NFS服务
该内容描述了在Linux系统中设置NFS服务的步骤。首先挂载yum源,然后安装NFS服务,并编辑配置文件。接着,重启rpcbind和NFS服务,可能需要重复此过程以解决初始可能出现的问题。此外,关闭防火墙策略,并再次重启服务。最终,根目录被共享,特定IP网段被允许访问。
9 0
|
4天前
|
存储 Linux 网络安全
centos7使用yum网络安装
这些是使用Yum进行网络安装的基本步骤。根据你的需求,你可以重复步骤3和4来安装其他软件包。请注意,执行Yum操作需要root或具有sudo权限的用户。
15 1
|
6天前
|
应用服务中间件 Linux 网络安全
Tomcat的安装(Linux版)
Tomcat的安装(Linux版)
17 0
|
10天前
|
关系型数据库 MySQL Linux
centos7安装mysql-带网盘安装包
centos7安装mysql-带网盘安装包
59 2
|
10天前
|
运维 Java 应用服务中间件
Tomcat详解(七)——Tomcat使用https配置实战
Tomcat详解(七)——Tomcat使用https配置实战
24 4