美文网首页我爱编程
CentOS下tomcat安装配置

CentOS下tomcat安装配置

作者: 风吹我已散博客 | 来源:发表于2018-03-02 00:01 被阅读0次

    一、所需软件包下载

    Tomcat:https://archive.apache.org/dist/tomcat/
    JDK:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk

    Tomcat jdk
    9.0.0.M17 (alpha) 8 and later
    8.5.11 7 and later
    8.0.41 (superseded) 7 and later
    7.0.75 6 and later(7 and later for WebSocket)

    版本对照:

    Tomcat jdk
    9.0.0.M17 (alpha) 8 and later
    8.5.11 7 and later
    8.0.41 (superseded) 7 and later
    7.0.75 6 and later(7 and later for WebSocket)

    二、JDK和Tomcat安装

    • JDK安装
      为了方便维护下载到/usr/local/java目录并解压
      解压:tar -zxvf jdk-8u91-linux-x64.tar.gz
      解压后JDK目录为:/usr/local/java/jdk1.8.0_91

      设置环境变量(根据具体版本修改配置):
      编辑/etc/profile文件在最末尾加入以下内容:

      export JAVA_HOME=/usr/local/java/jdk1.8.0_91
      export JRE_HOME=/usr/local/java/jdk1.8.0_91/jre
      export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
      export PATH=$PATH:$JAVA_HOME/bin
      

      注:路径根据你的JAVA解压后路径修改即可。
      保存后执行source /etc/profile使环境变量配置生效。
      然后执行java –version可以看到当前的JDK版本。

    • Tomcat安装
      JAVA运行环境正确安装配置后开始下载安装tomcat。
      这里下载到home目录,解压后为/home/apache-tomcat-8.5.3,可根据需要修改即可。
      为了后续的权限控制,添加tomcat组和用户并设置tomcat目录为tomcat用户所属:

      groupadd tomcat
      useradd -g tomcat -s /sbin/nologin tomcat
      chown -R tomcat:tomcat /home/apache-tomcat-8.5.3
      

      启动tomcat: 直接使用tomcat目录下bin目录中startup.sh进行启动。
      停止tomcat: 直接使用tomcat目录下bin目录中shutdown.sh进行停止。
      开机自启动:
      在/etc/rc.local文件中添加对应启动命令,如:/home/apache-tomcat-8.5.3/bin/startup.sh
      或注册为服务启动:
      /etc/init.d/目录新建一个tomcat文件并写入下面内容(这里安装的tomcat8所以设置文件名为tomcat8):

      #!/bin/bash
      # tomcat8
      # chkconfig: - 80 20
      ### BEGIN INIT INFO
      # Provides: tomcat8
      # Required-Start: $network $syslog
      # Required-Stop: $network $syslog
      # Default-Start:
      # Default-Stop:
      # Description: Tomcat 8
      # Short-Description: start and stop tomcat
      ### END INIT INFO
      
      ## Source function library.
      #. /etc/rc.d/init.d/functions
      export JAVA_OPTS="-Dfile.encoding=UTF-8 \
        -Dnet.sf.ehcache.skipUpdateCheck=true \
        -XX:+UseConcMarkSweepGC \
        -XX:+CMSClassUnloadingEnabled \
        -XX:+UseParNewGC \
        -XX:MaxPermSize=128m \
        -Xms512m -Xmx512m"
      TOMCAT_HOME=/opt/tomcat8
      TOMCAT_USER=tomcat
      SHUTDOWN_WAIT=20
      
      tomcat_pid() {
        echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
      }
      
      start() {
        pid=$(tomcat_pid)
        if [ -n "$pid" ] 
        then
          echo "Tomcat is already running (pid: $pid)"
        else
          # Start tomcat
          echo "Starting tomcat"
          ulimit -n 100000
          umask 007
          /bin/su -p -s /bin/sh $TOMCAT_USER $TOMCAT_HOME/bin/startup.sh
        fi
      
      
        return 0
      }
      
      stop() {
        pid=$(tomcat_pid)
        if [ -n "$pid" ]
        then
          echo "Stoping Tomcat"
          /bin/su -p -s /bin/sh $TOMCAT_USER $TOMCAT_HOME/bin/shutdown.sh
      
          let kwait=$SHUTDOWN_WAIT
          count=0;
          until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
          do
            echo -n -e "\nwaiting for processes to exit";
            sleep 1
            let count=$count+1;
          done
      
          if [ $count -gt $kwait ]; then
            echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
            kill -9 $pid
          fi
        else
          echo "Tomcat is not running"
        fi
       
        return 0
      }
      
      case $1 in
      start)
        start
      ;; 
      stop)   
        stop
      ;; 
      restart)
        stop
        start
      ;;
      status)
        pid=$(tomcat_pid)
        if [ -n "$pid" ]
        then
          echo "Tomcat is running with pid: $pid"
        else
          echo "Tomcat is not running"
        fi
      ;; 
      esac    
      exit 0
      

      赋予该文件执行权限:chmod +x /etc/init.d/tomcat8
      添加自动启动:chkconfig tomcat8 on

    三、Tomcat配置

    • tomcat增加多站点
      配置文件:
      tomcat安装目录下conf目录中server.xml,
      /home/apache-tomcat-8.5.3/conf/server.xml

    • 相同端口配置:
      找到Host字段并在</host>下面新增即可host配置字段:

      <Host name="wwww.abc.com" appBase="/wwwroot/abc/"
      unpackWARs="true" autoDeploy="true">
      <Context path="" docBase="/wwwroot/abc/" reloadable="true" deubg="0" />
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
      prefix="antisec_access_log" suffix=".txt"
      pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      <Alias>www.域名1.com</Alias>
      <Alias>www.域名2.com</Alias>
      <Alias>www.域名3.com</Alias>
      </Host>
      

      把name、appBase、docBase的内容改为实际的域名和项目路径。
      <Alias>xxx</Alias>为绑定多个域名,如果不需要在绑定其他域名则不用配置。

      同端口配置
    • 不同端口配置:
      在默认</Service>后面新增以下内容:
      <!--services1-start-->
      <Service name="Catalina">
      <Connector port="8080" protocol="HTTP/1.1"
      connectionTimeout="20000" redirectPort="8443" />
      <!-- Define an AJP 1.3 Connector on port 8009 -->
      <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
      
      <Engine name="Catalina" defaultHost="www.abc.com">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
        
      <Host name="www.abc.cn" appBase="/wwwroot/abc/"
        unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="D:\wwwroot\tomcat" reloadable="true" deubg="0" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="antisec_access_log" suffix=".txt"
        pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        </Host>
        </Engine>
        </Service>
        <!--services1-end-->
      
      其中Connector port、defaultHost、Hostname、appBase、docBase、日志prefix为你实际的即可。
      例如下图中8090端口为http协议端口、8010端口为AJP协议端口。这两个端口不要和已有的services配置字节中端口冲突。(默认的配置中http协议端口为8080、AJP端口为8009)
      新增站点:
      新增站点
      默认站点:
      默认站点
    • 多tomcat运行
      假设:
      第一个tomcat文件夹为tomcat8-1,路径为/home/tomcat8-1/
      第二个tomcat文件夹为tomcat8-2,路径为/home/tomcat8-2/
      分别修改tomcat文件夹/conf目录下server.xml的监听端口为不同端口。
      分别启动tomcat文件夹/bin目录下的startup.sh启动tomcat,停止同上文。
      即可运行多个tomcat。

    四、Tomcat绑定SSL证书

    注:根据官方文档tomcat8.5且JAVA7及其以上才支持SNI。如果tomcat版本较低且需要绑定多个域名情况下,建议使用反向代理方式部署HTTPS。
    <Connector port="8080"配置字段下新增443端口监听设置即可。

    配置如下:

    <Connector port="443"
    protocol="HTTP/1.1"
    SSLEnabled="true"
    scheme="https"
    secure="true"
    keystoreFile="pfx证书路径"
    keystoreType="PKCS12"
    keystorePass="证书导入密码"
    clientAuth="false"
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
    SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
    SSLCipherSuite="ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4"/>
    

    保存后重启tomcat服务。
    测试效果:

    测试效果

    从上面探针可以看到我这里使用tomcat版本为8.5.23,支持SNI,即可以绑定多个域名和对应证书。
    tomcat中多域名SSL绑定使用SSLHostConfig配置字节来分别制定每个域名对应证书文件和设置。
    这里使用apache格式证书文件绑定,增加内容如下:

    <Connector port="443"
         protocol="org.apache.coyote.http11.Http11Nio2Protocol"
         maxThreads="150"
         SSLEnabled="true"
         defaultSSLHostConfigName="milworm.cn" >
         <!--第一个域名证书设置-->
          <SSLHostConfig hostName="milworm.cn" >
           <Certificate certificateKeyFile="D:/server/Apache2.2/conf/cert/milwrom/private.key"
             certificateFile="D:/server/Apache2.2/conf/cert/milwrom/certificate.crt"
             certificateChainFile="D:/server/Apache2.2/conf/cert/milwrom/ca_bundle.crt"
             type="RSA" />
          </SSLHostConfig>    
         <!--第二个域名证书设置--> 
         <SSLHostConfig hostName="www.pentester.cn" >
            <Certificate certificateKeyFile="D:/server/Apache2.2/conf/cert/pentester/private.key"
             certificateFile="D:/server/Apache2.2/conf/cert/pentester/certificate.crt"
             certificateChainFile="D:/server/Apache2.2/conf/cert/pentester/ca_bundle.crt"
             type="RSA" />
          </SSLHostConfig>     
      </Connector>
    

    如图:

    配置文件

    如上,分别指定了milworm和pentester域名的证书路径。

    使用host配置字节方式新增两个站点,分别绑定不同域名指向不同目录:


    新增站点

    注:若IIS反向代理tomcat绑定https时,选择上启用SSL卸载。以免tomcat未配置HTTPS访问的情况下请求得不到正常响应。

    相关文章

      网友评论

        本文标题:CentOS下tomcat安装配置

        本文链接:https://www.haomeiwen.com/subject/nakoxftx.html