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 64bitjdk版本:1.7.0_80tomcat版本:8.0.29apache版本:2.4.9apache伺服器IP:192.168.21.10/24tomcat執行個體一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反向 Proxy,注釋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 configtestSyntax OK[root@orasrv1 ~]# service httpd24 restartStopping 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-AliveContent-Length:366Content-Type:text/html;charset=ISO-8859-1Date:Sat, 19 Dec 2015 11:43:50 GMTKeep-Alive:timeout=5, max=96Server:Apache/2.4.9 (Unix) mod_jk/1.2.41 //mod_jk方式