环境:win10,jdk1.8,tomcat9,httpd2.4
1.安装apache
下载地址:https://www.apachehaus.com/cgi-bin/download.plx
解压压缩包即可;
第一次启动时出现错误如图:
修改conf下的http.conf文件:
改成当前安装路径,比如我是D:\apache\Apache24
再次启动访问localhost:
这边默认访问的是htdocs/index.html
如果想指定访问路径应该怎么做,比如我想访问到D:\apache\www路径(在D:\apache\www新建index.html和文件夹css),那就需要做个访问的根目录配置(同nginx的serverroot),一样是http.conf,将如下图的DocumentRoot改成D:\apache\www,再将该节点下的Options Indexes FollowSymLinks改成Options None(无法直接访问文件层次结构)
修改后重启访问localhost如图:
访问localhost/css:
这边apache的配置就先到这边
2.安装tomcat
下载地址http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.7/bin/apache-tomcat-9.0.7-windows-x64.zip
下载解压,将项目war包放到webapps目录下 ,到bin目录用startup.bat启动即可
3.apache整合tomcat
首先了解一下tomcat与apache如何协同工作:
1) Apache装有一个模块,这个模块叫mod_jk
2) Apache通过80端口负责解析任何静态web内容
3) 任何不能解析的内容,用表达式告诉mod_jk,让mod_jk派发给相关的app server去解释。
首先需要下载一个叫modjk的模块,(https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip)
下载后解压,将mod_jk.so文件拷贝到D:\apache\Apache24\modules目录下,并在http.conf加入如下配置
并在conf文件夹下加入配置文件workers.properties:
到这步已经整合完毕,将项目拷贝到documentroot以及tomcat的webapps下面进行测试:
打开localhost/项目名称
当我们登陆请求后台时 可以看到tomcat日志并且登陆成功,即整合成功
4.tomcat纵向集群
修改${apache_home}/conf/workers.properties如下:
配置到2个tocmat ,分别监听到端口,再将tomcat配置到jktest中
http.conf不用修改,因为用的一直都是jktest作为worker名称;
复制tomcat如图:
进入tomcat1,tomcat2修改server.xml,这边tomcat要同时运行,所以要保证端口配置唯一,比如8080&8081,8009&8010,8005&8006等
在tomcat1的servlet.xml找到如下配置
给Engine节点添加属性jvmRoute属性,属性值为worker里的tomcat,这边为tomcat1,(jvmRoute为tomcat集群复制session,通过session_cookie这种方式来实现session粘性,将特定会话附属到特定tomcat上,从而解决session不同步问题),在tomcat2的server.xml加入同样配置,jvmRoute指向tomcat2
在tomcat1,2的server.xml Engine节点加入如下配置,标注的端口保持唯一
在项目的web.xml文件</web-app>上面加一行</distributable>,告诉tomcat此项目需要做session持久化(注意,这边set到session的对象必须实现序列化接口处理)
配置后启动apache,tomcat1,tomcat2,:
即为集群配置成功,访问可以看到2个tomcat日志轮流跑动;
tips:tomcat优化
修改catalina.bat文件,给定jvm内存等
set JAVA_OPTS=-server -Xms1024M -Xmx1024M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true
修改server.xml