以下tomcat版本为8.5.20
我们为什么要引入 Apache 或者其他的一些专门的HTTP 服务器呢?原因有下面几个:
-
提升对静态文件的处理性能
-
利用 Web 服务器来做负载均衡以及容错
-
无缝的升级应用程序
方式一:JK
这是最常见的方式。
JK是通过AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。JK本身提供了一个监控以及管理的页面 jkstatus,通过jkstatus 可以监控JK目前的工作状态以及对到tomcat的连接进行设置。
第一步:编译生成mod_jk模块 在apache中加载mod_jk并对其进行配置,在tomcat中修改配置以使其能接受mod_jk的转发编译生成mod_jk.so
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz
tar -zxf tomcat-connectors-1.2.48-src.tar.gz
tar xf tomcat-connectors-1.2.48-src.tar.gz -C /usr/local/src/
cd /usr/local/src/tomcat-connectors-1.2.48-src/native/
yum install -y httpd-devel #注意:编译之前先安装 httpd-devel,提供apxs命令
./configure --with-apxs=/usr/bin/apxs
make
make install
JK 的配置最关键的有三个文件,分别是
httpd.conf:Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息
workers.properties:到 Tomcat 服务器的连接定义文件
uriworkermap.properties:URI 映射文件,用来指定哪些 URL 由 Tomcat 处理,你也可以直接在 httpd.conf 中配置这些 URI,但是独立这些配置的好处是 JK 模块会定期更新该文件的内容,使得 我们修改配置的时候无需重新启动 Apache 服务器。
Workers实际上属于Tomcat的链接器(Connector),代表了一个Tomcat实例,这个实例代表了由某种 web服务器来执行 servelet程序。
举例来说,我们可以使用某个服务器,例如apache 来把servelet请求转递Tomcat进程(worker)来进行后 台处理。
Tomcat workers都定义在一个叫做workers.properties属性文件之中,并且workers的说明告诉应该如 何使用它们。
可以通过属性文件来为Tomcat Web服务器插件定义Worker。(在conf/下有个文件名为 workers.properties就是一个可用Workers属性文件).
worker.list=<由逗号分离开的worker名称列表> worker.list= worker1, worker2
当启动服务器的时候,Web服务器插件会把这些出现在worker.list属性中出现名字的worker实例化,而这些也就是你可以用来映射请求的worker
Workers的类型
对于每个有名字的worker都会有若干条目给使用者提供worker自身的附加信息。这些信息包括worker 的类型和与之相关的worker的信息。
JK 1.2.5中包含下列的worker类型:
第二步:编写测试网站文件
静态页面
vim /var/www/html/index.html
<h1>static_page_from_apache</h1>
动态页面
vim /usr/local/tomcat/webapps/ROOT/test.jsp
<h1>dynamic_page_from_tomcat</h1>
第三步:配置jk模块,实现Apache整合Tomcat(*_jk.conf)
创建相关配置文件。
[root@node1 ~]# cat /etc/httpd/conf.d/httpd_jk.conf
LoadModule jk_module modules/mod_jk.so
#JkWorkersFile 路径根据实际情况填写
JkWorkersFile conf.d/workers.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
#根据实际情况自己定义即可,就是将什么样的请求转发给worker1处理
JkMount /*.jsp worker1
JkMount /servlet/* worker1
JkMount /*.do worker1
JkMount /*.action worker1
JkMount /jkstatus status # 状态页
第四步:配置连接tomcat的文件(workers.properties)
[root@node1 ~]# cat /etc/httpd/conf/workers.properties
#路径根据实际情况填写
workers.tomcat_home=/usr/local/tomcat/
workers.java_home=/usr/java/jdk1.8.0_144
worker.list=worker1
# Set properties for worker1 下面的都可以不用修改,感兴趣可以搜索相关含义
worker.worker1.type=ajp13
worker.worker1.host=localhost #配置tomcat服务器ip地址
worker.worker1.port=8009
worker.worker1.lbfactor=50
#worker.worker1.cachesize=10
#worker.worker1.cache_timeout=600
#worker.worker1.socket_keepalive=1
#worker.worker1.socket_timeout=300
worker.list = status
worker.status.type=status
第五步:重启httpd和tomcat服务
systemctl restart httpd tomcat
第六步:测试
动态页面不再需要输入端口