歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux下配置apache與Tomcat連接

Apache http server與tomcat同屬於apache基金會,兩者都可以提供Web服務,只不過兩者的側重點不同。http server側重用作web服務器,而tomcat則側重於作為輕量級的應用服務器。同時,兩者也可以結合 起來使用,即可以將動態請求通過http server轉發至後端的tomcat來完成,http server只處理靜態請求。本文描述了如何配置apache與tomcat連接。

一、Tomcat連接器架構及協議

1、Tomcat連接器架構

基於Apache做為Tomcat前端的架構來講,Apache通過mod_jk、mod_jk2或mod_proxy模塊與後端的Tomcat進行數據交換。而對Tomcat來說,每個Web容器實例都有一個Java語言開發的連接器模塊組件,即org.apache.catalina.Connector這個類。這個類的構造器可以構造兩種類別的連接器:HTTP/1.1負責響應基於HTTP/HTTPS協議的請求,AJP/1.3負責響應基於AJP的請求。但可以簡單地通過在server.xml配置文件中實現連接器的創建,但創建時所使用的類根據系統是支持APR(Apache Portable Runtime)而有所不同。

APR是附加在提供了通用和標准API的操作系統之上一個通訊層的本地庫的集合,它能夠為使用了APR的應用程序在與Apache通信時提供較好伸縮能力時帶去平衡效用。同時,需要說明的是,mod_jk2模塊目前已經不再被支持了,mod_jk模塊目前還apache被支持,但其項目活躍度已經大大降低。因此,目前更常用的方式是使用mod_proxy模塊。
如果支持APR:
1、HTTP/1.1:org.apache.cotote.http11.Http11AprProtocol
2、AJP/1.3:org.apache.coyote.ajp.AjpAprProtocol
如果不支持APR:
HTTP/1.1: org.apache.coyote.http11.Http11Protocol
AJP/1.3: org.apache.jk.server.JkCoyoteHandler

2、連接器協議

Tomcat的Web服務器連接器支持兩種協議:AJP和HTTP,它們均定義了以二進制格式在Web服務器和Tomcat之間進行數據傳輸,並提供相應的控制命令。
AJP(Apache JServ Protocol)協議:
目前正在使用的AJP協議的版本是通過JK和JK2連接器提供支持的AJP13,它基於二進制的格式在Web服務器和Tomcat之間傳輸數據,而此前的版本AJP10和AJP11則使用文本格式傳輸數據。

HTTP協議:誠如其名稱所表示,其是使用HTTP或HTTPS協議在Web服務器和Tomcat之間建立通信,此時,Tomcat就是一個完全功能的HTTP服務器,它需要監聽在某端口上以接收來自於商前服務器的請求。

二、本文環境介紹

os版本:centos6.5 64bit
jdk版本:1.7.0_80
tomcat版本:8.0.29
apache版本:2.4.9
apache服務器IP:192.168.21.10/24
tomcat實例一IP:192.168.21.31/24 (端口默認)

三、安裝apache與toamcat

參考:
Linux下編譯安裝Apache httpd 2.4
Linux下安裝tomcat8

驗證httpd安裝
    # /usr/local/apache/bin/httpd -v
    Server version: Apache/2.4.9 (Unix)
    Server built:   Nov 18 2015 17:38:27

驗證tomcat安裝  
    # catalina.sh version
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Server version: Apache Tomcat/8.0.29
    Server built:   Nov 20 2015 09:18:00 UTC
    Server number:  8.0.29.0
    OS Name:        Linux
    OS Version:     2.6.32-431.el6.x86_64
    Architecture:   amd64
    JVM Version:    1.7.0_80-b15
    JVM Vendor:     Oracle Corporation

四、配置tomcat

添加以下內容
    # vi /usr/local/tomcat/conf/server.xml
     <Engine name="Catalina" defaultHost="www.ycdata.net" jvmRoute="TomcatA"> //注,添加前注釋原來的engine

      <Host name="www.ycdata.net"  appBase="/website"
            unpackWARs="true" autoDeploy="true">
         <Context path="" docBase="webapps" reloadable="true" /> 
      </Host> 

創建應用目錄及測試頁面,此處測試使用非缺省目錄
    # mkdir /website/webapps 
    # vim /website/webapps/index.jsp
        <%@ page language="java" %>
        <html>
          <head><title>TomcatA</title></head>
          <body>
            <h1><font color="red">TomcatA </font></h1>
            <table align="centre" border="1">
              <tr>
                <td>Session ID</td>
            <% session.setAttribute("abc","abc"); %>
                <td><%= session.getId() %></td>
              </tr>
              <tr>
                <td>Created on</td>
                <td><%= session.getCreationTime() %></td>
             </tr>
            </table>
          </body>
        </html>

五、配置apache通過與Tomcat連接

1、基於mod_proxy模塊(http協議)

