Linux运维-Web服务器的配置与管理(Apache+tomcat)(没成功,最后有失败经验)

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服务的功能、两者都是免费的。

  • 不同点:

  1. Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器。
  2. Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页如(ASP,PHP,CGI,JSP)等动态网页的就不行。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。
  3. Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想;
  4. Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
  5. 实际使用中Apache与Tomcat常常是整合使用:
  6. 如果客户端请求的是静态页面,则只需要Apache服务器响应请求。
  7. 如果客户端请求动态页面,则是Tomcat服务器响应请求。
  8. 因为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拷贝命令也能实现;

  1. 安装后的配置

(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 #查询系统内的相关jdk

java-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 tmp
 wget 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是正常的。

相关推荐
大树888 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠8 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质8 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush48 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5208 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz8 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工9 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智9 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩10 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_10 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化