详情请看散尽浮华的tomcat相关配置技巧梳理

本次只用于自己的查看,谢谢作者的谅解。

tomcat常用架构:
1)nginx+tomcat;即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx+tomcat的视频业务部署记录
2)tomcat直接部署站点,不通过nginx反向代理。

下面针对tomcat的有关配置使用进行说明:
1)默认站点根目录
tomcat的默认站点根目录是webapps/ROOT,配置文件是server.xml,
配置文件server.xml 里的主要内容是:

  1. vim /Data/app/tomcat-/conf/server.xml //如若修改tomcat的访问端口,替换下面的8080即可
  2. .....
  3. <Connector port="" URIEncoding="UTF-8" protocol="HTTP/1.1" //URIEncoding="UTF-8"这个配置在这里默认是没有的,这里是我手动添加的,保证tomcat的编码是UTF-8
  4. connectionTimeout=""
  5. redirectPort="" />
  6. .....
  7. <Host name="localhost" appBase="webapps"
  8. unpackWARs="true" autoDeploy="true">
  9. .....

上面配置说明tomcat的访问地址是http://localhost:8080
站点目录是/Data/app/tomcat-7/webapps/ROOT
记住提前将webapps目录清空,然后注意:
如果代码的war包名称是ROOT.war,那么tomcat重启后,访问站点的根目录就是webapps/ROOT,访问url是http://localhost:8080 (ROOT目录,在访问时的url中可以省略)
如果代码的war包名次不是ROOT.war,比如是jenkins.war,那么tomcat重启后,访问站点的根目录就是webapps/jenkins,访问url就是http://localhost:8080/jenkins (非ROOT目录,在访问时的url中必须要带上)

[root@huanqiu-test ~]# ll /usr/local/tomcat7/webapps/
total 62180
drwxr-xr-x. 16 root root 4096 Dec 15 12:33 jenkins
-rw-r--r--. 1 root root 63664946 Oct 30 20:38 jenkins.war

因此这个tomcat站点访问地址是:http://localhost:8080/jenkins

2)修改默认域名
如下,只修改"Host name"处,将默认的localhost修改为www.wangjenkins.com
那么此tomcat站点访问地址是:http://www.wangjenkins.com:8080/jenkins/

  1. [root@huanqiu-test ~]# vim /Data/app/tomcat-/conf/server.xml
  2. .....
  3. <Connector port="" URIEncoding="UTF-8" protocol="HTTP/1.1"
  4. connectionTimeout=""
  5. redirectPort="" />
  6. .....
  7. <Host name="www.wangjenkins.com" appBase="webapps"
  8. unpackWARs="true" autoDeploy="true">
  9. .....
3)修改tomcat访问的默认站点目录
如下配置,重启tomcat后,它就会把起先默认站点目录/Data/app/tomcat-7/webapps/ROOT修改成/home/tomcat/www这个目录。
 

  1. vim /Data/app/tomcat-/conf/server.xml
  2. .....
  3. <Connector port="" URIEncoding="UTF-8" protocol="HTTP/1.1"
  4. connectionTimeout=""
  5. redirectPort="" />
  6. .....
  7. <Host name="www.wangjenkins.com" appBase="/home/tomcat/www" //这里的appBase后填写的是新的站点根目录,也可以还设置成webapps(若是webapps,则下面的Context一行必须设置)
  8. unpackWARs="true" autoDeploy="true">
  9. <Context path="" docBase="/home/tomcat/www" debug="" reloadable="true" /> //这一行最好添加上,path后面的""里配置的是tomcat的子项目,""为空,表示是父项目

ll /home/tomcat/www/
total 62180
drwxr-xr-x. 9 root root 4096 Dec 15 13:42 jenkins
-rw-r--r--. 1 root root 63664946 Dec 15 13:42 jenkins.war

  1.  

[root@huanqiu-test ~] # ll /usr/local/tomcat7/webapps/
total 62184
drwxr-xr-x. 7 root root 4096 Dec 15 14:34 jenkins

这个tomcat站点访问地址是:http://www.wangjenkins.com:8080/jenkins

