Docker中的tomcat配置https实战

因为安全要求,所有的项目需要使用https,所有的项目中的tomcat和jar都是运行在docker中,jar包只需要配置nginx为https访问即可,记录tomcat配置https

一. 准备tomcat配置https的证书
tomcat一般证书为jks证书,直接申请即可,然后需要对应的证书的password

二. 准备https配置的配置文件

  1. server.xml配置
    先准备一个server.xml文件,并放置在一个固定的位置即可
    (1)创建文件夹,放置证书: mkdir keys
        创建文件夹,放置server.xml文件: mkdir conf
        如果没有server.xml,可以使用文章底部的server.xml配置(tomcat8)这是初始的server.xml配置文件

二、修改配置文件,增加https配置

配置代码:(填写自己证书的路径、名称和password)

 <Connector executor="tomcatThreadPool"
               port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

 <Connector port="443" protocol="HTTP/1.1"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/server/tomcat/keys/xxxx.jks"
keystorePass="xxxxx"/>


这个配置是http和https同时访问,所以开通80和443,如果需要强制将http跳转到https, 需要将8080配置中的redirectPort="8443"修改为redirectPort="443",8009端口配置修改为:

三、配置docker容器

  1. 先将正在运行的docker容器停止
    docker stop tomcat
  2. 重新运行docker容器,并挂载配置文件和证书
    	docker run -d \
    	-v /server/tomcat/demo:/usr/local/tomcat/webapps \
    	-v /server/logs:/mnt/applog \
    	-v /server/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml \
    	-v /server/tomcat/keys:/usr/local/tomcat/keys \
    	-e TZ="Asia/Shanghai" \
    	--restart=always \
    	--privileged=true \
    	--name tomcat_new \
    	-p 80:80 -p 443:443 \
    	hub.c.163.com/library/tomcat:8.5.20-jre8
    

说明:
* -v /server/tomcat/demo 挂载宿主机中的demo目录到容器的webapps,就是项目运行的目录
* -v /server/logs:/mnt/applog 将容器中的log挂载到logs目录下
* -v /server/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml 将刚才配置完成的server.xml配置文件挂在到容器中
* -v /server/tomcat/keys:/usr/local/tomcat/keys 将第一步中准备的证书目录(里面有证书)挂载到容器中
* -e TZ="Asia/Shanghai" 设置时区
* -p 80:80 -p 443:443 映射端口,如果只需要https访问,其实也可以不映射80端口,或者第一步中配置80自动跳转到443即可
* hub.c.163.com/library/tomcat:8.5.20-jre8 所使用的镜像


重新运行容器即可,访问域名即可验证



tomcat8初始server.xml配置

   
			
	<Server port="8005" shutdown="SHUTDOWN">
	  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
	 
	  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
	  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
	  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
	  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
	
	
	  <GlobalNamingResources>
	
	    <Resource name="UserDatabase" auth="Container"
	              type="org.apache.catalina.UserDatabase"
	              description="User database that can be updated and saved"
	              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
	              pathname="conf/tomcat-users.xml" />
	  GlobalNamingResources>
	
	  <Service name="Catalina">
	
	    <Connector port="8080" protocol="HTTP/1.1"
	               connectionTimeout="20000"
	               redirectPort="8443" />
	
	    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
	
	    <Engine name="Catalina" defaultHost="localhost">
	
	
	      <Realm className="org.apache.catalina.realm.LockOutRealm">
	
	        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
	               resourceName="UserDatabase"/>
	      Realm>
	
	      <Host name="localhost"  appBase="webapps"
	            unpackWARs="true" autoDeploy="true">
	        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
	               prefix="localhost_access_log" suffix=".txt"
	               pattern="%h %l %u %t "%r" %s %b" />
			
      Host>
    Engine>
  Service>
Server>

你可能感兴趣的:(服务器相关)