Apache HTTP Server与Tomcat整合

个人环境:Windows10,JDK8,Tomcat8.5,Apache2.4,JK模块1.2.4

前言

​ 其实网上有很多教程,但问题是得每次找个正确率很高的却很难。所以在此做个简单的记录,方便快速查找。

注意:

  • 关于JDK环境配置在此不多赘述。

  • Tomcat9版本配置中将AJP的配置注释了,所以很多人整合不合适

  • 下面会用到cmd命令窗口,一定要以管理员身份打开,否则权限不够。

开始整合

一、下载安装Apache HTTP Server

第一步:下载解压缩

下载地址https://www.apachehaus.com/cgi-bin/download.plx

第二步:配置文件

打开conf文件夹,修改其中“httpd.conf”文件配置;更改为自己的文件安放路径



第三步:安装

管理员身份打开cmd,进入文件bin目录所在位置,并输入以下命令

# 服务名可以自定义,这里我的是Apache24
httpd -k install -n "Apache24"
# 卸载
httpd -k uninstall -n "Apache24"

同时可以打开同级目录下的ApacheMonitor程序

第四步:启动

# 启动 Apache 服务
httpd.exe -k start -n "Apache24"
# 重启 Apache 服务
httpd.exe -k restart -n "Apache24"
# 停止 Apache 服务
httpd.exe -k stop -n "Apache24"

并查看是否启动成功,如果可以成功访问localhost:80或者ApacheMonitor程序中按钮亮起说明安装启动成功

二、下载安装Tomcat

在此也不做多余赘述,只需去官网下载解压即可

第一步:下载解压缩

下载地址https://tomcat.apache.org/download-80.cgi

第二步:进入bin目录,双击startup.bat即可

注意:个人是未修改原始文件配置信息,所以不是从原始文件开始更改的,可能问题在自己的配置上。

三、整合-下载JK模块

第一步:下载解压缩

下载地址http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/

注意:根据自己的需求版本匹配进行下载,个人这里是下载的1.2.40版本

第二步:复制mod_jk.so

解压缩后,找到mod_jk.so文件,然后将文件复制到Apache下的modules文件夹下

第三步:新建“mod_jk.conf”文件

步骤图



在Apache下的conf文件夹下新建

输入以下文件内容