在appBase配置成默认的webapps目录的情况下就必须要有!

  1. 所以配置也可以是:
  2. <Host name="www.wangjenkins.com" appBase="/home/tomcat/www"
  3. unpackWARs="true" autoDeploy="true">
  4. 也可以是:
  5. <Host name="www.wangjenkins.com" appBase="webapps"
  6. unpackWARs="true" autoDeploy="true">
  7. <Context path="" docBase="/home/tomcat/www" debug="" reloadable="true" />

2)不同域名(多个Host name)下的项目

tomcat多项目部署,需要用到下面一行:
<span "="" docbase="/home/tomcat/www" debug="0" reloadable="true" ><="" span="">
其中,path后的""内填写的是项目名称,如果""为空,则表示是父项目(父项目情况下,这个Context行可以省略)

  1. unpackWARs="true" autoDeploy="true">
  2. ......
  3. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  4. prefix="localhost_access_log." suffix=".txt"
  5. pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  6. <Context path="/huanqiu1" reloadable="true" docBase="/usr/local/tomcat7/huanqiu1"/>
  7. <Context path="/huanqiu2" reloadable="true" docBase="/usr/local/tomcat7/huanqiu2"/>
  8. </Host>
  9. ....

上面的配置可知:
父项目是http://www.wangjenkins.com/8080/jenkins,站点目录是/usr/local/tomcat7/webapps,由于webapps下不是默认的ROOT,而是jenkins。所以访问的url里要带jenkins
两个子项目分别是:
http://www.wangjenkins.com/8080/huanqiu1,对应的站点目录是/usr/local/tomcat7/huanqiu1
http://www.wangjenkins.com/8080/huanqiu2,对于的站点目录是/usr/local/tomcat7/huanqiu2

  1. <hostname=localhost" appBase="webapps" //这个是默认的配置区域
  2. unpackWARs="true" autoDeploy="true">
  3.  
  4. <!-- SingleSignOn valve, share authentication between web applications
  5. Documentation at: /docs/config/valve.html -->
  6. <!--
  7. <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
  8. -->
  9.  
  10. <!-- Access log processes all example.
  11. Documentation at: /docs/config/valve.html
  12. Note: The pattern used is equivalent to using pattern="common" -->
  13. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  14. prefix="localhost_access_log." suffix=".txt"
  15. pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  16.  
  17. <Host name="www.beijing.com" appBase="apps"
  18. unpackWARs="true" autoDeploy="true">
  19.  
  20. <!-- SingleSignOn valve, share authentication between web applications
  21. Documentation at: /docs/config/valve.html -->
  22. <!--
  23. <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
  24. -->
  25.  
  26. <!-- Access log processes all example.
  27. Documentation at: /docs/config/valve.html
  28. Note: The pattern used is equivalent to using pattern="common" -->
  29. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  30. prefix="localhost_access_log." suffix=".txt"
  31. pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  32.  
  33. <Host name="www.wangshibo.com" appBase="wang"
  34. unpackWARs="true" autoDeploy="true">
  35.  
  36. <!-- SingleSignOn valve, share authentication between web applications
  37. Documentation at: /docs/config/valve.html -->
  38. <!--
  39. <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
  40. -->
  41.  
  42. <!-- Access log processes all example.
  43. Documentation at: /docs/config/valve.html
  44. Note: The pattern used is equivalent to using pattern="common" -->
  45. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  46. prefix="localhost_access_log." suffix=".txt"
  47. pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  48. <Context path="/ops1" reloadable="true" docBase="/data/web/ops1"/>
  49. <Context path="/ops2" reloadable="true" docBase="/data/web/ops2"/>

根据上面的配置可知:
http://localhost:8080 对应的站点目录是/usr/local/tomcat7/webapps(假设对应站点目录下的名称都是ROOT)
http://www.beijing.com:8080 对应的站点目录是/usr/local/tomcat7/apps
http://www.wangshibo.com:8080

对应的站点目录是/usr/local/tomcat7/wang,并且这个项目下有两个子项目分别是http://www.wangshibo.com:8080/ops1、http://www.wangshibo.com:8080/ops2

