您的位置:首页 > 运维架构 > Tomcat

Linux Apache+Tomcat 整合(JK方式)

2012-10-26 18:18 686 查看
版本:请注意如果整合时一定要看,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文件,修改<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.安装

[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

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




3.测试J***A是否安装成功

[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,在文件的最下面加入以下内容:
J***A_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>标签
<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来解析的。

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: