apache+tomcat+jk+ssl实现tomcat集群https服务(windows)

在网上查找了许多资料,搞了两天才搞出来,记录下来。

httpd-2.2.22-win32-x86-openssl-0.9.8t.msi,apache-tomcat-7.0.23-windows-x64.zip,tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip,Win64OpenSSL-0_9_8x.exe。

下面列出关键步骤

一、安装apache,tomcat集群

这一步网上有很多教程,按照步骤操作基本上没问题。

安装apache,略。

tomcat解压,我是解压了两份,分别命名为tomcat1,tomcat2.

解压tomcat-connectors,取出mod_jk.so。

1、配置jk,即tomcat集群

我把mod_jk.so直接放在了apache/conf目录下,新建jk配置文件,如jk.conf,我也直接放apache/conf目录下。在apache的httpd.conf文件中加入下面一句。

Include conf/jk.conf
jk.conf配置如

#加载jk模块
LoadModule jk_module conf/mod_jk.so
#集群设置
JkWorkersFile conf/jk.properties
#指定那些请求交给tomcat处理,"controller"为在jk.propertise里指定的负载分配控制器名
JkMount /* controller

配置集群,新建文件jk.properties,同样放在conf目录下,内容如下,注意端口,ip正确

#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=9009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
 
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1

apache部分的配置基本完成了。现在修改tomca,server.xmlt配置,首先修改端口,跟jk的设置一致,其他修改点

<Engine name="Catalina" defaultHost="localhost">
修改为,注意跟jk配置中的名字,端口一致
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
把下面一行的注释打开
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

web项目需要在web.xml中加上以下内容,以实现两个tomcat之间的会话复制

<distributable/>

附上网上流传的测试项目test,就两个文件,文件test/index.jsp,test/WEB-INF/web.xml。在tomcat的server.xml修改配置

<Context docBase="test" distributable="true" path=""/>
index.jsp

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
  out.println("<br> ID " + session.getId()+"<br>");
  // 如果有新的 Session 属性设置
  String dataName = request.getParameter("dataName");
  if (dataName != null && dataName.length() > 0) {
     String dataValue = request.getParameter("dataValue");
     session.setAttribute(dataName, dataValue);
  }
  out.println("<b>Session 列表</b><br>");
  System.out.println("============================");
  Enumeration e = session.getAttributeNames();
  while (e.hasMoreElements()) {
     String name = (String)e.nextElement();
     String value = session.getAttribute(name).toString();
     out.println( name + " = " + value+"<br>");
         System.out.println( name + " = " + value);
   }
%>
  <form action="index.jsp" method="POST">
    名称:<input type=text size=20 name="dataName">
     <br>
    值:<input type=text size=20 name="dataValue">
     <br>
    <input type=submit>
   </form>
</body>
</html>
web.xml

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
       <display-name>TomcatDemo</display-name>
       <distributable/>
	   <welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

二、配置ssl

我是按照的openssl的windows版来生成证书的,也可以参照http://blog.sina.com.cn/s/blog_6f67b91d010115tt.htmlhttp://blog.csdn.net/mengfanpp/article/details/4101333

安装完成后,会生成一个环境变量OPENSSL_CONF,D:\OpenSSL\bin\openssl.cfg,若之后修改安装路径的话注意这个地方。手工添加D:\OpenSSL\bin\到path。

生成根证书,服务器证书用到的命令

openssl genrsa -des3 -out ca.key 1024
openssl rsa -in ca.key -out ca.key
openssl req -new -x509 -key ca.key -out ca.crt -config D:\OpenSSL\bin\openssl.cfg
openssl genrsa -des3 -out server.key 1024
openssl rsa -in server.key -out server.key
openssl req -new -key server.key -out server.csr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
生成的服务器证书server.crt,server.key我把它放到apache/conf下。

修改apache/httpd.conf,放开Include conf/extra/httpd-ssl.conf的注释。

找到conf/extra/httpd-ssl.conf,加入LoadModule ssl_module modules/mod_ssl.so,找到VirtualHost,修改为如以下内容

<VirtualHost _default_:443>
#https交给jk转发给tomcat
JkMount /* controller
#证书路径
SSLCertificateFile "D:/apache/conf/server.crt"
#证书key
SSLCertificateKeyFile "D:/apache/conf/server.key"

到此为止,配置基本完成。如果想禁止http访问,只开放https的话,把apache/httpd.conf下面的Listen 80注掉就可以了,这样就只开放了443的https端口。


tomcat的https配置

利用jdk的keytool工具

keytool -v -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat.keystore

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true" keystoreFile="d:/tomcat.keystore" keystorePass="123456"
               clientAuth="false" sslProtocol="TLS" />


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值