2.在不同的tomcat下(不同的端口)
将tomcat复制成多个副本,然后根据业务更改复制后的tomcat名,修改server.conf中的三个关键端口(下面会提到).注意站点目录对应关系。
[不过,为了避免不必要的麻烦,最好还是别复制已经在使用中的tomcat,可以重新解压tomcat安装包进行使用(将其备份,以待后续再使用)].当然也可以在不同端口的tomcat下设置各自的子项目。
              redirectPort="8443" />
......
        <Server port="8785" shutdown="SHUTDOWN">
......

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

只要上面三个端口不冲突,基本就能成功启动实例了。

<host>里的appBase,然后在<context>里的docBase,这 两个属性是有联系的,先说一下比较官方的解释:“<Host>元素中的 appBase属性指定了一个路径,该路径将作为嵌套在它里面的<Context> 元素的docBase属性中设置的相对路径的基准路径。”也就是说是docBase的基路径,如果你的项目路径在:“F://a/site1”,而你在 appBase里写:“F://a/”,在docBase里写:“site1”,这样是可以的 。如果你appBase=“”,也就是说空着不写,在docBase里写: “F://a/site1”,也是可以的,反过来,如果是在appBase里写: “F://a/site1”,也是可以的。记住这些是很重要的

另外:最好做下java的环境变量设置,不然,tomcat启动容易失败~~

  1. [root@huanqiu-test ~]# java -version
  2. java version "1.7.0_45"
  3. OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
  4. OpenJDK -Bit Server VM (build 24.45-b08, mixed mode)
  5. [root@huanqiu-test ~]# which java
  6. /usr/bin/java
  7. [root@huanqiu-test ~]# ll /usr/bin/java
  8. lrwxrwxrwx. root root 7 /usr/bin/java -> /etc/alternatives/java
  9. [root@huanqiu-test ~]# ll /etc/alternatives/java
  10. lrwxrwxrwx. root root 7 /etc/alternatives/java -> /usr/lib/jvm/jre-1.7.-openjdk.x86_64/bin/java
  11.  
  12. 由此可知,javahome目录是/usr/lib/jvm/jre-1.7.-openjdk.x86_64
  13.  
  14. [root@huanqiu-test jvm]# ll
  15. 总用量
  16. drwxr-xr-x. root root 7 java-1.6.-openjdk-1.6.0.0.x86_64
  17. drwxr-xr-x. root root 7 java-1.7.-openjdk-1.7.0.45.x86_64
  18. lrwxrwxrwx. root root 7 jre -> /etc/alternatives/jre
  19. lrwxrwxrwx. root root 7 jre-1.6. -> /etc/alternatives/jre_1.6.0
  20. lrwxrwxrwx. root root 7 jre-1.6.-openjdk.x86_64 -> java-1.6.-openjdk-1.6.0.0.x86_64/jre
  21. lrwxrwxrwx. root root 7 jre-1.7. -> /etc/alternatives/jre_1.7.0
  22. lrwxrwxrwx. root root 7 jre-1.7.-openjdk.x86_64 -> java-1.7.-openjdk-1.7.0.45.x86_64/jre
  23. lrwxrwxrwx. root root 7 jre-openjdk -> /etc/alternatives/jre_openjdk
  24.  
  25. 设置java的环境变量
  26. [root@huanqiu-test jvm]# vim /etc/profile
  27. .......
  28. export JAVA_HOME=/usr/lib/jvm/jre-1.7.-openjdk.x86_64
  29. export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  30. export PATH=$PATH:$JAVA_HOME/bin
  31.  
  32. 使之生效
  33. [root@huanqiu-test ~]# source /etc/profile
  34.  
  35. [root@huanqiu-test ~]# echo $JAVA_HOME
  36. /usr/lib/jvm/java-1.7.-openjdk.x86_64
  37. [root@huanqiu-test ~]# echo $CLASSPATH
  38. .:/usr/lib/jvm/java-1.7.-openjdk.x86_64/jre/lib/rt.jar:/usr/lib/jvm/java-1.7.-openjdk.x86_64/lib/dt.jar:/usr/lib/jvm/java-1.7.-openjdk.x86_64/lib/tools.jar

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
上面java的环境变量一定要设置!不然tomcat启动会失败,会有以下报错:
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
----------------------------------------------------------------------------------------------------------------------------------------------------------------

