一、所需软件包下载
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) |
二、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 "%r" %s %b" /> <Alias>www.域名1.com</Alias> <Alias>www.域名2.com</Alias> <Alias>www.域名3.com</Alias> </Host>
把name、appBase、docBase的内容改为实际的域名和项目路径。
<Alias>xxx</Alias>
为绑定多个域名,如果不需要在绑定其他域名则不用配置。不同端口配置:
在默认后面新增以下内容: ```undefined
其中Connector port、defaultHost、Hostname、appBase、docBase、日志prefix为你实际的即可。<br />例如下图中8090端口为http协议端口、8010端口为AJP协议端口。这两个端口不要和已有的services配置字节中端口冲突。(默认的配置中http协议端口为8080、AJP端口为8009)<br />新增站点:<br />![](http://upload-images.jianshu.io/upload_images/7657211-f6b07e55b0f8f33f..jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240#width=)<br />默认站点:<br />![](http://upload-images.jianshu.io/upload_images/7657211-318a78617751428e..jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240#width=)
- 多tomcat运行<br />假设:<br />第一个tomcat文件夹为tomcat8-1,路径为`/home/tomcat8-1/`<br />第二个tomcat文件夹为tomcat8-2,路径为`/home/tomcat8-2/`<br />分别修改tomcat文件夹/conf目录下server.xml的监听端口为不同端口。<br />分别启动tomcat文件夹/bin目录下的startup.sh启动tomcat,停止同上文。<br />即可运行多个tomcat。
四、Tomcat绑定SSL证书<br />注:根据官方文档tomcat8.5且JAVA7及其以上才支持SNI。如果tomcat版本较低且需要绑定多个域名情况下,建议使用反向代理方式部署HTTPS。<br />在`<Connector port="8080"`配置字段下新增443端口监听设置即可。
配置如下:
```undefined
<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访问的情况下请求得不到正常响应。