目標
1、同一台機器上,不同的域名指向,訪問不同的項目,即:
(1)one.test.com 訪問 project_one
(2) two.test.com 訪問 project_two
2、將Tomcat布署為Apache的后端服務,若為動態程序由Tomcat執行,靜態文件由Apache執行
准備
1、安裝apache、tomcat、JDK。這三個安裝都比較簡單,網上的資料也很多,忽略之。幾個重要的路徑這里說明一下:
Apache的根目錄為: E:/Apache_Server
Web項目路徑為: E:/Apache_Server/www(即Apache的DocmentRoot路徑)
tomcat的根目錄為: E:\Apache_tomcat
2、下載tomcat-connectors,解壓有一個mod_jk.so,用於擴展Apache,讓Apache可以識別出jsp等動態語言,並將其轉發到Tomcat
3、為方便測試,添加兩個域名
在C:\Windows\System32\drivers\etc\host文件中末尾,追加一行:
127.0.0.1 one.test.com two.test.com
tomcat配置
(1)設置http訪問端口,這里設為 8081(任選一個不被占用的端口,只與Apache訪問端口分開就行)
<Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443" compressableMimeType="text/html,application/xml,application/json,application/javascript,text/css,text/plain" />
(2)設置AJP端口,這里設為8009。此端口在后續需配置到Apache中, Apache通過該端口將任務轉發到Tomcat
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" compressableMimeType="text/html,application/xml,application/json,application/javascript,text/css,text/plain" />
(3)配置項目路由及域名
在tomcat/conf/server.xml中,在Engine節點下增加兩個Host節點。Host節點中配置項目的訪問域名name、項目路徑docBase等信息,如下:
<Host appBase="webapps" autoDeploy="true" name="one.test.com" unpackWARs="true"> <Context path="" docBase="E:/Apache_Server/www/project_one" debug="0" reloadable="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/> </Host> <Host appBase="webapps" autoDeploy="true" name="two.test.com" unpackWARs="true"> <Context path="" docBase="E:/Apache_Server/www/project_two" debug="0" reloadable="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/> </Host>
Apache配置
1、設置服務訪問端口,因我的機器80端口正在使用,所以這里設為:8082
Listen 8082
2、添加mk模塊:
(1)解壓tomcat-connectors,將其內的mod.jk.so拷貝到apache/modules文件夾之下
(2)在apache/conf/http.conf中添加:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
3、apache/conf目錄下,增加workers.properties文件,內容如下所示,指定協議為ajp,對應端口為8009(與Tomcat中的配置一致)
workers.tomcat_home=E:\Apache_tomcat
workers.java_home=D:\Java1.8\jdk
ps=/
worker.list=worker_one,worker_two
worker.worker_one.port=8009
worker.worker_one.host=localhost
worker.worker_one.type=ajp13
worker.worker_two.port=8009
worker.worker_two.host=localhost
worker.worker_two.type=ajp13
4、添加虛擬主機
http.conf中,將這三個與虛擬主機相關的配置前的“#”去掉,即使之生效。
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Include conf/extra/httpd-vhosts.conf
在 conf/extra/httpd-vhosts.conf 文件中,添加虛擬主機的配置信息。用JkMount指定哪些內容將轉發給Tomcat處理。
<VirtualHost *:8082> DocumentRoot "E:\Apache_Server\www\project_one" ServerName one.test.com ServerAlias one.test.com JkMount /servlet/* worker_one JkMount /*.jsp worker_one JkMount /*.htm worker_one JkMount /*.html worker_one JkMount /*.do worker_one JkMount /* worker_one <Directory "E:\Apache_Server\www\project_one"> Options -Indexes +FollowSymLinks +Includes AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *:8082> DocumentRoot "E:\Apache_Server\www\project_two" ServerName two.test.com ServerAlias two.test.com JkMount /servlet/* worker_two JkMount /*.jsp worker_two JkMount /*.htm worker_two JkMount /*.html worker_two JkMount /*.do worker_two JkMount /* worker_two <Directory "E:\Apache_Server\www\project_two"> Options -Indexes +FollowSymLinks +Includes AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
配置到此就完成了。
最后,重啟Tomcat、重啟Apache即可
測試
1、測試jsp網頁
在apache的DocmentRoot路徑下,增加web.jsp文件,內容如下:
<%@page language="java" import="java.util.*" %> Stay hungry Stay foolish !!! Now the time is: <%out.println(new Date());%>
瀏覽器分別訪問Apache和Tomcat:local:8081/wel.jsp、local:8082/wel.jsp,都能看到相同的運行結果,表示整合完成。
2、接口測試
在project_one項目中,增加一個接口,隨便返回點東西,如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json; charset=utf-8"); PrintWriter out = null; try{ out = response.getWriter(); out.write("nothing!"); out.flush(); }catch(IOException e){ e.printStackTrace(); } }
相應的web.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>testInferface</servlet-name> <servlet-class>com.api.testInferface</servlet-class> </servlet> <servlet-mapping> <servlet-name>testInferface</servlet-name> <url-pattern>/testInferface</url-pattern> </web-app>
布署上去之后,下面兩個鏈接能對它進行訪問,因為one.test.com指向了該項目。
http://one.test.com:8081/testinferface
http://one.test.com:8082/testinferface
而下面這兩個則訪問不了
http://two.test.com:8081/testinferface
http://two.test.com:8082/testinferface
Over!