版本:请注意如果整合时一定要看,apache和tomcat的官方文档,版本不一样,整合细节也不太一样 Apache: 2.2.21 Tomcat: 6.0.33 mod_jk: 1.2.32 JDK: 1.6
- apache-tomcat-6.0.33.tar.gz
- wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz
- httpd-2.2.21.tar.gz
- wget http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.gz
- tomcat-connectors-1.2.32-src.tar.gz (mod_JK 模块)
- wget http://mirror.bjtu.edu.cn/apache//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.32-src.tar.gz
- JDK(jdk-6u26-linux-i586)
- wget http://oracleotn.rd.llnwd.net/otn-pub/java/jdk/6u26-b03/jdk-6u26-linux-i586-rpm.bin
主要步骤: 1.安装mod_jk模块 2.编辑httpd.conf,使用LoadModule 把模块加载进去 3.编辑httpd.conf,把httpd-vhosts.conf 加载进来,用来配置虚拟主机 4.编辑httpd.conf,加入mod_jk模块的配置文件 5.编辑httpd-vhosts.conf配置文件,配置虚拟主机,并加入那些让tomcat处理,那些让apache来处理的JkMount/JkUnMount,详apache+tomcat整合配置那一节 6.在/usr/local/apache2/conf下创建tomcat的woker文件:worker.properties 7.编辑worker.properties,加入针对tomcat的配置文件(worker.list),详见apache+tomcat整合配置那一节 8.编辑tomcat的server.xml文件,修改标签里的内容,指定appBase的路径 9.创建网站的目录/web3,在/web3下创建ROOT目录,用来放置网站的前台页面,创建admin,放置网站的后台页面 10.连接mysql数据库 11.启动Apache 、tomcat,并测试。 对Apache+tomcat整合的一点理解: 1.网站一般是分为前台和后台,前台页面放到一个目录里面比如:web,后台程序放到一个目录下比如:admin 2.Apache虚拟主机的文档根目录指向tomcat的项目目录(/web3),这个目录下有2个目录:ROOT、admin ROOT下面放着网站的所有前台页面,admin里面放着所有的后台程序 3.apache+tomcat 是怎么工作的? 假设有一个虚拟主机www.apache.com对应的文档根目录就是以上的/web3目录,当我们在浏览器中输入www.apache.com时,通过DNS服务器或者hosts文件解析到对应的IP地址192.168.100.250,由于我们在虚拟主机配置中指定 JkMount / tomcat1 JkMount /* tomcat1 JkMount /index.html tomcat1 根和根下面所有的文件都是由tomcat1这个tomcat的worder来处理,也就是让tomcat来处理,当然还有根下面的index.html.这里的/是指/web3 所以这个时候,apache就会把请求交给tomcat来处理,tomcat一旦接手之后,它就开始在appBase指定目录(/web3)下寻找ROOT目录(默认是ROOT目录,可以修改),然后到ROOT目录下寻找WEB-INF目录,再到WEB-INF目录中找到web.xml文件,读取web.xml中的中指定的index.html或者index.htm(相当于apache配置文件中指定DirectoryIndex index.html index.htm) index.html 然后通过这个index.html找到处理这个index.html的servlet程序,找到之后就去执行这个程序,这个程序会执行ROOT找到首先要显示页面,比如index.jsp,当然这个程序里已经提前指定好了tomcat首先会去找到那个网页去执行,执行之后就成为html静态代码,再把它返回给apache,然后apache再返回给客户端浏览器,客户端浏览器执行这些代码之后,就显示出来。这当中还有就是客户端浏览器执行的过程,浏览器执行静态代码时,碰到什么标签,才去取什么内容,比如:遇到aa.css样式表,然后才去服务器端去取,而不是服务器端一次性都把所有的静态内容都发给浏览器。 如果浏览器请求的是图片、视频、flash,css,js这些静态内容时,是由Apache直接处理的。 一、安装Apache 1.安装
- [root@router ~]# tar xvfz httpd-2.2.21.tar.gz
- [root@router ~]# cd httpd-2.2.21
- [root@router httpd-2.2.21]# ./configure --prefix=/usr/local/apache2 --enable-modules=most --enable-mods-shared=all --enable-so --with-included-apr
- 配置时根据需要、增加选项来启用某个功能。
- [root@router httpd-2.2.21]#make && make install
2.编辑/etc/profile文件 把Apache的bin目录加入到PATH变量中去,在文件中加入以下的行,这样就可以直接使用apachectl start/stop/restart
- export PATH=$PATH:/usr/local/apache2/bin
- [root@router httpd-2.2.21]# source /etc/profile //使其生效
- [root@router httpd-2.2.21]# apachectl -l 查看Apache静态编译到内核的模块
- Compiled in modules:
- core.c
- prefork.c //默认是prefork工作方式,如果在编译时不指定的话
- http_core.c
- mod_so.c //如果以后动态加载模块,那这个模块必须静态编译到内核中
3.建立虚拟主机放的文档根目录
- [root@router ~]# mkdir /web3
4.客户端修改hosts文件,因为没有DNS解析,测试就用Hosts文件来解析,加入以下内容。
- 192.168.100.250 www.apache.com
二、安装JDK 1.安装 在tomcat运行环境下,JDK是必不可少的软件,因为tomcat只是一个Servlet/JSP容器,底层的操作都需要JDK来完成。
- [root@router ~]# chmod +x jdk-6u26-linux-i586-rpm.bin //增加执行权限
- [root@router ~]# cp jdk-6u26-linux-i586-rpm.bin /usr/local/
- [root@router ~]# cd /usr/local/
- [root@router local]# ./jdk-6u26-linux-i586-rpm.bin
- 看到Press Enter to continue..... 这字样,按回车即可完成安装
- [root@router local]# ln -s /usr/java/jdk1.6.0_26/ /usr/local/java //做一个软连接到/usr/local/java下
2.设置环境变量 vi /etc/profile 在文件的最后面加入以下内容
- JAVA_HOME=/usr/local/java
- CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- PATH=$JAVA_HOME/bin:$PATH
- export PATH JAVA_HOME CLASSPATH
- 保存退出。
- [root@server1 lib]# source /etc/profile //使配置即时生效
3.测试JAVA是否安装成功
- [root@server1 lib]# java -version
- java version "1.6.0_26" //是我们安装的版本,安装成功
- Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
- Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
三、安装tomcat
- [root@router local]# cp apache-tomcat-6.0.33.tar.gz /usr/local/
- [root@router local]# tar xvfz apache-tomcat-6.0.33.tar.gz
- [root@router local]# mv apache-tomcat-6.0.33 tomcat-6.0.33 //重命名一下,方便记忆与管理
- 这样tomcat就安装完成了。
- 启动tomcat
- [root@router tomcat-6.0.33]# bin/startup.sh
从客户端访问正常 在/usr/local/tomcat-6.0.33/bin 修改catalina.sh,在文件的最下面加入以下内容:
- JAVA_HOME=/usr/local/java
四、安装JK模块 1.安装,如果是源码安装,会自带apxs工具,如果采用rpm包安装的话,不一定带这个工具,还需要重新安装
- [root@router ~]# tar xvrz tomcat-connectors-1.2.32-src.tar.gz
- [root@router ~]# cd tomcat-connectors-1.2.32-src
- [root@router tomcat-connectors-1.2.32-src]# cd native/
- [root@router native]# ./buildconf.sh
- [root@router native]# ./configure --with-apxs=/usr/local/apache2/bin/apxs
- #这里指定的是apache安装目录中apxs的位置,这个apxs方便我们动态加载模块
-
-
- [root@router ~]# ll /usr/local/apache2/modules/mod_jk.so #已经帮我们复制到apache的modules目录中去了。
- -rwxr-xr-x 1 root root 878139 11-01 14:06 /usr/local/apache2/modules/mod_jk.so
2.修改apache主配置文件,使其在启动时加载可以加载JK模块,在模块加载的位置添加以下行:
- LoadModule jk_module modules/mod_jk.so
- [root@router htdocs]# httpd -D DUMP_MODULES 可以查看jk模块是否被加载了
五、apache与tomcat整合配置 1、Tomcat workers Tomcat worker是一个服务于web server、等待执行servlet/JSP的Tomcat实例,创建tomcat workers需要增加3个配置文件,分别是Tomcat workers配置文件workers.properties,URL映射文件uriworkermap.properties和JK模块日志输出文件mod_jk.log,mod_jk.log文件会在apache启动时自动创建,这里只需创建前两个文件即可。 定义Tomcat workers的方法是在apache的conf目录下编写一个名为“workers.properties”的属性文件,使其作为apache的插件来发挥作用,下面讲述workers.properties配置说明。 worker.list用来定义Workers列表,当apache启动时,workers.properties作为插件将初始化出现在worker.list列表中的workers。 定义worker类型的格式: worker.worker名字.type= 例如: 定义一个名为“tomcat12”的worker,其使用ajp12协议与tomcat 进程通讯: worker.tomcat12.type=ajp12 定义一个名为“tomcat13”的worker,其使用ajp13协议与tomcat 进程通讯: worker.remote.type=ajp13 定义一个名为“tomcatjni”的worker,其使用JNI的方式与tomcat 进程通讯 worker.tomcatjni.type=jni 定义一个名为“tomcatloadbalancer”的worker,作为对多个tomcat进程的负载平衡使用: worker.tomcatloadbalancer.type=lb 这里只说明ajp13协议支持的几个常用属性: Host:监听ajp13请求的的tomcat worker主机地址 Port:tomcat worker主机监听的端口。默认情况下tomcat在ajp13协议中使用的端口为8009。 lbfactor:当tomcat用作负载均衡时,此属性被使用,表示此tomcat worker节点的负载均衡权值。 2、创建workers.properties文件 参照: http://tomcat.apache.org/connectors-doc/reference/workers.html
- [root@router ~]# vim /usr/local/apache2/conf/workers.properties 内容如下:
- worker.list=tomcat1
- worker.tomcat1.port=8009
- worker.tomcat1.host=localhost
- worker.tomcat1.type=ajp13
4.编辑Apache主配置文件/usr/local/apache2/conf/httpd.conf ,加入以下内容: 参照:http://tomcat.apache.org/connectors-doc/reference/apache.html
- JkWorkersFile conf/workers.properties
- JkLogFile logs/mod_jk.log
- JkLogLevel debug
- # Virtual hosts
- Include conf/extra/httpd-vhosts.conf #把这行的注释去掉,使用这个配置文件来配置虚拟主机
5.编辑extra/httpd-vhosts.conf 这个虚拟主机配置文件,配置如下:
- <VirtualHost *:80>
- DocumentRoot "/web3" //Apache文档根目录
- ErrorLog "logs/www-error.log"
- CustomLog "logs/www-access.log" common
- ServerName www.apache.com
- DirectoryIndex index.html
- <Directory "/web3/"> //一定要有这段,控制目录访问的权限,如果没有这段是没办法访问的,默认是禁止访问
- Options FollowSymLinks MultiViews
- AllowOverride None
- Order deny,allow
- Allow from all
- Directory>
-
- #前台页面配置
- #这里面的/ 是代表 /web3
- JkMount / tomcat1
- JkMount /* tomcat1
- JkMount /index.html tomcat1
-
- #把这存放静态页面的目录,起别名(访问方便起见,也是为了安全)指向实际的位置
- Alias /css /web3/ROOT/css
- Alias /image /web3/ROOT/image
- Alias /images /web3/ROOT/images
- Alias /js /web3/ROOT/js
- Alias /swf /web3/ROOT/swf
- Alias /video /web3/ROOT/video
-
- #所有的css、images、js、video等这些静态文件不让tomcat1来处理,Apache来处理这些文件
- JkUnMount /css/* tomcat1
- JkUnMount /image/* tomcat1
- JkUnMount /images/* tomcat1
- JkUnMount /js/* tomcat1
- JkUnMount /swf/* tomcat1
- JkUnMount /video/* tomcat1
-
- #后台页面配置
- JkMount /admin tomcat1
- JkMount /admin/* tomcat1
- JkMount /admin/index.html tomcat1
-
- Alias /admin/css /web3/admin/css
- Alias /admin/images /web3/admin/images
- Alias /admin/js /web3/admin/js
-
- #所有的css、images、js、video等这些静态文件不让tomcat1来处理,Apache来处理这些文件
- JkUnMount /admin/css/* tomcat1
- JkUnMount /admin/images/* tomcat1
- JkUnMount /admin/js/* tomcat1
-
- VirtualHost>
6、Tomcat的配置(server.xml的配置) server.xml是tomcat的核心配置文件,找到默认的标签
- <Host name="localhost" appBase="/web3"
- unpackWARs="true" autoDeploy="true"
- xmlValidation="false" xmlNamespaceAware="false">
把appBase指向 /web3,就是Apache虚拟主机(www.apache.com)指向的目录,如果使用默认的ROOT的目录的话,只需要在/web3目录下新建一个ROOT目录,然后把你的前台页面放到这里面就可以访问到,因为tomcat会默认到ROOT下面找WEB-INF下的web.xml文件然后找到index.html这个,这个index.html不一定存在,这个就是tomcat处理的问题 7.准备测试网站,放到/web3目录下
- [root@router web3]# ls
- admin ROOT
- [root@router web3]# ls ROOT/
- 404.jsp favicon.ico help _leftheadforuser.jsp _menu.yingda.jsp recommend _userfoot.jsp
- 500.jsp fckeditor image literature page.jsp reg_next.jsp validemail.jsp
- about _footer.jsp images login_register.jsp paper search.jsp video
- bulletin _header.jsp index.jsp loginstatus.jsp product soft WEB-INF
- css _header.yingda.jsp index.yingda.jsp magazine publisher swf xml.data.jsp
-
-
- entry _headforuser.jsp js _menu.jsp reader user
-
-
- [root@router web3]# ls ROOT/WEB-INF/
- classes jboss-web.xml lib tld web.xml
8.启动apache和tomcat,测试访问
- [root@router ~]# /usr/local/apache2/bin/apachectl start
- [root@router ~]# /usr/local/tomcat-6.0.33/bin/startup.sh
访问前台页面 访问后台页面,要加上/admin,因为这里面放着后台的程序。 可以访问到,正常 那怎么知道,那些js/css/images/swf/vedio文件夹里面的内容是apache解析的 可以这样,像下图输入一个不存在的css文件,然后看报错信息, 如果是tomcat 解析的话,错误页面会有tomcat的版本信息,像下图 jsp页面是tomcat来解析的,看下图,随便输入一个不存在的jsp页面,肯定会报错了 看到报错就知道这是tomcat报的错。这样就知道jsp页面是由tomcat来解析的。 |