tomcat如何配置远程访问manager,以及优化

2018/07 作者:ihunter 0 0

要使用,localhost:8080/manager  需要配置tomcat_user.xml


修改成以下重启即可

   
   
   
   
  


其中admin-gui是为了能访问manger的界面,manager-secret是为了可以上传war文件

做完了以上的步骤,可以用localhost:8080/manager,或者127.0.0.1:8080/manager要远程访问manager的页面,但是换为IP:8080/manager被拒绝了

配置远程访问manager:

vi /usr/local/tomcat/conf/Catalina/localhost/manager.xml

  
               

大功告成


通过Tomcat的manager app管理web项目

1.将自己写好的项目放置到Tomcat/webapps目录下或者通过第三方IDE工具进行发布。

2.在浏览器地址栏输入http://localhost:8080/进入,点击Manager App.  设置完成,重启tomcat生效,进入tomcat首页,点击Manager App输入刚才设置的password&username即可.


启动Tomcat

双击D:\Program Files\apache-tomcat-8.0.3\bin目录下的startup.bat(也可以在cmd下执行startup.bat)。在如下界面没有异常,即表明Tomcat启动成功 

访问Tomcat

在浏览器下输入http://localhost:8080,即可看到Tomcat首页

2. 修改Tomcat端口

Tomcat默认监听的是8080端口,如果想修改此端口号,打开

D:\Program Files\apache-tomcat-8.0.3\conf\server.xml,找到如下代码段,修改port属性即可 copy

3. 修改Tomcat默认web项目

Tomcat的web项目放在D:\Program Files\apache-tomcat-8.0.3\webapps目录下,Tomcat自带了5个Web项目:docs、examples、host-manager、manager、ROOT,Tomcat启动时会部署webapps下的所有项目

在浏览器下输入http://localhost:8080/examples/index.html,即可访问examples的首页(虽然简陋了点。。。)

显然在访问http://localhost:8080的时候,Tomcat默认指向了ROOT项目,那该怎么做可以让Tomcat指向自定义项目呢?

打开D:\Program Files\apache-tomcat-8.0.3\conf\server.xml,找到如下代码段

  
   
          
          
   
          
          
   
      

在Host 标签内加入如下代码段,docBase属性可指定项目名称,将其设置为"examples"

  
 

修改后的Host 标签

  
      
      
          
          
   
          
          
   
      

重新启动Tomcat,在浏览器下输入http://localhost:8080,即可看到examples的首页

4. 修改Session有效时间

默认情况下,Session有效时间为30分钟。打开\conf\web.xml,修改session-timeout标签的值

  
        30  

5.认识 Tomcat 的主配置文件 server.xml

  
      
          
          
          
          
              
                  
              
          
      
即一个由 Server->Service->Engine->Host->Context 组成的四层结构,从里层向外层分别是:
Context: 即 Web 应用程序,一个 Context 即对于一个 Web 应用程序。
Host:即虚拟主机,比如 www.dog.com 对应一个虚拟主机,api.dog.com 对于另一个虚拟主机。一个 Host 用于定义一个虚拟主机。(所谓的”一个虚拟主机”可简单理解为”一个网站”)
Engine:一组虚拟主机的集合。比如www.dog.com 和 api.dog.com 可以组成一组虚拟主机集合。
Service:一组 Engine 的集合,包括线程池 Executor 和连接器 Connector 的定义。
CONNECTOR 的配置
一个 Connector 即一个对外界开放的端口,简单理解就是大部分网络服务程序都会遇到的 IpAddress:Port 的组合,比如 192.168.0.10:8080 就是一个端口,当然在 Connector 里可以定义的内容要丰富得多,即 Connector 这个 XML 节点里可以加上许多属性。下面列举一下常用的:
enableLookups:(default=true) 是否允许反向解析访客的IP地址,当你的应用程序使用 request.getRemoteHost() 时如果只需要IP地址,建议禁用此项,这样能节省反向域名解析的时间。
maxPostSize:(default=2097152 即2MB) 最大允许 POST 上传的数据大小(单位为:字节),对于一般网站来说,比如有写评论写文章的网站,默认的2MB已经足够,不过如果网站带有图片甚至文件上传功能,则需要根据具体情况来定。
protocol:连接器的类型,tomcat 6 有如下几种选择
org.apache.coyote.http11.Http11Protocol:简写为 “HTTP/1.1″,这是默认的连接器,一个访客网络连接需要一个线程,并发性能比较低。
org.apache.coyote.http11.Http11NioProtocol:NIO连接器,一个由非阻塞的socket工作模式构成的连接器,并发性能良好,纯Java实现。
org.apache.coyote.http11.Http11AprProtocol:APR连接器,所谓 APR 就是网络上最多服务器使用的 Web 服务程序 Apache Http Server 所使用的库,Tomcat 建议在生产环境使用,具体方法下面会介绍。
redirectPort:当用户访问非https的资源而该资源又需要https方式访问时,tomcat会自动重定向到https端口,一般https使用 TCP 443端口,所以一般取值”443″。
SSLEnabled:(default=false),设置当前连接器是否使用安全SSL传输,如果设置为”true”,则应该同时设置下面两个属性: scheme=”https” (default=http) 可以设置为 http 或者 https。 secure=”true” (default=false)。
adress:连接器所绑定的IP地址,当一台服务器存在多个ip地址时可以指定其中的需要绑定的一个,默认不设置该属性的值表示绑定当前服务器的所有ip地址。
compressableMimeType:(default=”text/html,text/xml,text/plain”) 指定需要GZIP压缩的资源的类型。
compression:(default=off) 是否启用GZIP压缩,可以取值 on/off/force,设置为on之后会对 compressableMimeType 属性指定的资源类型启用GZIP压缩。
connectionTimeout:(default=”60000″) 当访客网络连接后,服务器等待第一行Request头出现的时间。单位是毫秒。
executor:指定当前连接器使用的线程池的名称,如果指定,则忽略其他针对线程数量的设置,比如 maxThreads。
maxThreads:(default=200) 最多可创建线程的数量。
port=”80″:绑定端口。
keepAliveTimeout:(default=connectionTimeout),访客完成一次请求后维持网络连接的时间。
一个简单的 Connector 定义如下:
EXECUTOR 的配置
Executor 用于定义共享的线程池。默认情况下每个 Connector 都会产生自己的一个线程池,如果你想多个 Connector 共享一个线程池,则可以先定义一个线程池,如:

  
然后修改上述的 Connector 配置,增加 executor 属性,修改后的配置如下:  
  
