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拷贝命令也能实现;
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是正常的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/706334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode:134.加油站

解题思路&#xff1a;需要注意开始时的编号&#xff0c;有的可以走一圈&#xff0c;有的走不了 模拟过程&#xff1a;for循环主要是用来模拟线性的过程&#xff0c;而在这里它是环状的&#xff1b; 可以用暴力解法&#xff0c;但是在这里我用贪心来解决。 常见疑惑&#xff1…

云呐智能化运维发展趋势是什么样?5g智能化矿山运维是什么

智能运维是近年来信息技术和自动化技术发展的一个新兴领域。未来&#xff0c;智能运维的技术演变方式可能包括以下几个方面: 数据驱动决策: 随着大数据技术的发展&#xff0c;智能运维将更加重视数据驱动的决策。通过对海量数据的实时分析和挖掘&#xff0c;我们可以发…

在Web UI上提交Flink作业

1&#xff09;任务打包完成后&#xff0c;我们打开Flink的WEB UI页面&#xff0c;在右侧导航栏点击“Submit New Job”&#xff0c;然后点击按钮“ Add New”&#xff0c;选择要上传运行的JAR包 JAR包上传完成&#xff0c;如下图所示 &#xff08;2&#xff09;点击该JAR包&…

人工智能之Tensorflow程序结构

TensorFlow作为分布式机器学习平台&#xff0c;主要架构如下&#xff1a; 网络层&#xff1a;远程过程调用(gRPC)和远程直接数据存取(RDMA)作为网络层&#xff0c;主要负责传递神经网络算法参数。 设备层&#xff1a;CPU、GPU等设备&#xff0c;主要负责神经网络算法中具体的运…

在SAP HANA中使用OData(二)

通常有两种方式通过OData来暴露SAP HANA中的数据库对象&#xff0c;一是直接使用Database Object&#xff0c;比如前一篇和本篇文章介绍的例子&#xff0c;这种方式针对于数据已经存在于SAP HANA中&#xff0c;在Repository中没有对应的设计时对象(Design-time Object)&#xf…

IT廉连看——Uniapp——页面样式与布局

IT廉连看——Uniapp——页面样式与布局 目标&#xff1a; 了解样式与布局的规范 熟记px和rpx的区别 全局样式与index样式的区别 一、查看uniapp框架简介——尺寸单位 px尺寸单位的使用是贯穿始终的。 [IT廉连看] 二、尺寸单位——实操效果 1、打开Hbuilder X并进入in…

幻兽帕鲁服务器哪家便宜?阿里云腾讯云京东云华为云对比

幻兽帕鲁服务器哪家便宜&#xff1f;阿里云腾讯云京东云华为云对比&#xff0c;阿里云更便宜&#xff0c;26元1个月。游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;华为云26元&#x…

【docker】CentOS 7上安装Docker的详细过程

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;软件的安装 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 1、更新系统&#xff1a; 2、添加Docker存储库&#xff1a; 3、安装Docker CE&#xff08;社区版&#xff09;&#xff1a…

Databend 开源周报第 133 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解对开放表格…

鉴源论坛 · 观辙丨TLS协议基本原理与Wireshark分析

作者 | 苏少博 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 背 景 随着车联网的迅猛发展&#xff0c;汽车已经不再是传统的机械交通工具&#xff0c;而是智能化、互联化的移动终端。然…

【多智能体】MetaGPT配置教程(应用智谱AI的GLM-4)

MetaGPT配置教程&#xff08;使用智谱AI的GLM-4&#xff09; 文章目录 MetaGPT配置教程&#xff08;使用智谱AI的GLM-4&#xff09;零、为什么要学MetaGPT一、配置环境二、克隆代码仓库三、设置智谱AI配置四、 示例demo&#xff08;狼羊对决&#xff09;五、参考链接 零、为什么…

爆火的1分钟声音克隆GPT-SoVITS项目 linux系统 ubuntu22.04安装2天踩坑教程

原项目地址&#xff1a;https://github.com/RVC-Boss/GPT-SoVITS 1分钟素材&#xff0c;最后出来的效果确实不错。 1. cuda环境安装 cuda环境准备 根据项目要求在cuda11.8和12.3都测试了通过。我这里是用cuda11.8 cuda11.8安装教程&#xff1a; ubuntu 22.04 cuda多版本和…

牛客前端八股文(每日更新)

1.说说HTML语义化&#xff1f; 得分点&#xff1a;语义化标签、利于页面内容结构化、利于无CSS页面可读、利于SEO、利于代码可读 1&#xff0c;标签语义化是指在开发时尽可能使用有语义的标签&#xff0c;比如header&#xff0c;footer&#xff0c;h&#xff0c;p&#xff0c…

「优选算法刷题」:矩阵区域和

一、题目 给你一个 m x n 的矩阵 mat 和一个整数 k &#xff0c;请你返回一个矩阵 answer &#xff0c;其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和&#xff1a; i - k < r < i k, j - k < c < j k 且(r, c) 在矩阵内。 示例 1&#xff1…

Java 1.8 docker 镜像制作

文章目录 一、下载文件二、精简JRE三、Dockerfile四、构建镜像五、容器测试 一、下载文件 glibc 下载地址 glibc-2.35-r1.apk glibc-bin-2.35-r1.apk glibc-i18n-2.35-r1.apk rsa sgerrand.rsa.pub jre 1.8 jre-8u201-linux-x64.tar.gz 二、精简JRE 解压 tar -zxvf jre-8…

动态住宅IP vs 静态住宅IP,如何选择适合你的海外住宅IP?

随着数字时代的发展&#xff0c;网络已经成为了我们日常生活中不可或缺的一部分。在海外留学、旅游、工作或者进行电子商务等活动时&#xff0c;一个合适的住宅IP可以帮助我们保护个人隐私、确保网络连接的稳定性、提高在线服务的可靠性等。因此&#xff0c;选择适合自己的住宅…

读《Shape-Guided: Shape-Guided Dual-Memory Learning for 3D Anomaly Detection》

Chu Y M, Chieh L, Hsieh T I, et al. Shape-Guided Dual-Memory Learning for 3D Anomaly Detection[J]. 2023.&#xff08;为毛paperwithcode上面曾经的榜一引用却只有1&#xff09; 摘要 专家学习 无监督 第一个专家&#xff1a;局部几何&#xff0c;距离建模 第二个专家&…

CSS3技巧37:JS+CSS3 制作旋转图片墙

开学了就好忙啊&#xff0c;Three.js 学习的进度很慢。。。 备课备课才是王道。 更一篇 JS CSS3 的内容&#xff0c;做一个图片墙。 其核心要点是把图片摆成这个样子&#xff1a; 看上去这个布局很复杂&#xff0c;其实很简单。其思路是&#xff1a; 所有图片放在一个 div.…

【堆】【优先级队列】Leetcode 215. 数组中的第K个最大元素

【堆】【优先级队列】Leetcode 215. 数组中的第K个最大元素 PriorityQueue操作解法 优先级队列构造堆 小顶堆 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- PriorityQueue操作 创建优先级队列【默认创建小顶堆】&#xf…

GIS之深度学习02:Anaconda2019版本安装(py38)

Anaconda是一个专注于数据科学和机器学习的开源发行版&#xff0c;内置了丰富的工具和库&#xff0c;包括Python解释器、NumPy、SciPy、Pandas、Scikit-learn、TensorFlow等&#xff0c;使用户能够轻松进行科学计算和数据分析。其强大的包管理器conda简化了软件包的安装和环境管…