Linux Apache+Tomcat 整合(JK方式)

来源:互联网 发布:淘宝上的酷狗会员没了 编辑:程序博客网 时间:2024/05/21 13:58
版本:请注意如果整合时一定要看,apache和tomcat的官方文档,版本不一样,整合细节也不太一样
Apache: 2.2.21
Tomcat: 6.0.33
mod_jk: 1.2.32
JDK: 1.6
 
  1. apache-tomcat-6.0.33.tar.gz  
  2. wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz 
  1. httpd-2.2.21.tar.gz  
  2. wget http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.gz 
 
 
  1. tomcat-connectors-1.2.32-src.tar.gz  (mod_JK 模块)         
  2. wget http://mirror.bjtu.edu.cn/apache//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.32-src.tar.gz 

 

  1. JDK(jdk-6u26-linux-i586)  
  2. 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文件,修改<HOST>标签里的内容,指定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中的<welcome-file-list>中指定的index.html或者index.htm(相当于apache配置文件中指定DirectoryIndex index.html index.htm)
        <welcome-file-list>
                <welcome-file>index.html</welcome-file>
        </welcome-file-list>
然后通过这个index.html找到处理这个index.html的servlet程序,找到之后就去执行这个程序,这个程序会执行ROOT找到首先要显示页面,比如index.jsp,当然这个程序里已经提前指定好了tomcat首先会去找到那个网页去执行,执行之后就成为html静态代码,再把它返回给apache,然后apache再返回给客户端浏览器,客户端浏览器执行这些代码之后,就显示出来。这当中还有就是客户端浏览器执行的过程,浏览器执行静态代码时,碰到什么标签,才去取什么内容,比如:遇到aa.css样式表,然后才去服务器端去取,而不是服务器端一次性都把所有的静态内容都发给浏览器。
如果浏览器请求的是图片、视频、flash,css,js这些静态内容时,是由Apache直接处理的。

 

一、安装Apache

1.安装

  1. [root@router ~]# tar xvfz httpd-2.2.21.tar.gz  
  2. [root@router ~]# cd httpd-2.2.21  
  3. [root@router httpd-2.2.21]# ./configure  --prefix=/usr/local/apache2  --enable-modules=most --enable-mods-shared=all --enable-so --with-included-apr    
  4. 配置时根据需要、增加选项来启用某个功能。  
  5. [root@router httpd-2.2.21]#make && make install 

 
2.编辑/etc/profile文件

把Apache的bin目录加入到PATH变量中去,在文件中加入以下的行,这样就可以直接使用apachectl start/stop/restart

  1. export PATH=$PATH:/usr/local/apache2/bin  
  2. [root@router httpd-2.2.21]# source /etc/profile                   //使其生效  
  3. [root@router httpd-2.2.21]# apachectl -l     查看Apache静态编译到内核的模块  
  4. Compiled in modules:  
  5.   core.c  
  6.   prefork.c    //默认是prefork工作方式,如果在编译时不指定的话  
  7.   http_core.c  
  8.   mod_so.c //如果以后动态加载模块,那这个模块必须静态编译到内核中  

3.建立虚拟主机放的文档根目录

 

  1. [root@router ~]# mkdir /web3  


 
4.客户端修改hosts文件,因为没有DNS解析,测试就用Hosts文件来解析,加入以下内容。

  1. 192.168.100.250   www.apache.com 
 
二、安装JDK

1.安装

在tomcat运行环境下,JDK是必不可少的软件,因为tomcat只是一个Servlet/JSP容器,底层的操作都需要JDK来完成。
  1. [root@router ~]# chmod +x jdk-6u26-linux-i586-rpm.bin       //增加执行权限  
  2. [root@router ~]# cp jdk-6u26-linux-i586-rpm.bin /usr/local/  
  3. [root@router ~]# cd /usr/local/  
  4. [root@router local]# ./jdk-6u26-linux-i586-rpm.bin  
  5. 看到Press Enter to continue..... 这字样,按回车即可完成安装  
  6. [root@router local]# ln -s /usr/java/jdk1.6.0_26/ /usr/local/java     //做一个软连接到/usr/local/java下  
 
2.设置环境变量 vi /etc/profile

在文件的最后面加入以下内容
  1. JAVA_HOME=/usr/local/java  
  2. CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  3. PATH=$JAVA_HOME/bin:$PATH  
  4. export PATH JAVA_HOME CLASSPATH  
  5. 保存退出。  
  6. [root@server1 lib]# source /etc/profile          //使配置即时生效  

 
3.测试JAVA是否安装成功

  1. [root@server1 lib]# java -version  
  2. java version "1.6.0_26"                                      //是我们安装的版本,安装成功  
  3. Java(TM) SE Runtime Environment (build 1.6.0_26-b03)  
  4. Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing) 
 
三、安装tomcat

  1. [root@router local]# cp apache-tomcat-6.0.33.tar.gz /usr/local/  
  2. [root@router local]# tar xvfz apache-tomcat-6.0.33.tar.gz   
  3. [root@router local]# mv apache-tomcat-6.0.33 tomcat-6.0.33     //重命名一下,方便记忆与管理  
  4. 这样tomcat就安装完成了。  
  5. 启动tomcat  
  6. [root@router tomcat-6.0.33]# bin/startup.sh 
从客户端访问正常

 

在/usr/local/tomcat-6.0.33/bin 修改catalina.sh,在文件的最下面加入以下内容:
  1. JAVA_HOME=/usr/local/java 

 
四、安装JK模块