[通常:在对tomcat服务进行迁移或切换的时候,需要将webapps下的ROOT和ROOT.war包都一起拷贝过去]

--------------------------------------------------------------------------Tomcat中实现IP访问限制------------------------------

Tomcat中的ip访问限制,即设置允许某个(或某些)客户端能够访问到tomcat服务器,或不能访问tomcat服务器。
限制tomcat的IP访问其实是一件非常容易的事情,只需要编辑tomcat的server.xml,增加适当代码即可。

修改如下:
  1. 例如有一个名为myapp的虚拟目录,打开tomcatserver.xml配置文件,找到其配置代码如下:
  2. <Context path="/myapp" reloadable="true" docBase="/var/www/myapp" />
  3. 将其改成下面代码:
  4. <Context path="/myapp" reloadable="true" docBase="/var/www/myapp">
  5. <valueclassName="org.apache.catalina.values.RemoteAddrValue"
  6. allow="127.0.0.1" deny="″ />
  7. </Context>
  8. 经过这样设置后,将只允许本机访问Tomcat.
  9. 如要限制只能192.168.1.-192.168..255和192.168.10.-192.168..255这样的IP段,可以类似这样写:
  10. <Context path="/myapp" reloadable="true" docBase="/var/www/myapp">
  11. <valueclassName="org.apache.catalina.values.RemoteAddrValue"
  12. allow="192.168.[1-5].*,192.168.[10-15].*" deny=" />
  13. </Context>
  14. 设置好后重新启动Tomcat就生效.
注意:
<Context 内容要放在<Host </Host>之间
 
---------------------另一种玩法---------------------
效果:只有指定的主机或IP地址才可以访问部署在Tomcat下的应用。
Tomcat供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve,前者用于限制主机名,后者用于限制IP地址。通过配置这两个参数,可以让你过滤来自请求的主机或IP地址,并允许或拒绝哪些主机/IP
 
1)全局设置,对Tomcat下所有应用生效
server.xml中添加下面一行,重启服务器即可:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
此行放在</Host>之前。
 
例子:
只允许192.168.1.10访问:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10" deny=""/>
 
只允许192.168.1.*网段访问:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
 
只允许192.168.1.10、192.168.1.30访问:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30" deny=""/>
 
根据主机名进行限制:
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="abc.com" deny=""/>
 
2)局部设置,仅对具体的应用生效
根据项目配置情况进行设置:
直接在server.xml中进行设置${tomcat_root}/conf/server.xml
 
在上述文件对应项目的</Context>前增加下面一行:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
 
特别需求:测试版本不想提供别人访问
打开tomcat6/conf/server.xml文件
如果是要限制整个站点别人不能访问,则要将
<Valve className="org.apache.catalina.valves.RemoteAddrValve"  allow="192.168.1.*,192.168.2.*,*.mysite.com" deny=""/>
加入到<HOST></HOST>标签中
 
如果是要限制某个站点不能被访问,则要加入到<Context>里面就可以。
<Context path="/myweb" reloadable="true" docBase="/data/tomcat6/webapps/myweb">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.13.110,192.168.1.*,220.250.13.21" deny=""/>
</Context>
  
RemoteHostValve表示根据主机名进行限制:
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="tmachine1" deny=""/>
修改文件:
tomcat/conf/server.xml
 
通过tomcat限制ip访问
  1. <Engine name="Standalone" ...>
  2. <Valve className="org.apache.catalina.valves.RemoteHostValve"
  3. allow="*.mycompany.com,*.a.com"/> //域名限制
  4. <Valve className="org.apache.catalina.valves.RemoteAddrValve"
  5. deny="192.168.1.*"/> //IP限制
  6. </Engine>
  7.  
  8. 重启tomcat生效

