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

相关推荐
IT 古月方源21 分钟前
ospf 的 状态机详解
运维·网络·tcp/ip·智能路由器
九河云29 分钟前
Amazon Bedrock Claude 3 在客户服务自动化中的应用方法
运维·人工智能·自动化·aws
hc_bmxxf31 分钟前
Linux应用软件编程-多任务处理(进程)
linux·运维·服务器
M-C-B1 小时前
配置带外与更改密码
运维·服务器
沐多1 小时前
波折重重:一个Linux实时系统Xenomai宕机问题的深度定位过程
linux·xenomai·实时linux·xenomai4
猿经验1 小时前
tar.gz压缩文件在linux上解压异常问题:gzip:stdin:invalid compressed data
linux·运维·服务器
木卫二号Coding1 小时前
宝塔-firefox(Docker应用)-构建自己的Web浏览器
linux·docker·开源
dawn1 小时前
通过GRE协议组建VPN网络
运维·网络·vpn·gre
SP八岐大兔2 小时前
Linux(Ubuntu/CentOS)配置开机自启动服务
linux·ubuntu·centos
玄德公笔记2 小时前
docker-compose搭建sfpt服务器
服务器·docker·容器·sftp·docker-compose