HOST 的配置
一个 Host 配置即为一个虚拟主机,例如下面是一个简单的 Host 配置:

  
        dog.com  
          
  
Host 配置节点各个属性的作用:
name:设置虚拟主机的域名,比如 localhost 表示本机名称,实际应用时应该填写具体域名,比如 www.dog.com 或者 dog.com,当然如果该虚拟主机是给内部人员访问的,也可以直接填写服务器的 ip 地址,比如 192.168.1.10。
autoDeploy:是否允许自动部署,默认值是 true,即表示 Tomcat 会自动检测 appBase 目录下面的文件变化从而自动应用到正在运行的 Web 应用程序。
unpackWARs:设置是否自动展开 war 压缩包再运行 Web 应用程序,默认值是 true。
appBase:设置 Web 应用程序组的路径。前面说过一个虚拟主机可以由多个 Web 应用程序构成,所以这里的 appBase 所指向的目录应该是准备用于存放这一组 Web 应用程序的目录,而不是具体某个 Web 应用程序的目录本身(即使该虚拟主机只由一个 Web 应用程序组成)。appBase 属性的值可以是相对于 Tomcat 安装目录的相对路径,也可以是绝对路径,需要注意的是该路径必须是 Tomcat 有权限访问的,通过 Arch Linux 源安装的 Tomcat 是通过 tomcat 用户运行的,因此创建一个新的 appBase 目录之后可以使用 chown 命令更改目录的所有者。
下面举例说明如何创建一个新的虚拟主机 www.dog.com:
在目录 /var/lib/tomcat6 下面可以看到安装 Tomcat 时默认创建的 webapps 目录,为了方便管理我们即将创建的虚拟主机的文档也在 /var/lib/tomcat6 里创建:
$ sudo mkdir dog
然后在 dog 目录里面创建目录 ROOT,再在 ROOT 里面创建文件 index.html(内容随便)。
现在将目录的所有者和所有组都更改为 tomcat:
$ sudo chown -R tomcat:tomcat dog
然后在 server.xml 的 Host 节点下增加如下 Host 节点:

  
  
重启 Tomcat 服务就可以在浏览器里通过地址 http://www.dog.com 访问这个新创建的虚拟主机了,当然你必须要先在 /etc/hosts 文件里增加 www.dog.com 到 127.0.0.1 的解析记录,如下:
127.0.0.1    www.dog.com
有时一个虚拟主机可能会同时绑定多个域名,比如 www.dog.com 和 dog.com,这时可以通过在 Host 配置节点里增加 Alias 实现,比如:

>dog.com>  
另外上面示例当中的  配置了访客的访问日志的储存位置以及文件名。

ENGINE 的配置
默认的 Engine 节点如下:

  
  

这个应该不用展开叙述了,其中 defaultHost 用于指定访客在没有相应的虚拟主机时,Tomcat 默认选择的虚拟主机的名称。考虑如下的情形:
假如有3个域名都 DNS 解析到你的服务器,比如 dog.com, www.dog.com, api.dog.com,当前你只配置了虚拟主机 dog.com 和 www.dog.com,那么当有个访客通过 api.dog.com 访问你的服务器时,Tomcat 就会依据 defaultHost 的设置返回其中一个虚拟主机运行的结果。实际应用中 defaultHost 应该设置为你的主力域名,比如 www.dog.com。

6.多站点的配置:设置多个HOST节点