Tomcat基础配置(一)的更多相关文章

  1. Tomcat基础配置和高级配置

    **********  第一部分 Tomcat基础配置   *********** 一.Apatch Tomcat 在win下配置 大部分转载自:http://blog.csdn.net/liuhao ...

  2. Java应用服务器之tomcat基础配置(一)

    前文我们聊到了java相关重要组件和它们之间的关系以及jdk.tomcat部署回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13302938.html:今天我们 ...

  3. Java应用服务器之tomcat基础配置(二)

    前文我们聊了下tomcat的配置文件相关格式和组件简介以及webapp目录结构,manger部署和host managera部署,回顾请参考https://www.cnblogs.com/qiuhom ...

  4. Tomcat基础教程(二)

    上一篇说到了Tomcat的介绍,下载及安装,这一篇我会详述Tomcat服务器结构 一.Tomcat服务器结构图: Tomcat服务器中可以配置多个Service,每个Service可以包含多个Conn ...

  5. 【WEB】Tomcat基础使用知识

    由于当前项目性质原因,从开始到现在使用的WEB服务器都是WAS,而Tomcat的基础知识也慢慢地被遗忘.由于种种原因,让我参与到了另外一个全新的项目,使用的是Tomcat6.X,所以复习是必须的,而写 ...

  6. Tomcat 安全配置与性能优化

    一.Tomcat内存优化 1.JAVA_OPTS参数说明 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OP ...

  7. SpringMVC最基础配置

    SpringMVC和Struts2一样,是前后台的一个粘合剂,struts2用得比较熟悉了,现在来配置一下SpringMVC,看看其最基础配置和基本使用.SpriingMVC不是太难,学习成本不高,现 ...

  8. Tomcat 常规配置并通过zabbix 监控 jvm状态

    一:jdk和tomcat基础 apache有两种方式运行php,一是使用模块,二是使用fastcgi nginx也可以通过fastcgi处理动态请求,也可以转发至tomcat tomcat监控主要是监 ...

  9. Linux配置tomcat (centos配置java环境 tomcat配置篇 总结三)

    ♣下载安装tomcat7 ♣设置启动和关闭 ♣设置用户名和密码 ♣发布java web项目 声明:这篇教程是建立在前两篇教程的基础上的,所以,还没安装工具和jdk,可以先看这个系列的前面两篇(去到文末 ...

随机推荐

  1. CF1081E Missing Numbers

    思路: 贪心乱搞. 实现: #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll m = ...

  2. IOS小技巧整理

    1 随机数的使用  头文件的引用         #import <time.h>        #import <mach/mach_time.h> srandom()的使用 ...

  3. SQL 数学串函数

    数学函数 ceiling  取上限 floor  取下限 round 四舍五入 len   长度 abs  绝对值 PI()圆周率 sqrt 开根号 qwuare 平方根 select  10     ...

  4. COGS 264. 数列操作

    时间限制:1 s   内存限制:160 MB [问题描述] 假设有一列数 {Ai }(1 ≤ i ≤ n) ,支持如下两种操作: (1)将 A k 的值加 D .( k, D 是输入的数) (2) 输 ...

  5. NSString+TimeCategory

    NSString+TimeCategory.h //------------------------------------------------ #import <foundation fo ...

  6. shell脚本自动部署及监控

    一.shell脚本部署nginx反向代理和三个web服务 1 对反向代理服务器进行配置 #!/bin/bash #修改用户交互页面 用户输入参数执行相应的参数 #安装epel扩展包和nginx fun ...

  7. navicat 常用快捷键

    1.ctrl+q           打开查询窗口 2.ctrl+/            注释sql语句3.ctrl+shift +/  解除注释4.ctrl+r           运行查询窗口的 ...

  8. Vue-Quill-Editor 富文本编辑器的使用

    步骤如下: 1.下载Vue-Quill-Editor npm install vue-quill-editor --save 2.下载quill(Vue-Quill-Editor需要依赖) npm i ...

  9. plsql循环的简单实例

    declare v_id tbl_regions.regions_id%type; begin .. loop select t.regions_id into v_id from tbl_regio ...

  10. LeetCode 岛屿的最大面积

    给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被水包围着. 找到给定的二维数组中 ...