確保裝載以下模塊
    # /usr/local/apache/bin/httpd -D DUMP_MODULES | grep  proxy
     proxy_module (shared)
     proxy_connect_module (shared)
     proxy_ftp_module (shared)
     proxy_http_module (shared)
     proxy_fcgi_module (shared)
     proxy_scgi_module (shared)
     proxy_ajp_module (shared)
     proxy_balancer_module (shared)
     proxy_express_module (shared)

確保裝載以下模塊
    # /usr/local/apache/bin/httpd -M |grep slot
     slotmem_shm_module (shared)

配置apache反向代理,注釋DocumentRoot,添加Include部分,如下
    # vi /etc/http24/httpd.conf
    #DocumentRoot "/usr/local/apache/htdocs"
    Include /etc/httpd24/extra/httpd-proxy.conf

編輯httpd-proxy.conf文件(此處使用虛擬主機方式),增加以下內容
    # vim /etc/httpd24/extra/httpd-proxy.conf
    <VirtualHost *:80>
      ProxyVia On 
      ProxyRequests Off
      ProxyPass  /  http://192.168.21.31:8080/
      ProxyPassReverse  /  http://192.168.21.31:8080/

      <Proxy *>
        Require all granted
      </Proxy>
    <Location  / >
      Require all granted
    </Location>
    </VirtualHost>

重啟apache    
    # service httpd24 configtest
    # service httpd24 restart

2、基於ajp_proxy模塊(ajp協議)

ajp_proxy 連接方式其實跟 http_proxy 方式一樣,都是由 mod_proxy 所提供的功能。
配置也是一樣,只需要把 http:// 換成 ajp:// ,同時連接的是 Tomcat 的 AJP Connector 所在的端口
    # vim /etc/httpd24/extra/ajp-proxy.conf
    <VirtualHost *:80>
      ProxyVia On 
      ProxyRequests Off
      ProxyPass  /  ajp://192.168.21.31:8009/
      ProxyPassReverse  /  ajp://192.168.21.31:8009/

        <Proxy *>
          Require all granted
        </Proxy>
        <Location  / >
          Require all granted
        </Location>
    </VirtualHost>

3、驗證

# curl http://192.168.21.10

<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA </font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>

        <td>47841C4CFB4755ED89056AE4D48F93AB.TomcatA</td>
      </tr>
      <tr>
        <td>Created on</td>
        <td>1449023138420</td>
     </tr>
    </table>
  </body>
</html>   

4、通過mod_jk模塊與Tomcat連接

安裝tomcat連接器
# cd /usr/local/src
# tar xf tomcat-connectors-1.2.41-src.tar.gz
# cd tomcat-connectors-1.2.41-src/native/
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make && make install
# ls -hltr /usr/local/apache/modules/*jk*
-rwxr-xr-x 1 root root 1.1M Dec  2 13:49 /usr/local/apache/modules/mod_jk.so

修改配置文件
    如果先前定義了proxy代理方式,禁用後再添加如下條目
    # vim /etc/httpd24/httpd.conf        
    Include /etc/httpd24/extra/httpd-jk.conf

    # vim /etc/httpd24/extra/httpd-jk.conf
    LoadModule  jk_module  modules/mod_jk.so
    JkWorkersFile  /etc/httpd24/extra/workers.properties
    JkLogFile  logs/mod_jk.log
    JkLogLevel  debug
    JkMount  /*  TomcatA
    JkMount  /status/  stat1

    # vim /etc/httpd24/extra/workers.properties
    worker.list=TomcatA,stat1
    worker.TomcatA.port=8009
    worker.TomcatA.host=192.168.21.31
    worker.TomcatA.type=ajp13
    worker.TomcatA.lbfactor=1
    worker.stat1.type = status

[root@orasrv1 ~]# service httpd24 configtest
Syntax OK
[root@orasrv1 ~]# service httpd24 restart
Stopping httpd24:                                          [  OK  ]
Starting httpd24:                                          [  OK  ]

# /usr/local/apache/bin/httpd -M |grep jk
 jk_module (shared)

[root@orasrv1 ~]# curl http://192.168.21.10

<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA </font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>   --Author : Leshami  --Blog : http://blog.csdn.net/leshami

        <td>F6C954BBBEE5B7874F4829AFEF762E41.TomcatA</td>
      </tr>
      <tr>
        <td>Created on</td>
        <td>1449038089862</td>
     </tr>
    </table>
  </body>
</html> 

Response Headers 頭部如下: 
Connection:Keep-Alive
Content-Length:366
Content-Type:text/html;charset=ISO-8859-1
Date:Sat, 19 Dec 2015 11:43:50 GMT
Keep-Alive:timeout=5, max=96
Server:Apache/2.4.9 (Unix) mod_jk/1.2.41  //mod_jk方式
Copyright © Linux教程網 All Rights Reserved