有时我们需要在一台服务器上跑多个站点,通过 Tomcat 很容易实现这点,下面假设我们要搭建 www.dog.com 和 www.cat.com 这两个站点。
首先要确定你的两个域名的 DNS 已经能正确解析到你的服务器,因为这里我们是做实验,所以可以在本机添加域名解析。修改 /etc/hosts 文件,加入如下两行:
127.0.0.1    www.cat.com
127.0.0.1    www.dog.com
然后在 /var/lib/tomcat6 目录里分别创建名字为 cat 和 dog 的两个目录,然后在每个目录里都创建名字为 ROOT 的目录,并在 ROOT 里面创建名字为 index.html 文件(内容随便)。然后将目录 cat 和 dog 的所有者和所有组都更改为 tomcat,方法参考上一节,这里不再赘述。
现在编辑 Tomcat 的主配置文件 server.xml,在默认的 Host 节点下面再加入如下两个新的 Host 节点:
[html] view plain copy
  
  
  
  
在 Host 节点里面可以根据上一节的说明加入自己需要的属性或者 Alias 和 Value 子节点。重启 Tomcat 服务,现在应该可以在浏览器里分别通过 http://www.dog.com 和 http://www.cat.com 浏览这两个站点了。


Tomcat 安全配置与优化

1.禁用Tomcat管理界面

    生产环境一般不适用Tomcat默认的管理界面,这些页面存放在Tomcat 的webapps安装目录下,

    把该目录下的所有文件删除即可:rm -rf  /usr/local/tomcat8/webapps/*

    另外删除相关的配置文件 host-manager.xml 和 manager.xml,在Tomcat 安装目录 conf/Catalina/localhost目录下。

   注释或删除tomcat_user.xml 中的所有用户权限。

2.应用程序安全

   tomcat默认 开启了对war热部署。为了防止被植入木马恶意攻击,我们要关闭war包自动部署。

   关闭自动加载最新代码(设置reloadable)

修改实例:                          

3.更改关闭Tomcat的指令

修改实例:
   
或者禁用8005端口
   

4.连接池配置

 使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。
 编辑配置文件 server.xml : vi  /usr/local/tomcat8/conf/server.xml
 4.1 打开被注释的默认连接池配置
默认配置:                                              

  
修改实例:           

   

参数讲解:
 name: 线程名称
 namePrefix: 线程前缀
 maxThreads : 最大并发连接数,不配置时默认200,一般建议设置500~ 800 ,要根据自己的硬件设施条件和实际业务需求而定。
 minSpareThreads:Tomcat启动初始化的线程数,默认值25   
 prestartminSpareThreads:在tomcat初始化的时候就初始化minSpareThreads的值, 不设置true时minSpareThreads   
 maxQueueSize: 最大的等待队列数,超过则拒绝请求
 
4.2 修改链接配置
                 
默认配置:

  

修改配置:
  
参数讲解:
  port:连接端口。  
  protocol:连接器使用的传输方式。  Tomcat 8 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol    
  protocol, Tomcat 6、7 设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol      

注:
每个web客户端请求对于服务器端来说就一个单独的线程,客户端的请求数量增多将会导致线程数就上去了,CPU就忙着跟线程切换。
而NIO则是使用单线程(单个CPU)或者只使用少量的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe或者队列里的请求.这样的话,只要OS可以接受TCP的连接,web服务器就可以处理该请求。大大提高了web服务器的可伸缩性。   
executor: 连接器使用的线程池名称
enableLookups:禁用DNS  查询 
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100 。
maxPostSize:限制 以FORM URL 参数方式的POST请求的内容大小,单位字节,默认是 2097152(2兆),10485760 为 10M。如果要禁用限制,则可以设置为 -1。
acceptorThreadCount: 用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核 CPU 一般配置为 2。
compression:传输时是压缩。
compressionMinSize:压缩的大小
noCompressionUserAgents:不启用压缩的浏览器

提示:
压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。 
Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的 浏览过程 HTML、CSS、Javascript和Text,它可以节省40% 左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。

5.管理AJP端口

AJP是为Tomcat与HTTP服务器之间通信而定制的协议,能提供较高的通信速度和效率。
如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。 默认是开启的。如果不使用apache,注释该连接器。
实例:            

6.不要使用root用户启动tomcat

为了防止Tomcat被植入 web shell 程序后,可以修改项目文件。
因此我们要将 Tomcat 和项目的属主做分离,这样子,即便被搞,他也无法创建和编辑项目文件。设置普通用户,用来启动tomcat
groupadd tomcat
useradd -g tomcat tomcat
passwd tomcat
chown tomcat.tomcat -R /usr/local/tomcat
su - tomcat /usr/local/tomcat/bin/startup.sh
echo 'su - tomcat -c "tomcat /usr/local/tomcat/bin/startup.sh"' >> /etc/rc.local  #开机启动


赞(2) 更多分享

上篇: Public CMS架构图
下篇: 生产级无服务器 PaaS 平台 Rainbond(云帮)