Web服务器的配置与管理(Apache+tomcat)
项目场景
公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用、移动APP等领域延伸,此时原来开发web服务的php语言已经不适应新的场景,需要上java技术架构,现要求你根据公司需要,实现基于java平台的web应用服务选型、搭建、实现和应用。
基础知识
1. java和jdk概念
Java是一种面向对象的语言,它的层次比C更高一点,层次指的是离硬件更远一点。它将写好的程序文件(.java)通过java编译器javac编译成字节码类型的class文件(.class),在编译过程中涉及词法分析、语法分析、语义分析、字节码生成等过程,最终生成字节码的class文件。class文件是Java的类文件,是编译成功后的字节码文件,字节码由Java虚拟机JVM解释执行,它将每一条字节码送给解释器,再翻译成机器语言,从而在特定的机器上运行。Java通过JVM的方式实现了一次编译到处运行的功能。
源码XXX.java–>javac编译器–>字节码XXX.class–>JVM–>机器语言(依赖于不同平台)–>执行
JRE(Java Runtime Environment)是包含了JVM和其他一些简单功能的JAVA运行环境,它适用于只运行java程序时。JDK(Java Development Kit)比JRE包含了更多东西,它除了能作为JAVA运行环境,还提供了很多用于开发的工具,所以它适用于开发程序时使用。
JAVA SE是java开发标准版,里面有JDK,Java EE是企业版,本质上ee只是比se多提供了几个类库而已。
jsp、servlet
在web应用程序上,早期Java的实现方式是服务器端放置应用程序,客户端访问时将其下载到客户端本地并执行,这样不仅不安全,而且要求客户有java运行环境,这种实现方式是applet。与applet相对的是servlet,但它是服务端程序。后来,java将应用程序放在服务器端,客户端请求此应用程序时,服务端通过servlet类库分析http协议,将请求的应用程序在服务端执行,然后将结果组织起来返回给客户端,但此时servlet能分析的http协议非常简单,且和html的组织方式非常不友好,它要求java程序员首先得懂html开发(实际上现在还是如此,java程序员至少要懂简单的html/css/javascript等前端技术),于是后来出现了JSP类库。
JSP可以简单的将java代码嵌入在html文档中,它们能够很友好地结合,结合后的文档类型为.jsp文件。当客户端请求应用程序资源时,JSP类库负责解析.jsp文件中的jsp部分并通过jasper组件将其翻译成servlet的java源代码,然后再编译成class文件并交给JVM来执行。实际上,jsp的本就就是servlet,jsp类只不过是继承于servlet类并添加了一些和html友好结合的特性,最终它还是要翻译成servlet代码。
JSP的本质还是Servlet,每个JSP页面就是一个Servlet对象(当然也可能引用了其他servlet对象),Servlet再负责响应用户的动态请求数据(其实也包括静态数据,因为jasper翻译jsp代码时,静态标签也被翻译到servlet的java源文件中以待输出)。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。
tomcat和httpd、nginx等http服务程序的对比:
(1) 一个java程序只有一个进程,但是可以有多个线程,也就是说java程序的开发是基于线程的。那唯一的进程就是JVM进程,每个应用程序都开启一个JVM进程,根据开发时设计的多线程代码,在这个JVM进程中会启动多个线程。它不像httpd或nginx,能开启多进程(对于tomcat而言,这意味着多个不同的应用程序甚至意味着开启多个tomcat实例)。
(2) tomcat可以处理动态请求,也可以处理静态资源请求。但无论是动态资源,还是静态资源的请求,都是经过servlet处理并响应给客户端的,只不过请求静态资源时使用的是默认的servlet。虽然它能像httpd和nginx一样处理静态资源,但显然,它既要处理动态请求,又要处理静态请求,压力会很大。因此tomcat前一般使用httpd或nginx专门处理静态请求,而动态请求则通过反向代理的方式代理至tomcat。
web服务器、web容器、应用程序服务器
web服务器用于提供web服务,要求能解析http协议,通常认为提供静态内容的服务器是web服务器。如apache httpd、nginx等。
对于java而言,web容器是能提供servlet容器的服务器,它们是等价的概念。常见的有tomcat、weblogic、websphere、jboss。其中tomcat只提供servlet容器,它们在功能上是等价的。除tomcat外,后面3种web容器还提供除servlet容器外的EJB容器,专用于大型分布式程序开发。
应用程序服务器是用于提供应用服务的服务器。这是业务逻辑上的概念划分。更具体一点的说,它提供WEB容器(servlet容器)、EJB容器以及其他功能。
它们之间的关系和功能大致如下:web服务器提供web服务,主要处理http请求并响应给客户端,并可以将动态请求委托给其他程序,如cgi脚本、jsp脚本、asp脚本等进行处理;web容器即servlet容器主要负责处理基于http请求的动态jsp内容;EJB容器主要提供和后端数据库服务、其他服务进行交互的功能;应用服务器通常来说包括servlet容器或EJB容器,它们都运行于支持Java的应用服务器中,因此tomcat/weblogic/websphere/jboss都算是应用服务器。
tomcat体系结构
tomcat是jdk+servlet(严格地说是+jsp)实现的精简版的java ee,由于它只在jdk的基础上附加了jsp和servlet类库,所以它的应用范围主要是web应用。tomcat项目目前由apache软件基金会维护。
它是一种应用程序服务器,只提供servlet容器,同时还提供apache解析静态HTML,只不过它的处理能力不如独立的apache服务器。类似的应用程序服务还有websphere/weblogic/jetty/resin/jboss等,它们都是在jdk基础上附加各种类库实现不同程度的java ee(tomcat=jdk+servlet)。
apache和tomcat区别
-
Apache:
Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。(Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。) -
缺点:配置相对复杂,自身不支持动态页面。
-
Tomcat:
Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
Apache与Tomcat的比较 -
相同点:
两者都是Apache组织开发的、都有HTTP服务的功能、两者都是免费的。 -
不同点:
- Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器。
- Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页如(ASP,PHP,CGI,JSP)等动态网页的就不行。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。
- Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想;
- Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
- 实际使用中Apache与Tomcat常常是整合使用:
- 如果客户端请求的是静态页面,则只需要Apache服务器响应请求。
- 如果客户端请求动态页面,则是Tomcat服务器响应请求。
- 因为JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。
配置实施
源码安装
1、源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
configure、Makefile.in 一般是项目管理器自动生成的,这依赖于两个开发工具:
autoconf:生成configure脚本文件;
autoconf 需要结合一个配置文件来和其它命令生成configure脚本;这个配置文件告诉autoconf当前代码有哪些特性、指定哪些安装路径等,而后才能生成configure脚本;
automake:生成Makefile.in模板文件;
automake 也要结合一个文件,这个指明有多少程序文件、它们的依赖关系是什么、以及使用哪一种版本的编译器等,而后才能生成Makefile.in;
注意:在安装之前查看INSTALL和README文件查看安装方法,因为不同程序包安装步骤不一样,有的程序包不需要configure,直接make后执行make install;而有的程序包不需要执行make install,只有一个二进制文件直接复制即可完成.
(1) ./configure(也可能是config文件)
–help:获取支持使用的选项;
在执行make命令之前,用户指定程序包的编译参数、启用特性、安装路径等等;
configure脚本会收集当前系统上的开发环境中所依赖各组件的版本、特性等,并检查所依赖的环境是否能满足,如果检查到所依赖的程序包不存在立即报错,无法执行下一步。最后会根据用户指定信息和Makefile.in文件生成一个makefile文件;
通用的几个选项:
–prefix= :指定安装的路径
–sysconfdir= :指定配置文件目录
–enable-feature :启用某个特性
–disable-fecture :禁用特性
–with-function :启用某功能
–without-function :禁用某功能
(2) make
每个源代码都有专用的makefile,在make时依据这个配置文件,调用指定的预处理器做处理、调用指定的编译器做处理、编译文件的顺序等操作等;
(3) make install
其实是一些脚本,实现把构建出的应用程序,分别分配到用户指定的目录中;如创建出的二进制文件放到指定的二进制目录、库文件放到指定的库目录等等,使用install拷贝命令也能实现;
2. 安装后的配置
(1) 将二进制程序目录添加至PATH文件变量中,否则只能使用绝对路径才能运行程序
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf,添加新的库文件所在的目录至此文件中;
例如:/usr/local/apache2/lib
ldconfig -v:重新加载库文件路径,并查看;
ldconfig -p:查看已加载所有库文件路径;
(3) 导出头文件
/usr/include/目录下,创建软链接;
ln -s target_dir soft_link ##可以导出一个目录为所有文件链接,也可以为每一个头文件导出一个链接,然后把创建的链接输出到/usr/include/目录下,或者直接复制头文件至/usr/include/目录;
(4) 导出man手册
Centos7是在/etc/man_db.conf的40到50行之间,添加一个MANPATH参数;
MANPATH_MAP /usr/local/apache2/bin /usr/local/apache2/man
安装jdk
1、下载安装java所需要的环境和开发工具包
(1)Java 所需要的环境和开发工具包介绍
JRE: Java Runtime Environment
JDK:Java Development Kit JRE
JRE:java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK:java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本。
(2)rpm -qa | grep java
:查看已安装版本信息,如果有,需要删除。
java –version
: 显示java程序的版本信息。(无此目录,表示未安装)
卸载:
# rpm删除会提示依赖的问题,如果强制删除,我怀疑会有一些bug故选择yum删除
[root@hmx ~]# yum list installed | grep java #查询系统内的相关jdkjava-1.8.0-openjdk.x86_64 1:1.8.0.402.b06-1.el7_9 @updates
java-1.8.0-openjdk-headless.x86_64 1:1.8.0.402.b06-1.el7_9 @updates
javapackages-tools.noarch 3.4.1-11.el7 @anaconda
python-javapackages.noarch 3.4.1-11.el7 @anaconda
tzdata-java.noarch 2024a-1.el7
#卸载所有openjdk相关文件输入
yum -y remove java-1.8.0-openjdk*
#卸载tzdata-java
yum -y remove tzdata-java.noarch
删除完之后只剩
(3)下载最新稳定JDK:(从自己的Windows操作系统中下载)
当前最新版本下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
历史版本下载地址: http://www.oracle.com/technetwork/java/javase/archive-139210.html
(4)下载完成后,将JDK压缩包 复制一份到/usr/local/src/作备份。
(5)java/jdk文件拷贝一份到/usr/java,并解压缩,完成后删除JDK压缩包。
[root@hmx ~]# mkdir /usr/java
[root@hmx ~]# cd /usr/java/
[root@hmx java]# ls
[root@hmx java]# cp jdk-8u202-linux-i586.tar.gz /usr/local/src/
[root@hmx java]# tar -vxf jdk-8u202-linux-i586.tar.gz
(6)配置JDK环境变量
编辑全局变量: vim /etc/profile
最后一行输入如下语句:
#java environment
export JAVA_HOME=/usr/java/jdk1.8.0_202
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
(7)让刚刚设置的环境变量生效并检查是否安装成功。
①让刚刚设置的环境变量生效:source /etc/profile
②检查是否配置成功:java -version
如果有这个报错,则执行如下操作
-bash: /usr/java/jdk1.8.0_202/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
yum install glibc.i686
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。
安装tomcat
(1)首先去Apache官网下载安装包
地址:http://tomcat.apache.org/
(2)把刚下载的apache-tomcat-8.5.99.tar.gz包上传到:/usr/local/,然后解压,将apache-tomcat-8.5.99创建软连接为tomcat,然后移除压缩包。
tar -vxf apache-tomcat-8.5.99.tar.gz
ln -s apache-tomcat-8.5.99 tomcat
(3)启动tomcat:
进入到tomcat/tomcat/bin目录下,运行./startup.sh。
[root@hmx local]# cd tomcat/bin
[root@hmx bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_202
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@hmx bin]# firewall-cmd --add-port=8080/tcp --permanent
success
[root@hmx bin]# firewall-cmd --reload
success
(4)本地物理机用浏览器通过ip:8080访问查看 (比如:我的ip是192.168.88.130:8080)
安装apache
(1)查询是否安装了apache服务器httpd
[root@hmx bin]# rpm -qa|grep httpd
httpd-2.4.6-99.el7.centos.1.x86_64
httpd-tools-2.4.6-99.el7.centos.1.x86_64
httpd-manual-2.4.6-99.el7.centos.1.noarch
(2)卸载系统自动装的apache服务器httpd
[root@hmx bin]# httpd -k stop #停止httpd服务器
[root@hmx bin]# yum remove httpd #卸载httpd服务器
(3)下载httpd-2.4.43 apr-1.5.2.tar.gz apr-util-1.5.4 pcre-8.44(不要下载最新版本,编译会出错)
cd
mkdir tmp
cd tmp
wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz --no-check-certificate
wget https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz --no-check-certificate
wget https://udomain.dl.sourceforge.net/project/pcre/pcre/8.44/pcre-8.44.tar.gz --no-check-certificate
wget https://archive.apache.org/dist/httpd/httpd-2.4.43.tar.gz --no-check-certificate
这些wget地址并不是一成不变的,这是截止2023年都好用的,有时候下载不上,就自己上官网查,说不定重构了,很多博客都用的过期地址
(4)检查系统是否安装了GCC
[root@hmx bin]# gcc
bash: gcc: 未找到命令... #出现未找到命令提示,说明没有安装GCC
(5)安装GCC和gcc-c++
[root@hmx bin]# yum -y install gcc
[root@hmx bin]# yum -y install gcc-c++
注意:如果没有安装gcc-c++,那么在 执行./configure -prefix=/usr/local/pcre 时会报 configure: error: You need a C++ compiler for C++ support. 错误
(6)将下载的压缩文件拷贝到/usr/local目录下
[root@hmx tmp]# cp apr-1.5.2.tar.gz /usr/local
[root@hmx tmp]# cp apr-util-1.5.4.tar.gz /usr/local
[root@hmx tmp]# cp httpd-2.4.43.tar.gz /usr/local
[root@hmx tmp]# cp pcre-8.44.tar.gz /usr/local[root@hmx ~]# cd /usr/local/
(7)编译安装apr-1.5.2
#解压缩apr文件
[root@hmx apr-1.5.2]# tar -zxvf apr-1.5.2.tar.gz
#改变目录到apr-1.5.2
[root@hmx apr-1.5.2]# cd apr-1.5.2/
#指定apr的安装目录为/usr/local/apr 配置
[root@hmx apr-1.5.2]# ./configure -prefix=/usr/local/apr
#编译安装
[root@hmx apr-1.5.2]# make && make install
(8)编译安装 apr-uril-1.5.4
cd /usr/local
#解压缩apr-util文件
[root@hmx local]# tar -zxvf apr-util-1.5.4.tar.gz
#改变目录到apr-util-1.5.4/
[root@hmx local]# cd apr-util-1.5.4/
#指定apr-util的安装路径,指定apr-util所对应的apr
[root@hmx apr-util-1.5.4]# ./configure -prefix=/usr/local/apr-util -with-apr=/usr/local/apr
#编译安装
[root@hmx apr-util-1.5.4]# make && make install
9)编译安装pcre
卸载系统自带的pcre
[root@hmx local]# rpm -qa pcre
pcre-8.32-17.el7.x86_64
卸载已安装软件:
yum remove pcre-8.32-17.el7.x86_64
cd /usr/local
解压缩apr-util文件
[root@hmx local]# tar -zxvf pcre-8.44.tar.gz
改变目录到pcre-8.44/
[root@hmx local]# cd pcre-8.44/
指定prce的安装路径,指定apr-util所对应的apr
[root@hmx pcre-8.44]# ./configure -prefix=/usr/local/pcre
编译安装(make是编译 make install是安装)
[root@hmx pcre-8.44]# make && make install
(10)编译安装apache
编译和安装apache分为动态、静态两种方式。动态编译是指在以后的使用中随时调整配置文件就可以加载模块;静态则相反,在编译时就决定了相应的模块。
cd /usr/local
#解压缩httpd-2.4.43文件:
[root@hmx local]# tar -zxvf httpd-2.4.43.tar.gz
#改变目录到httpd-2.4.43/ :
[root@hmx local]# cd httpd-2.4.43/
#配置
[root@hmx httpd-2.4.43]# ./configure -prefix=/usr/local/apache2 -sysconfdir=/etc/httpd -enable-so -enable-rewrite -with-apr=/usr/local/apr -with-apr-util=/usr/local/apr-util -with-pcre=/usr/local/pcre
#编译安装:
[root@hmx httpd-2.4.43]#make && make install
注意:如果安装时提示如下错误,可按照下面方法解决
checking for pcre-config… false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
解决办法:
[root@hmx httpd-2.4.43]# yum -y install pcre-devel
(11)编辑配置文件、启动、停止apache服务
#编辑httpd.conf文件
[root@hmxhttpd-2.4.43]#vim /etc/httpd/httpd.conf在#ServerName www.example.com:80 下增加下面的语句ServerName localhost:80
#使用脚本控制Apache,启动服务
[root@hmx ~]# /usr/local/apache2/bin/apachectl start
#使用脚本控制Apache,停止服务
[root@hmx ~]# /usr/local/apache2/bin/apachectl stop
服务启动后,在本地物理机的IE浏览器,输入http://虚拟机IP地址,浏览器内容显示出it works,成功。页面内容存在于/usr/local/apache2/htdocs/index.html文件中
(12)设置apache开机启动
# 将apachectl命令拷贝到/etc/init.d目录下,改名为httpd
# cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd
编辑/etc/init.d/httpd文件,在第1行#!/bin/sh的后面添加如下两行
# vim /etc/init.d/httpd
# chkconfig: 2345 70 30 //注意:前面的#号是要保留的
# description: Apache //注意:前面的#号是要保留的
所增加的三个数字,第1个表示在运行级别2345下启动Apache,第2、3个是关于启动和停止的优先级配置。
Apache服务尚未被添加到chkconfig列表中,需要使用–add参数将其添加进去
[root@hmx init.d]# chkconfig --add httpd
[root@hmx init.d]# chkconfig --list httpd
通过上面的设置,每次开机时apache服务都是自动启动的
[root@hmx httpd-2.4.43]# chkconfig --del httpd #关闭开机自启动
Apache和Tomcat整合
(1)下载 mod_jk-1.2.31-httpd-2.2.x.so
cd
cd tmpwget https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/mod_jk-1.2.31-httpd-2.2.x.so
(2)安装mod_jk模块
不建议直接下载现成的模块,下的时候注意版本,很多教程瞎写,给2.4.6的tomcat装一个2.2x版本的mod_jk(坑死我了,生气),理论上相同版本的mod_jk-1.2.31-httpd-2.2.x.so也能用,看好那个x前面的是.几,我是没找到,就直接编译了
编译mod_jk.so前,本机需要先安装apxs,因为它依赖于apxs,我使用命令是yum install httpd-devel,等/usr/sbin下有apxs就算安装好了。
安装gcc
yum install gcc -y
安装 autoconf
yum install autoconf -y
安装 libtool
yum install libtool -y
然后,将tomcat-connectors-1.2.42-src.tar.gz下载到/root目录并解压:
(直接官网下啊,就在历史版本里面,你要是嫌弃下的慢,就自己电脑下载好再上传,我就这样,别去找奇奇怪怪的,安装包有的都不全,解压不了)
wget https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz
tar -xvzf tomcat-connectors-1.2.42-src.tar.gz
安装需要用到apxs,安装httpd-devel里面包含apxs
yum install httpd-devel
并进入到/root/tomcat-connectors-1.2.42-src/native目录执行。
cd /root/tomcat-connectors-1.2.42-src/native
然后执行下面语句设置apxs位置
./configure --with-apxs=/usr/bin/apxs
编译:
make
make install
mod_jk:[root@hmx bin]# find / -name mod_jk.so
find: ‘/proc/83210’: 没有那个文件或目录
find: ‘/proc/83220’: 没有那个文件或目录
/usr/lib64/httpd/modules/mod_jk.so # make install后出现
/usr/local/tmp/tomcat-connectors-1.2.42-src/native/apache-2.0/.libs/mod_jk.so # make后出现
/usr/local/tmp/tomcat-connectors-1.2.42-src/native/apache-2.0/mod_jk.so # make后出现
/usr/local/apache2/modules/mod_jk.so #正常没有,看我下一步操作
给这玩意复制过去
cp /usr/lib64/httpd/modules/mod_jk.so /usr/local/apache2/modules/
编辑apache配置文件: [root@hmx modules]# vim /etc/httpd/httpd.conf
增加下面内容: Include /etc/httpd/conf/mod_jk.conf
(3)在/etc/httpd/conf目录下新建 mod_jk.conf和workers.properties文件,内容如下图。
mod_jk.conf的内容是jk的配置文件,包括装载模块和日志信息以及指定解析的工作器和目录。
[root@hmx conf]# mkdir /etc/httpd/conf/
[root@hmx conf]# vim mod_jk.conf
mod_jk.conf这个内容很重要,网上写的很多复制之后用不了,我最后从官网弄过来一份https://tomcat.apache.org/connectors-doc/common_howto/quick.html可以自己看看
# Load mod_jk module
# Update this path to match your modules location
LoadModule jk_module modules/mod_jk.so
# Declare the module for <IfModule directive> (remove this line for Apache 2.x)
#AddModule mod_jk.c
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to httpd.conf)
JkWorkersFile /etc/httpd/conf/workers.properties
# Where to put jk shared memory
# Update this path to match your local state directory or logs directory
JkShmFile /var/log/httpd/mod_jk.shm
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the timestamp log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# Send everything for context /examples to worker named worker1 (ajp13)
JkMount /examples/* worker1
workers.properties这个也很重要
# Define 1 real worker using ajp13
worker.list=worker1
# Set properties for worker1 (ajp13)
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
还有这个也要改
vim /usr/local/tomcat/conf/server.xml
<Connector protocol="AJP/1.3"address="::1"port="8009"redirectPort="8443"maxParameterCount="1000"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
注释了的给注释删了,最后记得查一遍防火墙8080和80端口开了没,不行先给防火墙整个关了,起码能证明配置正确,最后再看开那个端口,一般就是开个8009,我没开也能用。
测试
[root@hmx conf]# mkdir /usr/local/apache2/htdocs/apps/
vim showtime.jsp
写入以下内容:
<%@page language="java" import="java.util.*" %><h2>Now, the time&date is: <%out.println(new Date());%></h2>
正常应该显示时间,然后我失败了,mod_jk查了好久都整合不出来,有大佬会高我一声哈,tomcat和Apache单独使用时,tomcat的前端文件放在
/usr/local/tomcat/webapps/ROOT中,Apache放在/usr/local/apache2/htdocs/中。动静结合正常是应该放在 cd /usr/local/apache2/htdocs/中的.jsp页面显示时间,然后就我没成功,希望各位成功,有成功的告我一声。Apache和Tomcat是正常的。