• [转载]Tomcat部署与配置


    转载来源:

    http://ibash.cc/frontend/article/2/

    感觉挺好的  自己之前总是怕麻烦 其实是水平不够. 

    一句话介绍Tomcat

    Tomcat是一个免费的开源的Web应用服务器,属于轻量级的应用服务器,具有处理HTML页面的功能;另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。

    Tomcat安装

    note:本文的JDK版本为1.8,Tomcat版本为8.0,安装过程均采用源码安装

    部署JDK

    下载页面: http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

    或者搜索oracle JDK download下载

    1. # tar zxf jdk-8u101-linux-x64.tar.gz
    2. # mv jdk1.8.0_101 /usr/local/jdk
    3. # chown -R root:root /usr/local/jdk/
    4. # echo "###for jdk" >> /etc/profile
    5. # echo "export JAVA_HOME=/usr/local/jdk" >> /etc/profile
    6. # echo "export PATH=$JAVA_HOME/bin:$JAVE_HOME/jre/bin:$PATH" >> /etc/profile
    7. # echo "export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar" >> /etc/profile
    8. # echo "export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
    9. # source /etc/profile
    10. # java -version
    11. java version "1.8.0_101"
    12. Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
    13. Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

    部署Tomcat

    官方网址: http://tomcat.apache.org/

    1. # wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.36/bin/apache-tomcat-8.0.36.tar.gz
    2. # tar zxf apache-tomcat-8.0.36.tar.gz
    3. # mv apache-tomcat-8.0.36 /usr/local/tomcat
    4. # chown -R root:root /usr/local/tomcat/
    5. # echo "###for tomcat" >> /etc/profile
    6. # echo "export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
    7. # source /etc/profile

    启动Tomcat

    1. # /usr/local/tomcat/bin/startup.sh 
    2. Using CATALINA_BASE:   /usr/local/tomcat
    3. Using CATALINA_HOME:   /usr/local/tomcat
    4. Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    5. Using JRE_HOME:        /usr/local/jdk
    6. Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    7. Tomcat started.
    8. # ps -ef|grep tomcat
    9. root       2735      1 99 23:00 pts/0    00:00:11 /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 -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
    10. root       2748   2328  0 23:00 pts/0    00:00:00 grep tomcat
    11. # ss -lntup|grep java
    12. tcp    LISTEN     0      1       ::ffff:127.0.0.1:8005                 :::*      users:(("java",2735,77))
    13. tcp    LISTEN     0      100                   :::8009                 :::*      users:(("java",2735,52))
    14. tcp    LISTEN     0      100                   :::8080                 :::*      users:(("java",2735,47))
    15. # /etc/init.d/iptables stop

    在浏览器访问tomcat默认的站点,输入地址 192.168.1.199:8080(注意默认端口是8080)

    Tomcat目录结构

    1. # ls -l /usr/local/tomcat
    2. 总用量 112
    3. drwxr-xr-2 root root  4096 7  25 04:03 bin ==> 启动关闭脚本
    4. drwxr-xr-3 root root  4096 7  25 04:23 conf  ==>配置文件目录
    5. drwxr-xr-2 root root  4096 7  25 04:03 lib  ==> 存放库文件,jar
    6. -rw-r--r-- 1 root root 57011 6   9 21:58 LICENSE
    7. drwxr-xr-2 root root  4096 7  25 04:04 logs  ==>日志目录
    8. -rw-r--r-- 1 root root  1444 6   9 21:58 NOTICE
    9. -rw-r--r-- 1 root root  6739 6   9 21:58 RELEASE-NOTES
    10. -rw-r--r-- 1 root root 16195 6   9 21:58 RUNNING.txt
    11. drwxr-xr-3 root root  4096 7  25 04:23 temp ==>临时文件夹
    12. drwxr-xr-7 root root  4096 6   9 21:56 webapps ==>站点根目录
    13. drwxr-xr-3 root root  4096 7  25 04:04 work  ==>工作时编译的.java和.class文件

    Tomcat配置文件注解

    1. # cat /usr/local/tomcat/conf/server.xml 
    2. <?xml version="1.0" encoding="UTF-8"?>
    3. <Server port="8005" shutdown="SHUTDOWN"><!--表示一个运行于JVMtomcat实例,该元素代表整个容器,是Tomcat实例的顶层元素,不能作为子元素出现-->
    4.   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    5.   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    6.   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><!--侦听器,这一行是一个内存溢出的侦听器-->
    7.   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    8.   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    9.  
    10.   <GlobalNamingResources><!--全局的一个资源命名-->
    11.       <Resource name="UserDatabase" auth="Container"
    12.               type="org.apache.catalina.UserDatabase"
    13.               description="User database that can be updated and saved"
    14.               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
    15.               pathname="conf/tomcat-users.xml" /><!--这里的xml用来配置用户的管理段-->
    16.   </GlobalNamingResources>
    17.   <!--服务组件,关联connectorengine,一个server内部只有一个service-->
    18.   <Service name="Catalina"><!--配置一个叫Catalina的服务,Tomcat有两种连接类的引擎,HTTPAJP两种-->
    19.       <Connector port="8080" protocol="HTTP/1.1"
    20.                connectionTimeout="20000"<!--连接的超时时间-->
    21.                redirectPort="8443" /><!--一般用于使用Nginx做代理-->
    22.       <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><!--使用apache的场景大多使用AJP,两者保留一个即可-->
    23.       
    24.       <Engine name="Catalina" defaultHost="localhost"><!--引擎配置,核心组件,负责通过connector接收用户请求,并将请求转发到对应的虚拟主机host,
    25.       defaultHost表示缺省处理的主机名-->
    26.       
    27.         <Realm className="org.apache.catalina.realm.LockOutRealm">
    28.           <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    29.                resourceName="UserDatabase"/>
    30.         </Realm>
    31.         
    32.         <Host name="localhost"  appBase="webapps"
    33.             unpackWARs="true" autoDeploy="true"><!--主机配置,可以配置虚拟主机,但是不建议配置;appBase站点路径;unpackWARS自动解压war包;
    34.             autoDeploy自动部署;这是属于热部署,默认都是true,也就是每次部署都不用重启Tomcat,生产不建议开启热部署-->
    35.           <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    36.                prefix="localhost_access_log" suffix=".txt"
    37.                pattern="%h %l %u %t &quot;%r&quot; %s %b" /><!--日志配置-->
    38.         </Host>
    39.     </Engine>
    40.   </Service>
    41. </Server>

    开启Tomcat管理界面(生产环境勿开启)

    1. # vim /usr/loca/tomcat/conf/tomcat-users.xml
    2. <?xml version="1.0" encoding="UTF-8"?>
    3. <tomcat-users xmlns="http://tomcat.apache.org/xml"
    4.               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5.               xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
    6.               version="1.0">
    7.   <role rolename="manager-gui"/><!--定义角色-->
    8.   <role rolename="admin-gui"/>
    9.   <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/><!--定义用户名密码和角色-->
    10. </tomcat-users>

    重新启动Tomcat

    1. # /usr/local/tomcat/bin/shutdown.sh 
    2. Using CATALINA_BASE:   /usr/local/tomcat
    3. Using CATALINA_HOME:   /usr/local/tomcat
    4. Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    5. Using JRE_HOME:        /usr/local/jdk
    6. Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    7. # /usr/local/tomcat/bin/startup.sh 
    8. Using CATALINA_BASE:   /usr/local/tomcat
    9. Using CATALINA_HOME:   /usr/local/tomcat
    10. Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    11. Using JRE_HOME:        /usr/local/jdk
    12. Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    13. Tomcat started.

    此时在浏览器就可以使用用户名tomcat密码tomcat来访问管理界面了

    报错403解决方法

    403 Access Denied

    You are not authorized to view this page.

    By default the Host Manager is only accessible from a browser running on the same machine as Tomcat. If you wish to modify this restriction, you'll need to edit the Host Manager's context.xml file.

    1. # vim /usr/local/tomcat/conf/Catalina/localhost/manager.xml
    2. <Context privileged="true" antiResourceLocking="false"
    3.          docBase="${catalina.home}/webapps/manager">
    4.   <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    5.          allow="192.168.1.102" />
    6. </Context>

    note:路径为  安装目录/conf/[enginename]/[hostname]/manager.xml

    Tomcat安全建议

    1. telnet管理端口的保护

    1. <Server port="8005" shutdown="SHUTDOWN">
    2. 修改为
    3. <Server port="8192" shutdown="stop">
    4. 端口范围8000~8999,关键字SHUTDOWN要改掉

    2. ajp的连接端口更改

    1. ajp连接端口主要用于apachemod_jk模块(该模块可以转发JSP请求到tomcat),保护该端口的目的在于防止线下的测试流量被mod_jk转发到线上的tomcat服务器,同样端口范围为8000~8999
    2. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    3. 修改为
    4. <Connector port="8193" protocol="AJP/1.3" redirectPort="8443" />

    3. 禁止管理界面,删除默认的站点目录,更改默认的站点目录

    4. 使用低级别的用户权限启动tomcat

    5. 启动脚本权限回收

    6. 将tomcat放置于nginx后面,保证安全的同时提高性能

    更改后的server.xml配置如下

    1. <?xml version='1.0' encoding='utf-8'?>
    2. <Server port="8192" shutdown="stop"><!--修改telnet端口和指令-->
    3.   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
    4.   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
    5.   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    6.   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    7.   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    8.  
    9.   <GlobalNamingResources>
    10.  
    11.     <Resource name="UserDatabase" auth="Container"
    12.               type="org.apache.catalina.UserDatabase"
    13.               description="User database that can be updated and saved"
    14.               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
    15.               pathname="conf/tomcat-users.xml" />
    16.   </GlobalNamingResources>
    17.  
    18.   <Service name="Catalina">
    19.     <Connector port="8080" protocol="HTTP/1.1"
    20.                connectionTimeout="20000"
    21.                redirectPort="8443" server="iBashWebServer" 
    22.                maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" enableLookups="false" /><!--修改server header,
    23.                增大线程数,最小空闲进程,最大空闲进程,禁止DNS解析-->
    24.     <Connector port="8193" protocol="AJP/1.3" redirectPort="8443" /><!--修改ajp的默认端口-->
    25.  
    26.     <Engine name="Catalina" defaultHost="localhost">
    27.  
    28.       <Realm className="org.apache.catalina.realm.LockOutRealm">
    29.  
    30.         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    31.                resourceName="UserDatabase"/>
    32.       </Realm>
    33.       <Host name="localhost"  appBase="webapps"
    34.             unpackWARs="true" autoDeploy="true">
    35.         <Context path="" docBase="/usr/local/tomcat_webapps/" debug="0" reloadable="false" crossContext="true" ></Context>
    36.         <!--修改tomcat站点根目录-->
    37.  
    38.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    39.                prefix="localhost_access_log" suffix=".txt"
    40.                pattern="%h %l %u %t %r %s % b %{Referer}i %{User-Agent}i %D" resolveHosts="false" />
    41.  
    42.       </Host>
    43.     </Engine>
    44.   </Service>
    45. </Server>

    Nginx整合Tomcat的几种配置介绍

    1. 单纯的nginx反向代理tomcat配置

    1. server {
    2.     listen       80;
    3.     server_name  www.test.org;
    4.     location / {
    5.         proxy_pass http://www.test.org:8080;
    6.     }
    7. }

    note: 将请求www.test.org:80的所有请求,直接转发给http://www.test.org:8080,相当于直接访问http://www.test.org:8080。

    2. 按照请求类型配置Nginx

    1. server {
    2.     listen       80;
    3.     server_name  www.test.org;
    4.     index  index.jsp;
    5.     charset utf-8;
    6.     access_log  logs/www.test.org.access.log  main;
    7.     root   /www/html/www.test.org;
    8.     location ~ .*.(jsp|do)?{
    9.         proxy_pass http://www.test.org:8080;
    10.     }
    11.     location ~ .*.(html|js|css|png|gif)?{
    12.         root    /usr/local/tomcat_webapps/;
    13.     }
    14. }

    3. 配置负载均衡

    首先复制多个tomcat目录,启动多个tomcat实例,然后配置nginx

    1. upstream web_pools {
    2.     server 127.0.0.1:8081;
    3.     server 127.0.0.1:8082;
    4. }
    5. server {
    6.     listen       80;
    7.     server_name  www.test.org;
    8.     location / {
    9.         root   html;
    10.         index  index.jsp index.html index.htm;
    11.         proxy_pass http://web_pools;
    12.     }
    13. }

    开启JMX用于监控

    1. # vim /usr/local/tomcat/bin/catalina.sh 
    2. CATALINA_OPTS="$CATALINA_OPTS
    3. -Dcom.sun.management.jmxremote
    4. -Dcom.sun.management.jmxremote.port=12345
    5. -Dcom.sun.management.jmxremote.authenticate=false
    6. -Dcom.sun.management.jmxremote.ssl=false
    7. -Djava.rmi.server.hostname=192.168.1.199"
    8. # OS specific support.  $var _must_ be set to either true or false.

    线上故障排除思路

    1. jps获取Java进程的PID

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

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

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

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

    6. 分析负载高的线程栈都是什么业务操作。优化程序并处理问题

  • 相关阅读:
    Mvc请求管道中的19个事件
    asp.net 验证正则表达式
    Asp.net MVC进入请求管道的过程
    MVC(二)
    Aspect Oriented Programming (AOP)
    在C#中??和?分别是什么意思?
    MVC(一)
    ASP.NET 管道事件与HttpModule, HttpHandler简单理解
    Entity Framework && Lambda
    扩展类和扩展方法
  • 原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/8321776.html
Copyright © 2020-2023  润新知