#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.do controller
JkMount /*WEB-INF controller
JkMount /*j_spring_security_check controller
JkMount /*.action controller
JkMount /servlet/* controller
JkMount /*.jsp controller
JkMount /*.do controller
JkMount /*.action controller
JkMount /* controller

第四步:修改httpd.conf文件

去Apache下,找到该配置文件,在文件末尾添加一段代码,引入mod_jk.conf配置文件

Include conf/mod_jk.conf

第五步:新建“workers.properties”

worker.list =controller,tomcat1,tomcat2   #server 列表
#========tomcat1========
worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
#worker.tomcat2.port=8019
#worker.tomcat2.host=localhost
#worker.tomcat2.type=ajp13
#worker.tomcat2.lbfactor = 1
#========controller,负载均衡控制器========
worker.controller.type=lb
#指定分担请求的tomcat
worker.controller.balanced_workers=tomcat1,tomcat2
#回话是否有粘性,false表示无粘性,同一个回话的请求会到不同的tomcat中处理
worker.controller.sticky_session=false
#当一个节点蹦了,如果设值为true,那么服务器返回500错误给客户端,如果设值为false,则转发给其他的tomcat,但是会丢失回话信息
worker.controller.sticky_session_force=false

建议

看网上有人说先启动Apache再去启动Tomcat这样不会出问题,这个点可以注意一下,虽然我个人没遇到。

如果其中会碰到问题,可以参考该博文https://blog.csdn.net/dongdong9223/article/details/64921439

关于Tomcat中AJP的配置

<!-- Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 -->
<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" />

第一个连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

第二个连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。AJP连接器可以通过AJP协议和一个web容器进行交互。

关于proxy、proxy_blancer和mod_jk的比较

  1. proxy的缺点是,当其中一台tomcat停止运行的时候,apache仍然会转发请求过去,导致502网关错误。但是只要服务器再启动就不存在这个问题。
  2. mod_jk方式的优点是,Apache 会自动检测到停止掉的tomcat,然后不再发请求过去。

    缺点就是,当停止掉的tomcat服务器再次启动的时候,Apache检测不到,仍然不会转发请求过去。
  3. proxy和mod_jk的共同优点是.可以只将Apache置于公网,节省公网IP地址资源。

    可以通过设置来实现Apache专门负责处理静态网页,让Tomcat专门负责处理jsp和servlet等动态请求。

    共同缺点是:如果前置Apache代理服务器停止运行,所有集群服务将无法对外提供。
  4. proxy和mod_jk对静态页面请求的处理,都可以通设置来选取一个尽可能优化的效果。

    mod_proxy_balancer和mod_jk都需要修改tomcat的配置文件配合

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  5. 这三种Tomcat集群方式对实现最佳负载均衡都有一定不足,mod_proxy_balancer和mod_jk相对好些,mod_jk的设置能力更强些。lbfactor参数来分配请求任务。
  6. apache自带mod_proxy功能模块中目前只可以实现两种不同的负载均衡集群实现方式,第一种是分工合作的的形式,通过各台主机负责不同的任务而实现任务分工。第二种是不同的机器在担任同样的任务,某台机器出现故障主机可以自动检测到将不会影响到客户端,而第一种却不能实现但第一种实现方式的优点在于他是主服务器负担相应没第二种大因为台只是提供跳转指路功能,形象的说他不给你带路只是告诉你有条路可以到,但到了那是否可以看到你见的人他已经不会去管你了。相比之下第二种性能要比第一种会好很多;但他们都有个共同点都是一托N形式来完成任务的所以你的主机性能一定要好。

关于apache整合tomcat部署集群

可参考该博文:apache整合tomcat部署集群

Tomcat优化(未亲测)

在service.xml文件里加入

maxThreads="800" minSpareThreads="25" maxSpareThreads="700" enableLookups="false" acceptCount="1200"

maxThreads=”150” 表示最多同时处理150个连接

minSpareThreads=”25” 表示即使没有人使用也开这么多空线程等待

maxSpareThreads=”75” 表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的。

acceptCount=”100” 当同时连接的人数达到maxThreads时,还可以接收排队的连接,超过这个连接的则直接返回拒绝连接

Apache+Tomcat配置测试

测试Tomcat

首先空项目跑一下,看tomcat能否正常启动

然后加项目跑一下,看tomcat能否正常启动

测试Apache

Tomcat启动后重启一下Apache服务,看能否启动

注意:Apache有可能启动不起来,那么解决方式是查看Apache安装目录下的logs目录下的error.log文件,

根据log文件解决可能存在的问题。直到Apache可以正常启动,至此Apache就可以正常启动了。

测试负载均衡

写一个测试jsp放置于项目中,运行一下,看控制台输出

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="utf-8"%>

Insert title here

<%
System.out.println("===========================");
%>

经测试
1. workers.properties配置为worker.controller.sticky_session=1,且tomcat的server中Cluster未打开时,同一浏览器多次访问均进同一tomcat,换浏览器后会进另一个tomcat。
2. workers.properties配置为另一种方式时为负载均衡,请求均匀分布在两个tomcat。

最后

虽然技术在不断的更替,但是有时间的话可以多了解一点是一点。

傲不可长,欲不可纵,乐不可极,志不可满

Apache HTTP Server与Tomcat整合学习记录的更多相关文章

  1. Apache Http Server和Tomcat 之区别

    转自:Apache Http Server和Tomcat 之区别 Apache官方网站:http://www.apache.org/Tomcat官方网站:http://tomcat.apache.or ...

  2. [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  3. 转自IBM:Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/index.html 整合 Apache Http Server ...

  4. Windows 下 Apache HTTP Server 与 Tomcat 的整合

    整合准备: 1.Apache HTTP Server(下文用Apache简称) 2.Tomcat 7或8 3.mod_jk.so (tomcat-connectors)-这个文件是用来链接http s ...

  5. Apache HTTP Server 与 Tomcat 的三种连接方式介绍(转)

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  6. Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    本文转载自IBM developer 首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装 ...

  7. Apache http server和tomcat的区别

    Apache官方网站:http://www.apache.org/Tomcat官方网站:http://tomcat.apache.org/ 1. Apache是web服务器,Tomcat是应用(jav ...

  8. What is the difference Apache (Http Server) and Tomcat (Servlet Container)

    The Apache Project The Apache Project is a collaborative software development effort. Its goal is to ...

  9. apache http server 和tomcat的区别 以及nginx

    Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器. 要明白他们之间的区别,我们首先需要明白HTTP协议.HTML页面.JSP.Servlet之 ...

随机推荐

  1. Vue学习笔记-Vue.js-2.X 学习(六)===>脚手架Vue-CLI(项目说明-Babel)

    五  Vue学习-vue-cli脚手架学习(创建只选一个选项:Babel) 1. 项目目录说明 node_modules : 包管理文件夹 public : 静态资源 src : 源代码 gitign ...

  2. C++教程01:计算机系统的组成

    教程首发 | 公众号:lunvey 学习C++之前,需要先了解一点基础的计算机知识.毕竟C++是跑在计算机系统上的,我们写的程序都是一段段的指令集. 首台计算机ENIAC问世之后,缺少原理指导.冯诺依 ...

  3. Kubernetes 实战 —— 02. 开始使用 Kubernetes 和 Docker

    创建.运行及共享容器镜像 P23 运行容器 P24 运行 P24 可以运行 Docker 客户端可执行文件来执行各种 Docker 命令.例如:可以试着从 Docker Hub 的公共镜像仓库拉取.运 ...

  4. css实现鼠标滑过出现从中间向两边扩散的下划线

    这个效果一开始我是在华为商城页面上看到的,刚开始还以为挺复杂,实现的时候还有点没头绪.不过,还好有百度,借此记录一下我在导航条上应用的实现方法. 主要是借助了伪元素,代码如下: <div cla ...

  5. swaks制作钓鱼邮件

      一.在网站:https://bccto.me/ 申请一个十分钟的邮箱 二.使用命令行,命令行解释如下: --from hacker@qq.com //发件人的邮箱 --ehlo qq.com // ...

  6. 虚拟机安装centos系统【史上最详细的】

    因为文章中有很多的图片,在博客园中还需要单张上传,所以使用了将markdown的文件链接存入网盘中让大家下载 windows系统请使用Typora软件打开 如果不知道Typora是什么软件,请在百度搜 ...

  7. P2766 最长不下降子序列问题 题解(网络流)

    题目链接 最长不下降子序列问题 解题思路 分成三小问解决. 第一小问,求\(LIS\),因为\(n<=500\),直接\(O(N^2)\)暴力求解即可. 第二三小问,建立模型用网络流求解. 对于 ...

  8. HDU_6695 Welcome Party 【思维】

    一.题目 Welcome Party 二.分析 最开始的时候分析错了,认为只要找两个类型中的最小差值就可以了,忽略了是求两个类型中最大值的最小差值. 那么可以对第一个类型进行从大到小排序,枚举这个类型 ...

  9. webpack核心模块tapable用法解析

    前不久写了一篇webpack基本原理和AST用法的文章,本来想接着写webpack plugin的原理的,但是发现webpack plugin高度依赖tapable这个库,不清楚tapable而直接去 ...

  10. JavaScript中函数防抖、节流

    码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14565642.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...