Tomcat简介

JAVA介绍

Java有很多常见的名词,由于java是通过过java虚拟机运行的,所以在运行java的主机上需要配置java环境,常见的名词有如下几种:

  • JDK: Java 开发工具
  • JRE: Java运行环境
  • SDK:软件开发工具,包含一系列工具包
  • J2EE: Java平台企业版
  • J2SE: Java平台标准版
  • J2ME: Java平台微型版(手机端等)

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

Tomcat安装部署

Tomcat需要java的运行环境,在安装Tomcat时,需要安装JDK.

yum install java -y

在官方下载pache-tomcat-8.5.9.tar.gz, 解压到/usr/local目录下,并创建软链接:

ln -s  /usr/local/apache-tomcat-8.5.9    /usr/local/tomcat

添加系统账户tomcat,并添加文件权限:

useradd  -u 1001 tomcat 
chown -R  tomcat:tomcat  /usr/local/tomcat

启动tomcat:

 /usr/local/tomcat/bin/startup.sh 

通过查看端口,可以发现启动了8080,8005和8009端口:

[root@localhost local]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::8009                 :::*                    LISTEN      9229/java           
tcp6       0      0 :::8080                 :::*                    LISTEN      9229/java                 
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      9229/java      

tomcat的服务器主配置文件在/usr/local/tomcat/conf/server.xml中,其中指定了默认的3个端口:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  • 8080: web服务器访问的端口
  • 8009:AJP包重定向协议端口,用于本机对其它web服务器发起的连接
  • 8005:用于发送shutdown指令,生产情况下需要修改此端口和命令。

tomcat的站点根目录为:/usr/local/tomcat/webapps/ROOT
当修改tomcat的配置文件之后需要重启服务(使用tomcat用户):

$ /usr/local/tomcat/bin/shutdown.sh
$ /usr/local/tomcat/bin/startup.sh 

提示:在生产环境中,有时通过tomcat自带的脚本是无法停止服务的,一般会自定义脚本,使用kill 命令来结束进程,也可以多次使用kill -9 命令终止服务。
在重启tomcat服务前,需要删除上次启动服务所加载的缓存文件,默认目录为/usr/local/tomcat/work/usr/local/tomcat/temp 避免缓存原因造成不必要的问题。

Tomcat 服务状态管理

Tomcat在默认的其实页面列出了后端管理的选项,生产中可以利用这些状态参数监控tomcat服务器的运行情况。在默认的设置中,是没有权限查看的,如果要实现特定IP段访问Tomcat服务器服务状态信息,需要配置tomcat-users.xml文件。
添加用的访问权限,在/usr/local/tomcat/conf/tomcat-users.xml末尾添加用户和授权:

# vim /usr/local/tomcat/conf/tomcat-users.xml 

 <role rolename="manager-gui" />
 <role rolename="admin-gui" />
 <user username="tomcat" password="1qaz2wsx" roles="manager-gui" />
</tomcat-users>

修改上述文件需要重启tomcat,配置完成之后就可以在本机访问后端的管理信息。
如果让除本机之外的其他IP段访问tomcat管理节点信息,需要修改context.xml
Tomcat在8.5.4及以上版本对<tomcat>/webapps/manager/META-INF/context.xml 做出了调整,只需要修改对应的allow IP正则部分即可:

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>

将127部分修改为其他网段的地址,\d 表示[0-9],如果只是单独修改此 context.xml 不需要重启tomcat即可生效。

为了安全,需要移除多余的后台管理组件,可以将/usr/local/tomcat/webapps目录下的host-managerexamples,docs目录直接移除。

Tomcat 安全设置

  1. 管理端口配置
    系统监听的8005端口可以实现关闭tomcat服务,这里需要关闭此端口或修改SHUTDOWN命令:
# netstat -lntp|grep 8005
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      10914/java          

在配置文件server.xml将端口修改为8792,SHUTDOWN命令修改为DONTTUCH:

<Server port="8792" shutdown="DONTTOUCH">

重启tomcat后端口改变,即时连上此端口,使用原来的SHUTDOWN命令也无法关闭tomcat了:

# netstat -lntp|grep 8792
tcp6       0      0 127.0.0.1:8792          :::*                    LISTEN      11000/java          

8009 ajp端口的管理也需要进行配置,默认情况下可以关闭此端口。
将配置文件中的此项配置注释掉:

   <!--
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
    -->
  • 禁用管理端
    • 删除安装目录下默认的conf/tomcat-user.xml文件,重启tomcat。
    • 删除tomcat安装目录webapps中的默认所有文件和目录
    • 将tomcat应用根目录配置为tomcat安装目录之外的其他目录,添加docBase:
    <Context path="webapps" docBase="/home/work/local/tomcat_webapps" debug="0
    " reloadable="false" crossContext="true" />

* 降权设置
  - 禁止root权限用户启动服务,尽量降低tomcat用户的目录访问权限。如果要使用80端口,可以配置iptables进行转发。
  - 文件列表的访问控制:`conf/web.xml`文件listings的配置文件必须为false(默认为false)禁止读取文件列表。
    ```
    <param-name>listings</param-name>
    <param-value>false</param-value>
  • 版本信息的隐藏:
    修改conf/web.xml中定向到403,404,500等错误页面到指定的错误页,从而避免tomcat返回的错误页面中暴露的系统版本信息。
    也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向。

  • 修改header请求头,修改header响应的请求头信息,在HTTP Connector配置中加入server的配置:

     <Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443"
                 server="TRYINH"
               />
    

$ curl --head http://172.16.10.60:8080/
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 10 Jan 2017 07:08:25 GMT
Server: TRYINH



####Tomcat调优
Tomcat调优主要是对Tomcat自身内部进行调优和对外部应用和组件进行调优,外部的调优主要是操作系统,JVM,Nginx代理等,Tomcat自身的调优主要是禁止DNS查询,调整线程数,压缩等。
1. 禁止DNS查询
 当web应用程序要记录客户端的信息时,会记录客户端的IP地址或者通过域名服务器查找机器名 转换为IP地址,但是DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP,这样会消耗一定的时间。修改`server.xml`文件中的Connector元素,修改属性enableLookups参数值为*false*,若为false则不进行DNS查询,而是返回其ip地址:

<Connector
port="8887" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />

* 调整线程数
   maxThreads="600"       ///最大线程数
  minSpareThreads="100"    ///初始化时创建的线程数maxSpareThreads="500"    ///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount="700"     //指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100"
maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />

* 启用压缩
Tomcat有一个通过在server.xml配置文件中设置压缩的选项。压缩可以在connector像如下设置中完成:

<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8181" compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />


* JVM堆内存优化
   Tomcat默认的内存参数比较小,在实际的生产环境中容易造成性能瓶颈,这种解决方法是通过增加JVM的栈内存实现的.在 linux系统下,内存优化需要修改TOMCAT_HOME/bin/catalina.sh,在文件末尾添加如下内容(最大堆内存是1024m):

JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"

-Xms – 指定初始化时化的堆内存
-Xmx – 指定最大堆内存







最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容