1.安装,如果是源码安装,会自带apxs工具,如果采用rpm包安装的话,不一定带这个工具,还需要重新安装

  1. [root@router ~]# tar xvrz tomcat-connectors-1.2.32-src.tar.gz   
  2. [root@router ~]# cd tomcat-connectors-1.2.32-src  
  3. [root@router tomcat-connectors-1.2.32-src]# cd native/   
  4. [root@router native]# ./buildconf.sh   
  5. [root@router native]# ./configure --with-apxs=/usr/local/apache2/bin/apxs         
  6.      #这里指定的是apache安装目录中apxs的位置,这个apxs方便我们动态加载模块  
  7.  
  8.    
  9. [root@router ~]# ll /usr/local/apache2/modules/mod_jk.so     #已经帮我们复制到apache的modules目录中去了。  
  10. -rwxr-xr-x 1 root root 878139 11-01 14:06 /usr/local/apache2/modules/mod_jk.so  

 
2.修改apache主配置文件,使其在启动时加载可以加载JK模块,在模块加载的位置添加以下行:
 
  1. LoadModule jk_module modules/mod_jk.so  
  2. [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

 
  1. [root@router ~]# vim /usr/local/apache2/conf/workers.properties         内容如下:  
  2. worker.list=tomcat1 
  3. worker.tomcat1.port=8009 
  4. worker.tomcat1.host=localhost 
  5. worker.tomcat1.type=ajp13 
4.编辑Apache主配置文件/usr/local/apache2/conf/httpd.conf ,加入以下内容:
参照:http://tomcat.apache.org/connectors-doc/reference/apache.html
 
  1. JkWorkersFile conf/workers.properties  
  2. JkLogFile logs/mod_jk.log  
  3. JkLogLevel debug 
 
  1. # Virtual hosts    
  2. Include conf/extra/httpd-vhosts.conf                 #把这行的注释去掉,使用这个配置文件来配置虚拟主机 
5.编辑extra/httpd-vhosts.conf 这个虚拟主机配置文件,配置如下:
  1. <VirtualHost *:80> 
  2.     DocumentRoot "/web3"           //Apache文档根目录  
  3.     ErrorLog "logs/www-error.log"  
  4.     CustomLog "logs/www-access.log" common  
  5.     ServerName www.apache.com  
  6.     DirectoryIndex index.html   
  7.     <Directory "/web3/">       //一定要有这段,控制目录访问的权限,如果没有这段是没办法访问的,默认是禁止访问  
  8.         Options FollowSymLinks MultiViews  
  9.         AllowOverride None  
  10.         Order deny,allow  
  11.         Allow from all  
  12.     </Directory> 
  13.    
  14. #前台页面配置  
  15.    #这里面的/ 是代表 /web3  
  16.    JkMount / tomcat1  
  17.    JkMount /* tomcat1  
  18.    JkMount /index.html tomcat1  
  19.  
  20.   #把这存放静态页面的目录,起别名(访问方便起见,也是为了安全)指向实际的位置  
  21.    Alias /css /web3/ROOT/css  
  22.    Alias /image /web3/ROOT/image  
  23.    Alias /images /web3/ROOT/images  
  24.    Alias /js /web3/ROOT/js  
  25.    Alias /swf /web3/ROOT/swf  
  26.    Alias /video /web3/ROOT/video  
  27.  
  28.    #所有的css、images、js、video等这些静态文件不让tomcat1来处理,Apache来处理这些文件  
  29.    JkUnMount /css/* tomcat1  
  30.    JkUnMount /image/* tomcat1  
  31.    JkUnMount /images/* tomcat1  
  32.    JkUnMount /js/* tomcat1  
  33.    JkUnMount /swf/* tomcat1  
  34.    JkUnMount /video/* tomcat1  
  35.  
  36.    #后台页面配置  
  37.    JkMount /admin tomcat1  
  38.    JkMount /admin/* tomcat1  
  39.    JkMount /admin/index.html tomcat1  
  40.  
  41.    Alias /admin/css /web3/admin/css  
  42.    Alias /admin/images /web3/admin/images  
  43.    Alias /admin/js /web3/admin/js  
  44.  
  45.    #所有的css、images、js、video等这些静态文件不让tomcat1来处理,Apache来处理这些文件  
  46.    JkUnMount /admin/css/* tomcat1  
  47.    JkUnMount /admin/images/* tomcat1  
  48.    JkUnMount /admin/js/* tomcat1  
  49.  
  50. </VirtualHost> 

 
 6、Tomcat的配置(server.xml的配置)
server.xml是tomcat的核心配置文件,找到默认的<Host>标签
  1. <Host name="localhost"  appBase="/web3" 
  2.             unpackWARs="true" autoDeploy="true" 
  3.             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目录下
  1. [root@router web3]# ls  
  2. admin  ROOT  
  3. [root@router web3]# ls ROOT/  
  4. 404.jsp   favicon.ico         help              _leftheadforuser.jsp  _menu.yingda.jsp  recommend     _userfoot.jsp  
  5. 500.jsp   fckeditor           image             literature            page.jsp          reg_next.jsp  validemail.jsp  
  6. about     _footer.jsp         images            login_register.jsp    paper             search.jsp    video  
  7. bulletin  _header.jsp         index.jsp         loginstatus.jsp       product           soft          WEB-INF  
  8. css       _header.yingda.jsp  index.yingda.jsp  magazine              publisher         swf           xml.data.jsp  
  9.    
  10.  
  11. entry     _headforuser.jsp    js                _menu.jsp             reader            user   
  12.  
  13.    
  14. [root@router web3]# ls ROOT/WEB-INF/  
  15. classes  jboss-web.xml  lib  tld  web.xml  

 
8.启动apache和tomcat,测试访问
  1. [root@router ~]# /usr/local/apache2/bin/apachectl start  
  2. [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来解析的。

 

本文出自 “雷纳科斯的博客” 博客,请务必保留此出处http://linux5588.blog.51cto.com/65280/750826



原创粉丝点击