zoukankan      html  css  js  c++  java
  • web服务器tomcat入门实战

    一、tomcat介绍
    1.1 引入tomcat

      Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
      tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

    1.2 常用的java-web服务

    开源软件
    tomcat resin jboss
    商业软件
    weblogic websphere

    二、java概念解释
    JDK
    简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等
    JRE
    JRE(Java Runtime Environment,Java运行环境),也就是Java平台。所有的Java程序都要在JRE下才能运行。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
    SDK
    SDK(Software Develop Kit,软件开发工具包),用于帮助开发人员的提高工作效率。各种不同类型的软件开发,都可以有自己的SDK。Windows有Windows SDK,DirectX 有 DirectX 9 SDK,.NET开发也有Microsoft .NET Framework SDK。JAVA开发也不含糊,也有自己的Java SDK。
    JVM
    JVM(Java Virtual Machine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台

    三、tomcat环境准备

    [root@node1 ~]# cat /etc/redhat-release
    CentOS Linux release 7.3.1611 (Core)

    四、源码安装启动tomcat
    #统一线上web服务用户的uid
    [root@node1 ~]# useradd -u 1001 tomcat
    [root@node1 ~]# id tomcat
    uid=1001(tomcat) gid=1001(tomcat) groups=1001(tomcat)

    下载jdk和tomcat

    [root@node1 ~]# cd /usr/local/src/
    [root@node1 ~]# wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
    
    [root@node1 ~]# wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.14/bin/apache-tomcat-8.5.14.tar.gz

    安装Jdk和tomcat

    [root@node1 src]# tar zxf jdk-8u131-linux-x64.gz 
    [root@node1 src]# mv jdk1.8.0_131/ /usr/local/
    [root@node1 src]# ln -s /usr/local/jdk1.8.0_131/ /usr/local/jdk
    [root@node1 src]# tar zxf apache-tomcat-8.5.14.tar.gz 
    [root@node1 src]# mv apache-tomcat-8.5.14 /usr/local/
    [root@node1 src]# ln -s /usr/local/apache-tomcat-8.5.14/ /usr/local/tomcat

    设置环境变量

    [root@node1 src]# echo "export JAVA_HOME=/usr/local/jdk
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
    export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
    [root@node1 src]# source /etc/profile

    测试java环境变量是否生效
    [root@node1 src]# java -version
    java version "1.8.0_131"
    Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

    使用tomcat用户启动tomcat(这样可以起到一定的安全防范作用,如果被入侵拿到的也只是tomcat权限)

    [root@node1 src]# chown -R tomcat.tomcat /usr/local/tomcat/
    [root@node1 src]# cd /usr/local/tomcat/bin/
    [root@node1 bin]# ./startup.sh

     

    查看8080端口
    [root@node1 bin]# netstat -tunlp |grep 8080
    tcp6 0 0 :::8080 :::* LISTEN 62872/java

    根据启动脚本编写重启脚本如下
    # vim tomcat.sh

    #!/bin/bash
    usage() {
    echo "Usage: $0 [start|stop|restart|status]"
    }
    
    start_tomcat(){
    /usr/local/tomcat/bin/startup.sh
    }
    status_tomcat(){
    ps -ef|grep java|grep tomcat|grep -v grep
    }
    stop_tomcat(){
    TPID=$(ps -ef|grep java|grep tomcat|grep -v grep|awk '{print $2}')
    kill -9 $TPID
    sleep 3
    STAT=$(ps -ef|grep java|grep tomcat|grep -v grep|awk '{print $2}')
    if [ -z $STAT ];then
    echo 'tomcat stoped...'
    else
    kill -9 $STAT
    fi
    }
    restart_tomcat(){
    stop_tomcat
    start_tomcat
    }
    
    main(){
    case $1 in
    
    start)
    start_tomcat;;
    stop)
    stop_tomcat;;
    restart)
    restart_tomcat;;
    status)
    status_tomcat;;
    *)
    usage;
    esac
    }
    main $1

    五、学习tomcat配置文件
    5.1 学习server.xml

    <Connector port="8080" protocol="HTTP/1.1" #http监听8080端口
    connectionTimeout="20000"
    redirectPort="8443" /> #https 8443端口
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #AJP通信方式8009端口
    <Server port="8005" shutdown="SHUTDOWN">
    <Listener # telent端口 className="org.apache.catalina.startup.VersionLoggerListener" />

    ##5.2 学习 tomcat-users.xml

    [tomcat@node1 webapps]$ pwd
    /usr/local/tomcat/webapps #tomcat 默认的根路径
    [tomcat@node1 webapps]$ ll
    total 8
    drwxr-xr-x 14 tomcat tomcat 4096 Mar 19 21:57 docs
    drwxr-xr-x 6 tomcat tomcat 78 Mar 19 21:57 examples
    drwxr-xr-x 5 tomcat tomcat 82 Mar 19 21:57 host-manager #用户管理,登录使用
    drwxr-xr-x 5 tomcat tomcat 97 Mar 19 21:57 manager 
    drwxr-xr-x 3 tomcat tomcat 4096 Mar 19 21:57 ROOT #默认的访问路径

    修改tomcat-users.xml,配置一个登录用户tomcat

    生产环境关闭app管理和主机管理的方法,具体文件再进行具体调整

    [tomcat@node1 webapps]$ mv host-manager/ examples/ /tmp/
    111
    启动tomcat的注意事项,每次启动都会生成temp和work目录,实际生产环境建议每次tomcat启动都将此两个目录情况情况,否则会因为缓存问题产生异常

    六、生产环境tomcat规范
    telnet管理端口保护
       更改8005(更改为8000~8999之间即可)端口,和SHOTDOWN字符串
    ajp链接端口保护,或者直接注释配置文件
       更改8005(更改为8000~8999之间即可)端口,通过iptables限制此端口,或者直接注释配置文件
    禁用管理
       1)删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件,重启tomcat后将会自动生成新的文件;
       2)删除{Tomcat安装目录}/webapps下默认的所有目录和文件;
       3)将tomcat 应用根目录配置为tomcat安装目录以外的目录;
    降权启动
       1)tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;
       2)如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发;
    文件列表访问限制
       conf/web.xml文件中default部分listings的配置必须为false;
    版本信息隐藏
       1)修改conf/web.xml,重定向403、404以及500等错误到指定的错误页面;
       2)也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向;
    Server header重写
       在HTTP Connector配置中加入server的配置,server="chuck-server"
    通过配置,限定访问的ip来源
       allow="61.148.18.138,61.135.165." deny="...*"/
    起停脚本权限回收
       去除其他用户对Tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限
    访问日志格式规范
       开启Tomcat默认访问日志中的Referer和User-Agent记录
    关闭自动部署(根据自己实际情况)
       autoDeploy="false">

    七、tomcat的调优
    7.1 外部调优

    操作系统调优,JVM调优
    1)调整JVM内存使用
    2)使用什么垃圾回收器
    nginx代理调优

    7.2 内部调优

    maxThreads="150" #最大线程数
    minSpareThreads="4" #初始化创建的线程数
    maxSpareThreads="500" #一旦创建的线程超过这个值,tomcat就会关闭不在需要的socket线程
    acceptCount="700" #指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队里的请求数,超过这个数将不予处理
    compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" #tomcat压缩,压缩起始大小为2048K和压缩类型
    enableLookups="false" #关闭dns查询
    disableUploadTimeout="25" #关闭上传超时
    connectionTimeout="20000" #链接超时
    SSLEnabled="true" #开启ssl加密,https时使用 
    附生产实际配置文件一个
    
    <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"
    SSLEnabled="true"
    scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
    keystoreFile="/tomcat2/conf/shnlap93.jks" keystorePass="aaaaaa"
    />


    7.3 开启jvm远程查看

    更改启动参数

    echo "CATALINA_OPTS="$CATALINA_OPTS 
    -Dcom.sun.management.jmxremote # 启用远程调用
    -Dcom.sun.management.jmxremote.port=12345 #端口12345
    -Dcom.sun.management.jmxremote.authenticate=false #关闭验证 
    -Dcom.sun.management.jmxremote.ssl=false #关闭ssl加密
    -Djava.rmi.server.hostname=192.168.3.198"" >> /usr/local/tomcat/bin/catalina.sh

    打开jvisualvm,可同时链接多个jvm主机

  • 相关阅读:
    Mybatis批量插入
    easyui中datagrid常见功能
    mysql下载和安装方式
    Mybatis注意事项
    ol3对地图上某些特定的经纬度进行标注
    ol3开发离线地图
    java利用poi生成excel文件后下载本地
    log4j的基本使用方法
    tomcat8.5之后版本,远程无法登录管理页面
    但构造函数返回对象时
  • 原文地址:https://www.cnblogs.com/reblue520/p/6842377.html
Copyright © 2011-2022 走看看