Apache 与 Tomcat 整合,并添加虚拟主机
目标
准备
- 127.0.0.1 one.test.com two.test.com
tomcat配置
- <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" />
- 在tomcat/con/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配置
- Listen 8082
- LoadModule jk_module modules/mod_jk.so
- JkWorkersFile conf/workers.properties
- JkLogFile logs/mod_jk.log
- 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
- 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!