美文网首页我爱编程技术干货
CentOS 配置JDK以及Tomcat和Apache的整合

CentOS 配置JDK以及Tomcat和Apache的整合

作者: 王苍天 | 来源:发表于2017-08-31 00:35 被阅读0次

    最近在 Linux 下成功整合了 Tomcat 和 Apache ,其中难免踩了各种坑,在这里记录下过程以便大家学习。
    首先,为什么要整合 Tomcat 和 Apache 呢?网上有一大把博客详解,我就简洁概括:

    Tomcat 是应用(Java)服务器,支持 JSP 和静态页面请求,Apache 是 Web 服务器,只支持静态页面请求,然而 Apache 响应静态页面性能比 Tomcat 强,因此由 Apache 负责响应静态页面以及转发动态页面请求给 Tomcat,Tomcat 只负责响应 JSP 等动态页面请求,这样整合减少了 Tomcat 的开销,实现负载均衡。

    整个过程主要分为以下四个步骤,后面还会讲各种坑及解决办法(PS:我的服务器是阿里云 CentOS 6.08 x64)

    • 配置 JDK 环境
    • 安装 Tomcat
    • 安装 Apache
    • 整合 Tomcat 和 Apache

    1. 配合 JDK 环境

    配置 Java 环境首先需要卸载 Linux 发行版自带的 OpenJDK,改装 SunJDK

    • 检查系统是否安装了 OpenJDK,输入 java -version ,如下提示表示安装了

      [root@iZwz9f32qxgaqekk0b2ovwZ ~]# java -version
      java version "1.6.0"
      OpenJDK Runtime Environment (build 1.6.0-b09)
      OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
      
    • 查找名字包含 java 的程序命令 rpm -qa | grep java

      [root@iZwz9f32qxgaqekk0b2ovwZ ~]# rpm -qa | grep java
      java-1.8.0-openjdk-headless-1.8.0.131-0.b11.el6_9.x86_64
      tzdata-java-2017b-1.el6.noarch
      java-1.8.0-openjdk-1.8.0.131-0.b11.el6_9.x86_64
      
    • rpm -e --nodeps *** 卸载程序,将上面的两个 OpenJDK 卸载

      [root@iZwz9f32qxgaqekk0b2ovwZ ~]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.131-0.b11.el6_9.x86_64
      [root@iZwz9f32qxgaqekk0b2ovwZ ~]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.131-0.b11.el6_9.x86_64
      

      记住:nodeps前面是两条横

    • 卸载完成后再输入 java ,已无信息表示卸载成功

      [root@iZwz9f32qxgaqekk0b2ovwZ ~]# java
      -bash: /usr/bin/java: No such file or directory
      
    • 开始来安装 SunJDK,下载最新版的 SunJDK,有两种安装方式:

      • 一个是 .rpm 后缀,用 rpm -ivh ***.rpm 命令安装,安装后不需要手动配置 Java 环境变量,会自动配置
      • 另一种是 .tar.gz 后缀,用 tar -zxvf ***.tar.gz 命令安装,需要手动配置环境变量
    • 这里选择第二种方式安装,下载后的安装包放在了 /usr/local/src,我这里的安装包名是:jdk-8u144-linux-x64.tar.gz,首先解压到目录 /usr/local

      [root@iZwz9f32qxgaqekk0b2ovwZ src]# tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local
      

      解压完成后可以看到 /usr/local/jdk1.8.0_144 文件夹

    • 配置 Java 环境变量

      • vi 编辑文件 /etc/profile

        [root@iZwz9f32qxgaqekk0b2ovwZ /]# vi /etc/profile
        
      • 点击键盘 i 进入编辑模式,在文件尾部添加如下代码,按 Esc 键后输入 :wq 保存退出

        export JAVA_HOME=/usr/local/jdk1.8.0_144
        export JRE_HOME=/usr/local/jdk1.8.0_144/jre
        export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
        export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
        

      截图如下

    image.png
    • 保存文件后重新加载 /etc/profile 文件,让配置在当前会话生效

      [root@iZwz9f32qxgaqekk0b2ovwZ /]# source /etc/profile
      
    • 再次测试安装是否成功

      [root@iZwz9f32qxgaqekk0b2ovwZ /]# java -version
      java version "1.8.0_144"
      Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
      Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
      

    2. 安装 Tomcat

    • 下载 http://tomcat.apache.org/download-80.cgi

      image.png
      下载 .tar.gz 后缀的安装包老规矩放在 /usr/local/src 目录下,这里安装包 apache-tomcat-8.5.15.tar.gz,解压安装包到 /usr/local 目录下
      [root@iZwz9f32qxgaqekk0b2ovwZ src]# tar -zxvf apache-tomcat-8.5.15.tar.gz -C /usr/local
      
    • 得到 Tomcat 目录 /usr/local/apache-tomcat-8.5.15,重命名为 tomcat8.5.15 (个人习惯)

      [root@iZwz9f32qxgaqekk0b2ovwZ src]# mv /usr/local/apache-tomcat-8.5.15 /usr/local/tomcat8.5.15
      
    • 添加 Tomcat 环境变量,和配置 Java 环境一样用 vi 编辑文件 /etc/profile,在末尾添加如下代码

      export CATALINA_HOME=/usr/local/tomcat8.5.15
      
    • 修改 Tomcat 端口为 8080,用 vi 编辑 /usr/local/tomcat8.5.15/conf/server.xml,修改 Connector 节点下的 port 属性为 8080 :

      Paste_Image.png
    • 启动 Tomcat

      [root@iZwz9f32qxgaqekk0b2ovwZ /]# cd /usr/local/tomcat8.5.15/bin
      [root@iZwz9f32qxgaqekk0b2ovwZ bin]# ./startup.sh
      Using CATALINA_BASE:   /usr/local/tomcat8.5.15
      Using CATALINA_HOME:   /usr/local/tomcat8.5.15
      Using CATALINA_TMPDIR: /usr/local/tomcat8.5.15/temp
      Using JRE_HOME:        /usr/local/jdk1.8.0_144/jre
      Using CLASSPATH:       /usr/local/tomcat8.5.15/bin/bootstrap.jar:/usr/local/tomc  at8.5.15/bin/tomcat-juli.jar
      Tomcat started.
      
    • curl Http工具本地测试 Tomcat 是否能访问

      [root@iZwz9f32qxgaqekk0b2ovwZ bin]# curl localhost:8080
      
    • 最后再用外网测试能否访问 ip:8080 ,如果不能访问,请检查阿里云 ECS 实例的安全组(实例 > 本实例安全组 > 配置规则)是否允许 8080 端口访问,没有的话请点击 “添加安全组规则” ,填写如下图配置

    Paste_Image.png

    3. 安装 Apache

    • Apache 运行需要 apr apr-util,下载地址 http://archive.apache.org/dist/apr/,我这里下载了 apr-1.6.2.tar.gzapr-util-1.6.0.tar.gz

      • 分别将 aprapr-util 两个安装包放在 /usr/local/src 目录下

      • 解压到 /usr/local 目录下,后面编译 Apache 会用到

        [root@iZwz9f32qxgaqekk0b2ovwZ src]# tar -zxvf apr-1.6.2.tar.gz -C /usr/local
        [root@iZwz9f32qxgaqekk0b2ovwZ src]# tar -zxvf apr-util-1.6.0.tar.gz -C /usr/local
        
    • 下载 Apache 资源包,地址 > http://httpd.apache.org/download.cgi,我这里下载最新版的,名为 Apache HTTP Server 2.4.27

    • 还是老规矩,安装包放到 /usr/local/src 目录下,解压到 /usr/local 目录下

      [root@iZwz9f32qxgaqekk0b2ovwZ ~]# cd /usr/local/src
      [root@iZwz9f32qxgaqekk0b2ovwZ src]# tar -zxvf httpd-2.4.27.tar.gz -C /usr/local
      
    • 解压后进入文件夹 httpd-2.4.27,然后编译、安装Apache

      [root@iZwz9f32qxgaqekk0b2ovwZ src]# cd ../httpd-2.4.27
      [root@iZwz9f32qxgaqekk0b2ovwZ httpd-2.4.27]# ./configure --prefix=/usr/local/apache2 --enable-rewrite --enable-ssl --enable-module=so --sysconfdir=/etc/httpd --libdir=/usr/lib64 --with-included-apr
      [root@iZwz9f32qxgaqekk0b2ovwZ httpd-2.4.27]# make
      [root@iZwz9f32qxgaqekk0b2ovwZ httpd-2.4.27]# make install
      
      • --prefix:指定安装目录
      • --enable-rewrite:支持重写 URL
      • --enable-ssl:启用 ssl 功能,如果不启用将无法使用 https
      • --enable-module=so:支持动态共享模块
      • --sysconfdir=/etc/httpd:指定 Apache 配置目录,如果没有指定该参数,配置会在 Apache 主目录下的 conf 文件夹里,这个参数会影响后面 Tomcat 与 Apache 的整合
      • --with-included-apr:指定 apr 库文件,编译时会自动在 srclib 目录下找,下面会讲到
    • 问题来了,编译安装过程可能出现的错误如下:

      • 提示错误 error: ‘apr_xml_parser’ has no member named ‘xp’ 没有xml解析器,解决: yum install expat-devel

      • 提示错误:openssl version is too old
        更新 openssl 版本:

        yum install openssl-devel
        yum update openssl
        
      • 安装时提示:

        make[2]: *** [htpasswd] Error 1
        make[2]: Leaving directory `/usr/local/httpd-2.4.27/support'
        make[1]: *** [install-recursive] Error 1
        make[1]: Leaving directory `/usr/local/httpd-2.4.27/support'
        make: *** [install-recursive] Error 1
        

        编译配置中没有添加参数 --with-included-apr,导致找不到相应的库文件,在 configure 后面添加就行,不过网上还有其他解决办法:(我试了没用)

        # mv /usr/lib/libm.a /usr/lib/libm.a.bak
        # mv /usr/lib/libm.so /usr/lib/libm.so.bak
        # mv /usr/lib/libexpat.so /usr/lib/libexpat.so.bak
        # ln -s /usr/lib64/libm.a /usr/lib/libm.a
        # ln -s /usr/lib64/libm.so /usr/lib/libm.so
        # ln -s /usr/lib64/libexpat.so /usr/lib/libexpat.so
        
      • 编译时添加了参数 --with-included-apr 后编译错误提示
        configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.
        这是由于 Apache 编译需要 apr apr-util,而编译器找不到源代码文件,我们只需要把上面下载解压后的两个文件夹复制到 /usr/local/httpd-2.4.27/srclib 目录下,再编译就没问题了

        [root@iZwz9f32qxgaqekk0b2ovwZ local]# cp -r apr-1.6.2 /usr/local/httpd-2.4.27/srclib/apr
        [root@iZwz9f32qxgaqekk0b2ovwZ local]# cp -r apr-util-1.6.0 /usr/local/httpd-2.4.27/srclib/apr-util
        
    • 一切终于顺利了!可以开始启动 Apache

      [root@iZwz9f32qxgaqekk0b2ovwZ ~]# cd /usr/local/apache2/bin
      // 启动
      [root@iZwz9f32qxgaqekk0b2ovwZ bin]# ./apachectl start
      // 关闭
      [root@iZwz9f32qxgaqekk0b2ovwZ bin]# ./apachectl stop
      // 重启
      [root@iZwz9f32qxgaqekk0b2ovwZ bin]# ./apachectl restart
      
    • 天呀,错误又来了,启动时候提示了以下异常:
      httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
      只要修改 httpd.conf 文件中的 ServerName 属性,去掉前面的注释 #号,并后面改为 127.0.0.1:80,再次启动终于没错误了

    • 最后,确保阿里云 ECS 安全组允许访问 80 端口,外网浏览器访问 ip,出现如下表示成功:

    Paste_Image.png

    4. 整合 Tomcat 和 Apache

    • 整合需要 tomcat-connectors 进行桥连接,下载 mod_jk
    image.png
    • 老规矩把安装包放在 /usr/local/src 目录下,解压文件 tomcat-connectors-1.2.42-src.tar.gz 到 /usr/local 目录下,后进入 native 目录下配置(configure)、编译(make)、安装(make install)

      [root@iZwz9f32qxgaqekk0b2ovwZ src]# tar -zxvf tomcat-connectors-1.2.42-src.tar.gz -C /usr/local/
      [root@iZwz9f32qxgaqekk0b2ovwZ src]# cd ..
      [root@iZwz9f32qxgaqekk0b2ovwZ local]# cd tomcat-connectors-1.2.42-src/native/
      [root@iZwz9f32qxgaqekk0b2ovwZ native]# ./configure --with-apxs=/usr/local/apache2/bin/apxs
      [root@iZwz9f32qxgaqekk0b2ovwZ native]# make
      [root@iZwz9f32qxgaqekk0b2ovwZ native]# make install
      
    • 编译安装后在 native/apache-2.0 目录下会生成了 mod_jk.so 文件,把它复制到 Apache 目录下的 modules 目录里

      [root@iZwz9f32qxgaqekk0b2ovwZ native]# cp apache-2.0/mod_jk.so /usr/local/apache2/modules/
      
    • 创建相关配置文件,由于安装 Apache 配置时指定了其配置文件的目录在 /etc/httpd,进入 /etc/httpd,创建两个文件:mod_jk.confworkers.properties,分别写入如下内容:
      mod_jk.conf

      #LoadModule jk_module modules/mod_jk.so  
      
      JkWorkersFile /etc/httpd/workers.properties  
      # Where to put jk logs  
      JkLogFile /etc/httpd/logs/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 +ForwardURICompat -ForwardDirectories  
      # JkRequestLogFormat set the request format   
      JkRequestLogFormat "%w %V %T"  
      
      JkMount /*/servlet/*  worker1  
      JkMount /*.jsp worker1  
      JkMount /application/* worker1  
      JkMount /*.do worker1  
      JkMount /*.class worker1  
      JkMount /*.jar worker1
      

      workers.properties

      # Defining a worker named worker1 and of type ajp13  
      worker.list=worker1  
      
      # Set properties for worker1
      worker.worker1.type=ajp13
      worker.worker1.host=localhost
      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
      
    • 完成前面准备工作后,接着加载 mod_jk 模块和导入 mod_jk 配置只需对 /etc/httpd/httpd.conf 文件添加如下内容:

      LoadModule jk_module modules/mod_jk.so
      Include /etc/httpd/mod_jk.conf
      
    • 接下来重启 Apache,使用命令 # ./apachectl restart,如果重启失败,可以打开错误日志文件
      /usr/local/apache2/logs/error_log,如果看到如下信息:
      [Thu Aug 31 10:29:48.568384 2017] [jk:error] [pid 25649:tid 140007198447360] (2)No such file or directory: mod_jk: could not open JkLog file /etc/httpd/logs/mod_jk.log
      AH00016: Configuration Failed
      是因为我们没有创建 /etc/httpd/logs/mod_jk.log 文件,只要用 touch 命令手动创建该文件就行了。

    • 测试整合是否成功。
      /usr/local/tomcat8.5.15/webapps/ROOT 创建 test.jsp 文件,写入 tomcat test jsp 内容,用外网浏览器访问 ip/test.jsp,出现以下内容表示成功!

    image.png

    相关文章

      网友评论

        本文标题:CentOS 配置JDK以及Tomcat和Apache的整合

        本文链接:https://www.haomeiwen.com/subject/eqvzdxtx.html