apache整合tomcat也是就是其中之一。 选用的原因:
Apache优势有:
--功能强大:apache为模块化的设计,通过扩展模块可以扩展很多功能。
--配置简单:apache的配置文件也比较简单易懂 --性能稳定:apache在搞负载请求下性能表现依旧不俗。
但是apache的缺点:
--只能支持静态页面,对jsp,php等不支持
但是作为市场份额超过半数的选择,选择apache并不奇怪。
Tomcat的优势:
--作为apache软件基金会和sun支持的项目,有着最纯真的sun更新代码的体现, serlet和jsp的容器,对于动态页面支持非常好
--跨平台性非常好,只要有JDK的支持就可以运行
Tomcat缺点:
--支持静态页面效率不如apache
--可配置型,稳定性都不如apache
综上将apache和tomcat整合起来应该是优势互补。况且本身apache和tomato还都是apache软件基金会的子项目呢,
整合原理:apache本身和tomcat都是开源的,可单独作为web服务器的软件,所以整合他们需要另外一些东西进行二者之间通信,相对于apache来说等同扩展功能,所以开源爱好者开发出了可利用的模块,这里主要介绍的有4个模块。
--mod_jk2.so:早期的连接器,在动静态页面过滤上使用正则表达式,配置较灵活,但是现在已经没有开发人员的支持了,版本就此停止了。
--mod_jk.so:上面的取代版本,支持apache 1.x和2.x版本,大多都是用这个模块
--http-proxy:apache2.2版本出现后出现,可以实现双向代理,功能强大,只要打开tomcat的http功能,然后用apache的proxy代理功能将动态请求交给tomcat处理,静态自己处理即可
--proxy-ajp:专门针对tomcat整合开发,ajp协议专门代理对tomcat请求,执行效率最高。 环境:RHEL 5.4
Httpd-2.2.17.tar.gz
Apache-tomcat-5.5.33.tar.gz
tomcat-connectors-1.2.31-src.tar.gz
JDK-6u25-dlj-linux-i586.bin 1/首先上传相应的软件包到服务器上
2/下面就是安装相应的辅助软件包,包括gcc编译器,libtool
3/下面就进行apache的安装,安装过程就不截图了,这里把步骤送上
[root@mail ~]#tar -zxvf httpd-2.2.17.tar.gz
[root@mail ~]#cd httpd-2.2.17
[root@mail ~]#./configure --prefix=/usr/local/apache \
--enable-modules=most \
--enable-mods-shared=all \
--enable-so
[root@mail ~]#make ;make install
这里有加载模块的选项解释下,prefix是安装路径,--enable-modules=most是动态加载大多数模块静态编译到apache的二 进制文件中,--enable-mods-shard=all表示动态加载所有模块,这两个选项是可选的,但是最后一个—enable-so是必须要有 的,是一个加载模块的开关。这里感谢南非蚂蚁的文档的帮助。。。谢谢
4/安装完成之后当然是安装tomcat,我们修改下目录名称,不影响的
[root@mail ~]#cd /usr/local
[root@mail local]# tar -zxvf apache-tomcat-5.5.33.tar.gz
[root@mail local]#mv apache-tomcat-5.5.33 tomcat5.5.33
这里因为tomcat默认解压缩的时候已经是二进制可执行文件了,就不用编译安装了,直接拷贝到我们的目录下就可以了
5/因为tomcat基于Java的环境,所以需要安装jdk,并修改环境变量
[root@mail ~]#cd /usr/local
[root@mail local]#chmod u+x jdk-6u15-linux-i586.bin
[root@mail local]#./jdk-6u15-linux-i586.bin
安装过程根据提示操作即可完成。安装完成会生成一个jdk1.6.0_25目录
下面需要修改环境变量来满足tomcat的运行环境,在文件最后添加,因为jdk安装在/usr/local下,所以才会配置如此,如果位置不同只需修改JAVA_HOME路径即可
#Vim /etc/profile
export JAVA_HOME="/usr/local/jdk1.6.0_25"
export PATH="$PATH :$JAVA_HOME/bin:$JAVA_HOME/jre/bin:"
export CLASSPATH="$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
如果正确完成之后是可以用java –version来查看版本的
6/因为要让apache和tomcat进行通信,所以当然要安装一个连接器,或者叫插件,
[root@mail ~]# cd /usr/local/
[root@mail local]#tar xzvf jakarta-tomcat-connectors-1.2.31-src.tar.gz
[root@mail local]# cd jakarta-tomcat-connectors-1.2.31-src/native
[root@mail native]# ./buildconf.sh
[root@mail native]# --with-apxs=/usr/local/apache2/bin/apxs \
--with-java-home=/usr/local/jdk1.6.0_25 7、到此安装的步骤已经全部结束,下面就开始进行相应的整合操作!
Tomcat是一个服务于web server等执行servlet/jsp的tomcat实例,所以需要在apache的配置文件下添加相关的配置文件来让apache和tomcat来进行通讯,在这里需要添加2个文件,一个是mod_jk.conf和workers.properties,
#cd /usr/local/apache2/conf
#vim mod_jk.conf ###### 指出mod_jk模块工作所需要的工作文件workers.properties的位置
JkWorkersFile /usr/local/apache2/conf/workers.properties
###### Where to put jk logs
JkLogFile /usr/local/apache2/logs/mod_jk.log
###### Set the jk log level [debug/error/info]
JkLogLevel info
###### Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
###### JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
###### JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
###### 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理
JkMount /servlet/* worker1
JkMount /*.jsp worker1
JkMount /*.do worker1
这里说明一下,比较重要的就是最后两行了,因为这里是告诉apache如何判断用户的请求哪些该法往tomcat,这里我只写了讲servlet和 jsp页面的请求发往tomcat,其余的就是apache自身来处理,这里有一个匹配原则,apache优先匹配静态资源,一旦静态匹配不成功,再来检 查这里的文件,满足就转发给tomcat
8、然后添加,指定和tomcat通信的apache进程实例的一些模式,包括协议,端口啊等
Vim workers.properties
####### Defining a worker named worker1 and of type ajp13
worker.list=worker1
####### Set properties for worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
9、最后配置apache服务器配置文件,让apache加载mod_jk.so模块和读取mod_jk.conf文件
#vim httpd.conf LoadModule jk_module modules/mod_jk.so
Include /usr/local/apache2/conf/mod_jk.conf
这里还可以修改下服务器名称,这里方便我就改成自身的IP,监听端口等
还要增加主页对JSP页面的支持
到此apache全部配置就基本结束了,下面我们来配置tomcat整合要做哪些设置
10、tomcat整合必须修改主配置文件添加一部分内容即可
#vim /usr/local/tomcat/conf/server.xml
在<Host></Host>之间添加<Context path="" docBase="/usr/local/apache/htdocs/"
debug="0" reloadable="true" crossContext="true"/>
这里我用红色的颜色标记了网页的存放路径一定要和apache里指向同一个地方
到此tomcat其实也就设置完成了,但是这里给个小提示。Tomcat默认也可以单独作为web服务器的,所以他也有自己监听的端口,默认是8080,配置文件里说明了 <Connector port="8009"
enableLookups="false"
redirectPort="8443"
protocol="AJP/1.3“ />
11、最后重启apache和tomcat即可完成
Apache的启动:
#/usr/local/apache/bin/apachectl start
Tomcat的启动:
#/usr/local/tomcat/bin/startup.sh start
这里能看到8080端口是因为我没有将tomcat的默认端口关闭。这样恰好可以看到tomcat是启动了的,而且ajp13也是监听在,这样整合就成功了,下面我们来进行检测
12检测
--首先我们看下默认纯apache是否支持jsp页面
这里我用默认的jsp一个简单的页面,结果apache返回给我源代码,说明apache不支持jsp页面 看到是支持的,但是有人会怀疑这是不是tomcat解析出来的,并不是整合的效果,那好,这里告诉各位额,我们都知道apache有自己独有的报错页 面,也就是你访问错误的网页时候apache返回的页面是可以判断这就是apache在处理相关的信息,同样的tomcat也有独有的报错页面,下面这就 是访问不到默认tomcat的页面返回信息,这样才知道是哪个响应了我们的请求,到此,我们的整合实验算是基本完成了.
from http://www.huomo.cn/sysapp/article-1bb00.html
-------------------------------------------------------------------
用apache代理实现整合多个tomcat
要求:
源码编译安装proxy-ajp模式的
# tar xvjf httpd-2.2.0.tar.bz2
# cd httpd-2.2.0
安装apr
# cd srclib/apr
# ./configure --prefix=/server/soft/apr
# make
# make install
安装apr-util
# cd ../apr-util/
# ./configure --prefix=/server/soft/apr-util \
--with-apr=/server/soft/apr
# make
# make install
# cd ../../
安装apache
# ./configure --prefix=/server/soft/apache \
--enable-so \
--enable-rewrite=share \
--enable-proxy=share \
--enable-proxy-ajp=share \
--enable-dav=share \
--with-apr=/server/soft/apr \
--with-apr-util=/server/soft/apr-util/
# make
# make install
</Engine>
Apache优势有:
--功能强大:apache为模块化的设计,通过扩展模块可以扩展很多功能。
--配置简单:apache的配置文件也比较简单易懂 --性能稳定:apache在搞负载请求下性能表现依旧不俗。
但是apache的缺点:
--只能支持静态页面,对jsp,php等不支持
但是作为市场份额超过半数的选择,选择apache并不奇怪。
Tomcat的优势:
--作为apache软件基金会和sun支持的项目,有着最纯真的sun更新代码的体现, serlet和jsp的容器,对于动态页面支持非常好
--跨平台性非常好,只要有JDK的支持就可以运行
Tomcat缺点:
--支持静态页面效率不如apache
--可配置型,稳定性都不如apache
综上将apache和tomcat整合起来应该是优势互补。况且本身apache和tomato还都是apache软件基金会的子项目呢,
整合原理:apache本身和tomcat都是开源的,可单独作为web服务器的软件,所以整合他们需要另外一些东西进行二者之间通信,相对于apache来说等同扩展功能,所以开源爱好者开发出了可利用的模块,这里主要介绍的有4个模块。
--mod_jk2.so:早期的连接器,在动静态页面过滤上使用正则表达式,配置较灵活,但是现在已经没有开发人员的支持了,版本就此停止了。
--mod_jk.so:上面的取代版本,支持apache 1.x和2.x版本,大多都是用这个模块
--http-proxy:apache2.2版本出现后出现,可以实现双向代理,功能强大,只要打开tomcat的http功能,然后用apache的proxy代理功能将动态请求交给tomcat处理,静态自己处理即可
--proxy-ajp:专门针对tomcat整合开发,ajp协议专门代理对tomcat请求,执行效率最高。 环境:RHEL 5.4
Httpd-2.2.17.tar.gz
Apache-tomcat-5.5.33.tar.gz
tomcat-connectors-1.2.31-src.tar.gz
JDK-6u25-dlj-linux-i586.bin 1/首先上传相应的软件包到服务器上
2/下面就是安装相应的辅助软件包,包括gcc编译器,libtool
3/下面就进行apache的安装,安装过程就不截图了,这里把步骤送上
[root@mail ~]#tar -zxvf httpd-2.2.17.tar.gz
[root@mail ~]#cd httpd-2.2.17
[root@mail ~]#./configure --prefix=/usr/local/apache \
--enable-modules=most \
--enable-mods-shared=all \
--enable-so
[root@mail ~]#make ;make install
这里有加载模块的选项解释下,prefix是安装路径,--enable-modules=most是动态加载大多数模块静态编译到apache的二 进制文件中,--enable-mods-shard=all表示动态加载所有模块,这两个选项是可选的,但是最后一个—enable-so是必须要有 的,是一个加载模块的开关。这里感谢南非蚂蚁的文档的帮助。。。谢谢
4/安装完成之后当然是安装tomcat,我们修改下目录名称,不影响的
[root@mail ~]#cd /usr/local
[root@mail local]# tar -zxvf apache-tomcat-5.5.33.tar.gz
[root@mail local]#mv apache-tomcat-5.5.33 tomcat5.5.33
这里因为tomcat默认解压缩的时候已经是二进制可执行文件了,就不用编译安装了,直接拷贝到我们的目录下就可以了
5/因为tomcat基于Java的环境,所以需要安装jdk,并修改环境变量
[root@mail ~]#cd /usr/local
[root@mail local]#chmod u+x jdk-6u15-linux-i586.bin
[root@mail local]#./jdk-6u15-linux-i586.bin
安装过程根据提示操作即可完成。安装完成会生成一个jdk1.6.0_25目录
下面需要修改环境变量来满足tomcat的运行环境,在文件最后添加,因为jdk安装在/usr/local下,所以才会配置如此,如果位置不同只需修改JAVA_HOME路径即可
#Vim /etc/profile
export JAVA_HOME="/usr/local/jdk1.6.0_25"
export PATH="$PATH :$JAVA_HOME/bin:$JAVA_HOME/jre/bin:"
export CLASSPATH="$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
如果正确完成之后是可以用java –version来查看版本的
6/因为要让apache和tomcat进行通信,所以当然要安装一个连接器,或者叫插件,
[root@mail ~]# cd /usr/local/
[root@mail local]#tar xzvf jakarta-tomcat-connectors-1.2.31-src.tar.gz
[root@mail local]# cd jakarta-tomcat-connectors-1.2.31-src/native
[root@mail native]# ./buildconf.sh
[root@mail native]# --with-apxs=/usr/local/apache2/bin/apxs \
--with-java-home=/usr/local/jdk1.6.0_25 7、到此安装的步骤已经全部结束,下面就开始进行相应的整合操作!
Tomcat是一个服务于web server等执行servlet/jsp的tomcat实例,所以需要在apache的配置文件下添加相关的配置文件来让apache和tomcat来进行通讯,在这里需要添加2个文件,一个是mod_jk.conf和workers.properties,
#cd /usr/local/apache2/conf
#vim mod_jk.conf ###### 指出mod_jk模块工作所需要的工作文件workers.properties的位置
JkWorkersFile /usr/local/apache2/conf/workers.properties
###### Where to put jk logs
JkLogFile /usr/local/apache2/logs/mod_jk.log
###### Set the jk log level [debug/error/info]
JkLogLevel info
###### Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
###### JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
###### JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
###### 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理
JkMount /servlet/* worker1
JkMount /*.jsp worker1
JkMount /*.do worker1
这里说明一下,比较重要的就是最后两行了,因为这里是告诉apache如何判断用户的请求哪些该法往tomcat,这里我只写了讲servlet和 jsp页面的请求发往tomcat,其余的就是apache自身来处理,这里有一个匹配原则,apache优先匹配静态资源,一旦静态匹配不成功,再来检 查这里的文件,满足就转发给tomcat
8、然后添加,指定和tomcat通信的apache进程实例的一些模式,包括协议,端口啊等
Vim workers.properties
####### Defining a worker named worker1 and of type ajp13
worker.list=worker1
####### Set properties for worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
9、最后配置apache服务器配置文件,让apache加载mod_jk.so模块和读取mod_jk.conf文件
#vim httpd.conf LoadModule jk_module modules/mod_jk.so
Include /usr/local/apache2/conf/mod_jk.conf
这里还可以修改下服务器名称,这里方便我就改成自身的IP,监听端口等
还要增加主页对JSP页面的支持
到此apache全部配置就基本结束了,下面我们来配置tomcat整合要做哪些设置
10、tomcat整合必须修改主配置文件添加一部分内容即可
#vim /usr/local/tomcat/conf/server.xml
在<Host></Host>之间添加<Context path="" docBase="/usr/local/apache/htdocs/"
debug="0" reloadable="true" crossContext="true"/>
这里我用红色的颜色标记了网页的存放路径一定要和apache里指向同一个地方
到此tomcat其实也就设置完成了,但是这里给个小提示。Tomcat默认也可以单独作为web服务器的,所以他也有自己监听的端口,默认是8080,配置文件里说明了 <Connector port="8009"
enableLookups="false"
redirectPort="8443"
protocol="AJP/1.3“ />
11、最后重启apache和tomcat即可完成
Apache的启动:
#/usr/local/apache/bin/apachectl start
Tomcat的启动:
#/usr/local/tomcat/bin/startup.sh start
这里能看到8080端口是因为我没有将tomcat的默认端口关闭。这样恰好可以看到tomcat是启动了的,而且ajp13也是监听在,这样整合就成功了,下面我们来进行检测
12检测
--首先我们看下默认纯apache是否支持jsp页面
这里我用默认的jsp一个简单的页面,结果apache返回给我源代码,说明apache不支持jsp页面 看到是支持的,但是有人会怀疑这是不是tomcat解析出来的,并不是整合的效果,那好,这里告诉各位额,我们都知道apache有自己独有的报错页 面,也就是你访问错误的网页时候apache返回的页面是可以判断这就是apache在处理相关的信息,同样的tomcat也有独有的报错页面,下面这就 是访问不到默认tomcat的页面返回信息,这样才知道是哪个响应了我们的请求,到此,我们的整合实验算是基本完成了.
from http://www.huomo.cn/sysapp/article-1bb00.html
-------------------------------------------------------------------
用apache代理实现整合多个tomcat
要求:
运行多个tomcat,通过apache侦听的端口进行区分。
对于每个tomcat,配置各自需要服务的虚拟主机
使用Apache的Proxy进行代理转发,转到对应的tomcat上面,重点在端口不同
取消jk连接,减少复杂度。虽然损失了一些Apache对静态文本的性能,但整体看还是值得的
结果:
tomcat的 server.xml里面配置了各自的虚拟主机,比如 www.aaa.com 和 oa.aaa.com。第一个是主域名,第二个是二级域名。tomcat端口为8080。第二个tomcat配置了一个 sales.aaa.com 用来支持销售,端口为8081。详细的配置文件请参考tomcat的虚拟主机配置,这里就不写了。
测试各个虚拟主机的运行是否正常,使用 http:// oa.aaa.com:8080/ 这样的方式进行测试。
apache的 httpd.conf配置
打开代理所需要的.so支持模块,在httpd.conf里面,取消下面四行的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
制作各自的虚拟主机
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.aaa.com
ProxyPass / http://www.aaa.com:8080/
ProxyPassReverse / http://www.aaa.com:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName oa.aaa.com
ProxyPass / http://oa.aaa.com:8080/
ProxyPassReverse / http://oa.aaa.com:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName sales.aaa.com
ProxyPass / http://sales.aaa.com:8081/
ProxyPassReverse / http://sales.aaa.com:8081/
</VirtualHost>
若需要内部端口整合
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
现在我们编辑第一个tomcat配置文件,端口为默认的8080
<Engine name="Catalina" defaultHost=www.aaa.com>
<Host name=www.aaa.com appBase=="/www/aaa.com/htdocs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"
<Host name=www.cba.com appBase=="/www/cba.com/htdocs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" />
源码编译安装proxy-ajp模式的
# tar xvjf httpd-2.2.0.tar.bz2
# cd httpd-2.2.0
安装apr
# cd srclib/apr
# ./configure --prefix=/server/soft/apr
# make
# make install
安装apr-util
# cd ../apr-util/
# ./configure --prefix=/server/soft/apr-util \
--with-apr=/server/soft/apr
# make
# make install
# cd ../../
安装apache
# ./configure --prefix=/server/soft/apache \
--enable-so \
--enable-rewrite=share \
--enable-proxy=share \
--enable-proxy-ajp=share \
--enable-dav=share \
--with-apr=/server/soft/apr \
--with-apr-util=/server/soft/apr-util/
# make
# make install
</Engine>
注意:网站文件请分别放在/www/*/htdocs/ROOT目录
Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" />
</Engine>
</Engine>
编辑第二个tomcat配置文件,端口修改为8081
<Engine name="Catalina" defaultHost=localhost>
<
<
注意:网站文件放在tomcat安装文件目录的默认ROOT目录
localhost这里可以不用修改,因为只有一个网站,我们就可以不用域名代替
附出错分析:
如果编译安装没有编辑代理模块的解决办法
方法如下:
编译的时候要打开WITH_PROXY_MODULES选项,但我又不想重新安装apache,所以使用以下步骤达到此目的。
1、重新编译带有proxy模块的apache,但不安装。
1、重新编译带有proxy模块的apache,但不安装。
进入源代码目录
#cd /usr/loacl/src/httpd2.2.9
#make WITH_PROXY_MODULES=yes
#cd /usr/loacl/src/httpd2.2.9
#make WITH_PROXY_MODULES=yes
2. 分别编译代理模块
cd modules/proxy
/usr/local/apache/bin/apxs -c -i -a mod_proxy.so proxy_util.c
/usr/local/apache/bin/apxs -c -i -a mod_proxy_ajp.so mod_proxy_ajp.c
/usr/local/apache/bin/apxs -c -i -a mod_proxy_connect.so mod_proxy_connect.c
/usr/local/apache/bin/apxs -c -i -a mod_proxy_http.so mod_proxy_http.c
/usr/local/apache/bin/apxs -c -i -a mod_proxy_ftp.so mod_proxy_ftp.c
/usr/local/apache/bin/apxs -c -i -a mod_proxy_connect.so mod_proxy_connect.c
/usr/local/apache/bin/apxs -c -i -a mod_proxy_http.so mod_proxy_http.c
/usr/local/apache/bin/apxs -c -i -a mod_proxy_ftp.so mod_proxy_ftp.c
这样就编译进了apache配置文件
编译过程中或者会出错,因为权限原因,需要给755权限
chmod 755 /usr/local/apache/modules/*.so
查看httpd.conf文件显示已经添加了代理模块
以下是httpd.conf的部分显示
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module modules/libphp5.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#
# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module modules/libphp5.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#
已经添加进了apache,现在需要重新启动apache,就可以正常配置代理方式了
#配置(prefix是安装路径,enable-mods-shared=all表示编译配置所有so文件)
./configure --prefix=/usr/local/apache --enable-mods-shared=all
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php5 --disable-debug --enable-ftp --enable-inline-optimization --enable-magic-quotes --enable-mbstring --enable-safe-mode --enable-wddx=shared --with-gd --with-gettext --with-regex=system --with-zlib --with-mcrypt --enable-sockets
./configure --prefix=/usr/local/apache --enable-mods-shared=all
php编译案例:
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php5 --disable-debug --enable-ftp --enable-inline-optimization --enable-magic-quotes --enable-mbstring --enable-safe-mode --enable-wddx=shared --with-gd --with-gettext --with-regex=system --with-zlib --with-mcrypt --enable-sockets
单独编译apache可以进行这样的操作
[root@localhost apache]#./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared="proxy proxy_http proxy_ftp proxy_connect headers"
编译
[root@localhost apache]# make
检查编译后的是否有编译出so文件
[root@localhost apache]# cd /usr/local/apache/modules
[root@localhost modules]#]# ls
httpd.exp mod_proxy_ajp.so mod_proxy_connect.so mod_proxy_http.so
mod_headers.so mod_proxy_balancer.so mod_proxy_ftp.so mod_proxy.so
如果存在以上文件则说明编译成功
安装
[root@localhost apache]# make install
启动APACHE
[root@localhost apache]# /usr/local/apache/bin/httpd -k start
测试如果输出IT works那么就ok了
编译
[root@localhost apache]# make
检查编译后的是否有编译出so文件
[root@localhost apache]# cd /usr/local/apache/modules
[root@localhost modules]#]# ls
httpd.exp mod_proxy_ajp.so mod_proxy_connect.so mod_proxy_http.so
mod_headers.so mod_proxy_balancer.so mod_proxy_ftp.so mod_proxy.so
如果存在以上文件则说明编译成功
安装
[root@localhost apache]# make install
启动APACHE
[root@localhost apache]# /usr/local/apache/bin/httpd -k start
测试如果输出IT works那么就ok了
附:
tomcat 404页面设置方法在web.xml里面加入
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
添加404.jsp页面文件,重新启动tomcat可生效。
----------------------------------------------------------
----------------------------------------------------------
linux下apache tomcat mod_jk 负载均衡+集群+session 复制
apache-tomcat-7.0.6.tar.gz
httpd-2.2.17.tar.gz
jdk-6u23-linux-i586.bin
tomcat-connectors-1.2.31-src.tar.gz
1个apache 2个tomcat在一台机器上,修改其中一个tomcat相关端口,对应如下
8080 8980
8005 8905
8009 8909
4000 4001
1.安装httpd
tar zxvf httpd-2.2.17.tar.gz
cd httpd-2.2.17
./configure --prefix=/usr/local/apache2 --enable-so
make && make install
2.安装JDK
chmod +x jdk-6u18-linux-i586.bin
./jdk-6u18-linux-i586.bin
mv jdk1.6.0_18 /usr/local/jdk
rm -rf /usr/bin/java
rm -rf /usr/bin/javac
ln -s /usr/local/jdk/bin/java /usr/bin/java
ln -s /usr/local/jdk/bin/javac /usr/bin/javac
[root@centoslamp src]# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
ln -s /usr/local/jdk/jre /usr/local/jre
设置环境变量
vi /etc/profile 添加如下内容
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
JRE_HOME=/usr/local/jre
export JRE_HOME
运行,使环境变量生效
source /etc/profile
3.安装tomcat
tar zxvf apache-tomcat-7.0.6.tar.gz
mv apache-tomcat-7.0.6 /usr/local/tomcat1
tar zxvf apache-tomcat-7.0.6.tar.gz
mv apache-tomcat-7.0.6 /usr/local/tomcat2
4.安装tomcat-connectors
tar zxvf tomcat-connectors-1.2.31-src.tar.gz
cd tomcat-connectors-1.2.31-src/native/
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk
make && make install
5. 配置httpd.conf 文件
vi /usr/local/apache2/conf/httpd.conf
添加
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
</IfModule>
6.创建并配置workers.properties文件
vi /usr/local/apache2/conf/workers.properties
worker.list=wlb , jkstatus
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
# Define preferred failover node for worker1
#worker.worker1.redirect=worker2
worker.worker2.port=8909
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
# Disable worker2 for all requests except failover
#worker.worker2.activation=disabled
worker.wlb.type=lb
worker.wlb.balance_workers=worker1,worker2
worker.jkstatus.type=status
以上注释掉的两行如果开启,则worker2成为worker1的备用,在worker1不可用的情况下才会向worker2请求
7.创建并配置uriworkermap.properties
vi /usr/local/apache2/conf/uriworkermap.properties
/admin/*=wlb
/manager/*=wlb
/jsp-examples/*=wlb
/servlets-examples/*=wlb
/examples/*=wlb
/*.jsp=wlb
!/servlets-examples/*.jpeg=wlb
/jkmanager=jkstatus
!/*.gif=wlb
!/*.jpg=wlb
!/*.png=wlb
!/*.css=wlb
!/*.js=wlb
!/*.htm=wlb
!/*.html=wlb
8.编辑server.xml文件
vi /usr/local/tomcat/conf/server.xml
修改相关对应端口,如果在不同的机器上则不需要修改
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
9.复制tomcat下webapps下的文件到/usr/local/apache2/htdocs
cp –R /usr/local/tomcat1/webapps/* /usr/local/apache2/htdocs
10.启动tomcat 和httpd
/usr/local/tomcat1/bin/startup.sh
/usr/local/tomcat2/bin/startup.sh
/usr/local/apache2/bin/apachectl start
到这里负载均衡完成
配置集群
11.修改tomcat1 下的server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.15.124" port="4000" autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
12.修改tomcat2的server.xml文件
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.15.124" port="4001" autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
13.查看
netstat –ant
tcp 0 0 ::ffff:192.168.15.124:4000 :::* LISTEN
tcp 0 0 ::ffff:192.168.15.124:4001 :::* LISTEN
14.修改应用程序的web.xml文件
在</web-app> 之前加上<distributable/> 用于session 复制
vi /usr/local/tomcat2/webapps/examples/WEB-INF/web.xml
vi /usr/local/tomcat2/webapps/examples/WEB-INF/web.xml
vi /usr/local/apache2/htdocs/examples/WEB-INF/web.xml
<distributable/>
</web-app>
15.测试session 复制
打开http://192.168.15.124/examples/servlets/servlet/SessionExample
输入相关内容,然后关闭其中的正在连接的tomcat 连接到第二个tomcat 查看之前提交的内容是否还在
Last Accessed: Mon Jan 31 12:09:26 CST 2011 The following data is in your session:
1 = 1
2 = 2
Last Accessed: Mon Jan 31 12:10:09 CST 2011 The following data is in your session:
1 = 1
2 = 2
相关文档
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
/usr/local/src/tomcat-connectors-1.2.31-src/conf/下的
httpd-jk.conf uriworkermap.properties workers.properties workers.properties.minimal
httpd-2.2.17.tar.gz
jdk-6u23-linux-i586.bin
tomcat-connectors-1.2.31-src.tar.gz
1个apache 2个tomcat在一台机器上,修改其中一个tomcat相关端口,对应如下
8080 8980
8005 8905
8009 8909
4000 4001
1.安装httpd
tar zxvf httpd-2.2.17.tar.gz
cd httpd-2.2.17
./configure --prefix=/usr/local/apache2 --enable-so
make && make install
2.安装JDK
chmod +x jdk-6u18-linux-i586.bin
./jdk-6u18-linux-i586.bin
mv jdk1.6.0_18 /usr/local/jdk
rm -rf /usr/bin/java
rm -rf /usr/bin/javac
ln -s /usr/local/jdk/bin/java /usr/bin/java
ln -s /usr/local/jdk/bin/javac /usr/bin/javac
[root@centoslamp src]# java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
ln -s /usr/local/jdk/jre /usr/local/jre
设置环境变量
vi /etc/profile 添加如下内容
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
JRE_HOME=/usr/local/jre
export JRE_HOME
运行,使环境变量生效
source /etc/profile
3.安装tomcat
tar zxvf apache-tomcat-7.0.6.tar.gz
mv apache-tomcat-7.0.6 /usr/local/tomcat1
tar zxvf apache-tomcat-7.0.6.tar.gz
mv apache-tomcat-7.0.6 /usr/local/tomcat2
4.安装tomcat-connectors
tar zxvf tomcat-connectors-1.2.31-src.tar.gz
cd tomcat-connectors-1.2.31-src/native/
./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk
make && make install
5. 配置httpd.conf 文件
vi /usr/local/apache2/conf/httpd.conf
添加
LoadModule jk_module modules/mod_jk.so
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
</IfModule>
6.创建并配置workers.properties文件
vi /usr/local/apache2/conf/workers.properties
worker.list=wlb , jkstatus
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
# Define preferred failover node for worker1
#worker.worker1.redirect=worker2
worker.worker2.port=8909
worker.worker2.host=localhost
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
# Disable worker2 for all requests except failover
#worker.worker2.activation=disabled
worker.wlb.type=lb
worker.wlb.balance_workers=worker1,worker2
worker.jkstatus.type=status
以上注释掉的两行如果开启,则worker2成为worker1的备用,在worker1不可用的情况下才会向worker2请求
7.创建并配置uriworkermap.properties
vi /usr/local/apache2/conf/uriworkermap.properties
/admin/*=wlb
/manager/*=wlb
/jsp-examples/*=wlb
/servlets-examples/*=wlb
/examples/*=wlb
/*.jsp=wlb
!/servlets-examples/*.jpeg=wlb
/jkmanager=jkstatus
!/*.gif=wlb
!/*.jpg=wlb
!/*.png=wlb
!/*.css=wlb
!/*.js=wlb
!/*.htm=wlb
!/*.html=wlb
8.编辑server.xml文件
vi /usr/local/tomcat/conf/server.xml
修改相关对应端口,如果在不同的机器上则不需要修改
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
9.复制tomcat下webapps下的文件到/usr/local/apache2/htdocs
cp –R /usr/local/tomcat1/webapps/* /usr/local/apache2/htdocs
10.启动tomcat 和httpd
/usr/local/tomcat1/bin/startup.sh
/usr/local/tomcat2/bin/startup.sh
/usr/local/apache2/bin/apachectl start
到这里负载均衡完成
配置集群
11.修改tomcat1 下的server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.15.124" port="4000" autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
12.修改tomcat2的server.xml文件
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.15.124" port="4001" autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
13.查看
netstat –ant
tcp 0 0 ::ffff:192.168.15.124:4000 :::* LISTEN
tcp 0 0 ::ffff:192.168.15.124:4001 :::* LISTEN
14.修改应用程序的web.xml文件
在</web-app> 之前加上<distributable/> 用于session 复制
vi /usr/local/tomcat2/webapps/examples/WEB-INF/web.xml
vi /usr/local/tomcat2/webapps/examples/WEB-INF/web.xml
vi /usr/local/apache2/htdocs/examples/WEB-INF/web.xml
<distributable/>
</web-app>
15.测试session 复制
打开http://192.168.15.124/examples/servlets/servlet/SessionExample
输入相关内容,然后关闭其中的正在连接的tomcat 连接到第二个tomcat 查看之前提交的内容是否还在
Sessions Example
Session ID: A45E7C637D98B3EBDEF052BEADF8E5F4.worker2 Created: Mon Jan 31 12:07:33 CST 2011Last Accessed: Mon Jan 31 12:09:26 CST 2011 The following data is in your session:
1 = 1
2 = 2
Sessions Example
Session ID: A45E7C637D98B3EBDEF052BEADF8E5F4.worker1 Created: Mon Jan 31 12:07:33 CST 2011Last Accessed: Mon Jan 31 12:10:09 CST 2011 The following data is in your session:
1 = 1
2 = 2
相关文档
http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
/usr/local/src/tomcat-connectors-1.2.31-src/conf/下的
httpd-jk.conf uriworkermap.properties workers.properties workers.properties.minimal
No comments:
Post a Comment