CentOS下tomcat安裝配置

weixin_33751566發表於2018-03-02

一、所需軟體包下載

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>為繫結多個域名,如果不需要在繫結其他域名則不用配置。

    7657211-0f7dace85a3e7a18.png
    同埠配置

  • 不同埠配置:
    在預設</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)
    新增站點:
    7657211-f6b07e55b0f8f33f..jpg
    新增站點

    預設站點:
    7657211-318a78617751428e..jpg
    預設站點
  • 多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服務。
測試效果:

7657211-d816745fd7479c0b..jpg
測試效果

從上面探針可以看到我這裡使用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>

如圖:

7657211-1597d84cba3a4d43..jpg
配置檔案

如上,分別指定了milworm和pentester域名的證照路徑。

使用host配置位元組方式新增兩個站點,分別繫結不同域名指向不同目錄:


7657211-61045e5b98487cca..jpg
新增站點

注:若IIS反向代理tomcat繫結https時,選擇上啟用SSL解除安裝。以免tomcat未配置HTTPS訪問的情況下請求得不到正常響應。

相關文章