Apache和Tomcat整合
2014-02-16 10:50
330 查看
手上的需求是要通过80端口进来apache,然后分发到不同的服务器程序,本身有php的程序在apache上跑着,而是用的橙云主机又不提供其他web接口,所以需要整合apache和tomcat
AJP基本介绍:
AJP是Apache提供的完成与其它服务器通讯的一种协议。
使用这种协议,具有更高的性能,因为它采用的是二进制传输。比HTTP的文本传输要有更高的效率。
在Apache中要使用mod_proxy和mod_proxy_ajp,在Tomcat中则要开启ajp服务。 http://www.cnblogs.com/zjstar12/archive/2012/08/11/2633623.html
Apache和Tomcat整合
我这次使用的是AJP方式进行的整合
整合过程中发现几个问题:
1 linux下的apache2的目录组织形式和windows下有很大差别 http://blog.csdn.net/jibcy/article/details/8060651 比如加载module的代码实现方式是通过apache2.conf中include mods-enabled目录下所有软连接文件,而这个目录下的软连接文件分别指向mods-available目录下的各个文件
我们这里需要打开对proxy_ajp的支持,所以在mods-enabled下面创建了指向proxy_ajp的软链接,重启apache apachectl -k graceful
root@S699922:/etc# apachectl -k graceful
apache2: Syntax error on line 210 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/proxy_ajp.load: Cannot load /usr/lib/apache2/modules/mod_proxy_ajp.so into server: /usr/lib/apache2/modules/mod_proxy_ajp.so: undefined symbol:
proxy_module
Action '-k graceful' failed.
这里打开.../mods-available/proxy_ajp.load 文件会发现上面说这个模块依赖于proxy模块,所以proxy模块也需要加载进来才能正常工作。
2 虚拟主机配置
由于我这里servername是和另外一个php的servername重复的,区别是路径区别/ajp会访问到我的tomcat服务器,所以需要把到/ajp的访问设置放到前面才行,否则会被php的服务程序拦截。
另外这里使用的是8009端口,在tomcat的server.xml中本身有8009 AJP端口设置,我一开始尝试8080,没有访问成功。
下面是httpd.conf文件的内容
#ServerName localhost:80
NameVirtualHost localhost:80
<VirtualHost *:80>
ProxyPass /ajp ajp://127.0.0.1:8009/
ProxyPassReverse /ajp ajp://127.0.0.1:8009/
ServerName yiwa.890523.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/"
ServerName www.91yiwa.com
ErrorDocument 404 /404.html
<Directory / >
Options FollowSymLinks
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
DirectoryIndex index.html index.php
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/Yiwa/"
ServerName yiwa.890523.com
ErrorDocument 404 /404.html
<Directory / >
Options FollowSymLinks
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
DirectoryIndex index.html index.php
</VirtualHost>
http://blog.sina.com.cn/s/blog_5535e28201008hlx.html http://hi.baidu.com/tedzhangzhe/item/dd3edd14d6c55df9746a84cb
通常都是通过JK_MOD来整合Apache和Tomcat,但是Apache2.2版本以上整合Tomcat可以直接通过AJP_PROXY来完成,很方便。下面把几种方式都简单讲讲。
假设一个Apache,两个Tomcat容器,访问 a.hackang.cn 和 b.hackang.cn 分别对应 tomcata 和 tomcatb 的应用
第一种方式:JK_PROXY
安装好Apache和Tomcat,下载mod_jk-1.2.26-httpd-2.2.4.so (2.2.4对应着Apache版本)
将mod_jk-1.2.26-httpd-2.2.4.so 放到Apache安装目录的modules文件夹下。
在Apache安装目录的conf文件夹创建workers.properties配置文件,内容如下:
#下面是Tomcat实例列表
worker.list=tomcata,tomcatb
#tomcata实例配置
worker.tomcata.host=127.0.0.1
worker.tomcata.port=8009
worker.tomcata.type=ajp13
#tomcatb实例配置
worker.tomcatb.host=127.0.0.1
worker.tomcatb.port=9009
worker.tomcatb.type=ajp13
编辑apache配置文件httpd.conf,在文件末尾加上以下内容:
#以下为tomcat集成配置部分
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
#如果机器有多个IP地址请务必使用*号
NameVirtualHost *:80
#a.hackang.cn虚拟站点
<VirtualHost *:80>
ServerName a.hackang.cn
JkMount /*.* tomcata
JkMount /* tomcata
DirectoryIndex index.jsp
</VirtualHost>
#b.hackang.cn虚拟站点
<VirtualHost *:80>
ServerName b.hackang.cn
JkMount /*.* tomcatb
DirectoryIndex index.jsp
</VirtualHost>
下面是Tomcat的配置,很重要。
tomcata可以使用默认配置,如果想访问 a.hackang.cn直接显示某应用的首页,可在tomcata的配置文件server.xml里面的host节点间加上
<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true"
charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" displayName="a.hackang.cn"docBase="E:\myweb\a"
mapperClass="org.apache.catalina.core.StandardContextMapper" path="" privileged="false" reloadable="false" swallowOutput="false" useNaming="true"
wrapperClass="org.apache.catalina.core.StandardWrapper">
</Context>
docBase指向的你应用所在的文件夹,不能将此应用部署到tomcata的webapps文件夹中。否则就有两个应用了,一个是根访问路径,一个是根访问路径+应用名了。
tomcatb的配置要稍加修改,修改 conf/server.xml文件
<Server port="8005" shutdown="SHUTDOWN">将此处的端口号改掉,不能与tomcata的相同,比如可以改成 9005
修改默认的8080端口为9090,修改后如下:
<Connector port="9090" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
修改端口号为8009的Connector
修改前为:
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
修改后:
<Connector port="9009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
此处的9009跟workers.properties文件中tomcatb的端口号是一致的。
如果也想访问 b.hackang.cn时直接显示应用b,配置方法同a,以上已经提及,只需将docBase="E:\myweb\a" 改成 docBase="E:\myweb\b"即可
最后编辑C:\WINDOWS\system32\drivers\etc\hosts文件,在最后加上两个映射
127.0.0.1 a.hackang.cn
127.0.0.1 b.hackang.cn
至此,配置就结束了,可以用Apache的Test Configuration命令测试一下配置文件,如果没有问题,启动Apache,再分别启动两个Tomcat就ok了
第二种方式配置: ajp
apache2.2以上版本,无需使用jk_mod来集成tomcat,直接使用ajp,很方便。
修改apache配置文件httpd.conf
启用mod_proxy_ajp
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
把这两行前面的#去掉即可
然后在末尾加上
<VirtualHost *:80>
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/
ServerName a.hackang.cn
</VirtualHost>
<VirtualHost *:80>
ProxyPass / ajp://127.0.0.1:9009/
ProxyPassReverse / ajp://127.0.0.1:9009/
ServerName b.hackang.cn
</VirtualHost>
搞定!!!方便吧,我现在用的就是这种。
第三种方式
第三种方式其实跟第二种差不多,只不过用的是http端口
<VirtualHost *:80>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName a.hackang.cn
</VirtualHost>
<VirtualHost *:80>
ProxyPass / http://127.0.0.1:9090/
ProxyPassReverse / http://127.0.0.1:9090/
ServerName b.hackang.cn
</VirtualHost>
此处的9090跟tomcatb中配置的http端口一致
到此Apache整合Tomcat全部结束,若要加强tomcat处理静态资源的能力,可以启用APR服务。
AJP基本介绍:
AJP是Apache提供的完成与其它服务器通讯的一种协议。
使用这种协议,具有更高的性能,因为它采用的是二进制传输。比HTTP的文本传输要有更高的效率。
在Apache中要使用mod_proxy和mod_proxy_ajp,在Tomcat中则要开启ajp服务。 http://www.cnblogs.com/zjstar12/archive/2012/08/11/2633623.html
Apache和Tomcat整合
我这次使用的是AJP方式进行的整合
整合过程中发现几个问题:
1 linux下的apache2的目录组织形式和windows下有很大差别 http://blog.csdn.net/jibcy/article/details/8060651 比如加载module的代码实现方式是通过apache2.conf中include mods-enabled目录下所有软连接文件,而这个目录下的软连接文件分别指向mods-available目录下的各个文件
我们这里需要打开对proxy_ajp的支持,所以在mods-enabled下面创建了指向proxy_ajp的软链接,重启apache apachectl -k graceful
root@S699922:/etc# apachectl -k graceful
apache2: Syntax error on line 210 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/proxy_ajp.load: Cannot load /usr/lib/apache2/modules/mod_proxy_ajp.so into server: /usr/lib/apache2/modules/mod_proxy_ajp.so: undefined symbol:
proxy_module
Action '-k graceful' failed.
这里打开.../mods-available/proxy_ajp.load 文件会发现上面说这个模块依赖于proxy模块,所以proxy模块也需要加载进来才能正常工作。
2 虚拟主机配置
由于我这里servername是和另外一个php的servername重复的,区别是路径区别/ajp会访问到我的tomcat服务器,所以需要把到/ajp的访问设置放到前面才行,否则会被php的服务程序拦截。
另外这里使用的是8009端口,在tomcat的server.xml中本身有8009 AJP端口设置,我一开始尝试8080,没有访问成功。
下面是httpd.conf文件的内容
#ServerName localhost:80
NameVirtualHost localhost:80
<VirtualHost *:80>
ProxyPass /ajp ajp://127.0.0.1:8009/
ProxyPassReverse /ajp ajp://127.0.0.1:8009/
ServerName yiwa.890523.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/"
ServerName www.91yiwa.com
ErrorDocument 404 /404.html
<Directory / >
Options FollowSymLinks
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
DirectoryIndex index.html index.php
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/Yiwa/"
ServerName yiwa.890523.com
ErrorDocument 404 /404.html
<Directory / >
Options FollowSymLinks
AllowOverride all
Order Allow,Deny
Allow from all
</Directory>
DirectoryIndex index.html index.php
</VirtualHost>
http://blog.sina.com.cn/s/blog_5535e28201008hlx.html http://hi.baidu.com/tedzhangzhe/item/dd3edd14d6c55df9746a84cb
Apache 2.2.4整合Tomcat 6.0.16三种方式的详细配置过程
通常都是通过JK_MOD来整合Apache和Tomcat,但是Apache2.2版本以上整合Tomcat可以直接通过AJP_PROXY来完成,很方便。下面把几种方式都简单讲讲。假设一个Apache,两个Tomcat容器,访问 a.hackang.cn 和 b.hackang.cn 分别对应 tomcata 和 tomcatb 的应用
第一种方式:JK_PROXY
安装好Apache和Tomcat,下载mod_jk-1.2.26-httpd-2.2.4.so (2.2.4对应着Apache版本)
将mod_jk-1.2.26-httpd-2.2.4.so 放到Apache安装目录的modules文件夹下。
在Apache安装目录的conf文件夹创建workers.properties配置文件,内容如下:
#下面是Tomcat实例列表
worker.list=tomcata,tomcatb
#tomcata实例配置
worker.tomcata.host=127.0.0.1
worker.tomcata.port=8009
worker.tomcata.type=ajp13
#tomcatb实例配置
worker.tomcatb.host=127.0.0.1
worker.tomcatb.port=9009
worker.tomcatb.type=ajp13
编辑apache配置文件httpd.conf,在文件末尾加上以下内容:
#以下为tomcat集成配置部分
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
#如果机器有多个IP地址请务必使用*号
NameVirtualHost *:80
#a.hackang.cn虚拟站点
<VirtualHost *:80>
ServerName a.hackang.cn
JkMount /*.* tomcata
JkMount /* tomcata
DirectoryIndex index.jsp
</VirtualHost>
#b.hackang.cn虚拟站点
<VirtualHost *:80>
ServerName b.hackang.cn
JkMount /*.* tomcatb
DirectoryIndex index.jsp
</VirtualHost>
下面是Tomcat的配置,很重要。
tomcata可以使用默认配置,如果想访问 a.hackang.cn直接显示某应用的首页,可在tomcata的配置文件server.xml里面的host节点间加上
<Context className="org.apache.catalina.core.StandardContext" cachingAllowed="true"
charsetMapperClass="org.apache.catalina.util.CharsetMapper" cookies="true" crossContext="false" debug="0" displayName="a.hackang.cn"docBase="E:\myweb\a"
mapperClass="org.apache.catalina.core.StandardContextMapper" path="" privileged="false" reloadable="false" swallowOutput="false" useNaming="true"
wrapperClass="org.apache.catalina.core.StandardWrapper">
</Context>
docBase指向的你应用所在的文件夹,不能将此应用部署到tomcata的webapps文件夹中。否则就有两个应用了,一个是根访问路径,一个是根访问路径+应用名了。
tomcatb的配置要稍加修改,修改 conf/server.xml文件
<Server port="8005" shutdown="SHUTDOWN">将此处的端口号改掉,不能与tomcata的相同,比如可以改成 9005
修改默认的8080端口为9090,修改后如下:
<Connector port="9090" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
修改端口号为8009的Connector
修改前为:
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
修改后:
<Connector port="9009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
此处的9009跟workers.properties文件中tomcatb的端口号是一致的。
如果也想访问 b.hackang.cn时直接显示应用b,配置方法同a,以上已经提及,只需将docBase="E:\myweb\a" 改成 docBase="E:\myweb\b"即可
最后编辑C:\WINDOWS\system32\drivers\etc\hosts文件,在最后加上两个映射
127.0.0.1 a.hackang.cn
127.0.0.1 b.hackang.cn
至此,配置就结束了,可以用Apache的Test Configuration命令测试一下配置文件,如果没有问题,启动Apache,再分别启动两个Tomcat就ok了
第二种方式配置: ajp
apache2.2以上版本,无需使用jk_mod来集成tomcat,直接使用ajp,很方便。
修改apache配置文件httpd.conf
启用mod_proxy_ajp
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
把这两行前面的#去掉即可
然后在末尾加上
<VirtualHost *:80>
ProxyPass / ajp://127.0.0.1:8009/
ProxyPassReverse / ajp://127.0.0.1:8009/
ServerName a.hackang.cn
</VirtualHost>
<VirtualHost *:80>
ProxyPass / ajp://127.0.0.1:9009/
ProxyPassReverse / ajp://127.0.0.1:9009/
ServerName b.hackang.cn
</VirtualHost>
搞定!!!方便吧,我现在用的就是这种。
第三种方式
第三种方式其实跟第二种差不多,只不过用的是http端口
<VirtualHost *:80>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName a.hackang.cn
</VirtualHost>
<VirtualHost *:80>
ProxyPass / http://127.0.0.1:9090/
ProxyPassReverse / http://127.0.0.1:9090/
ServerName b.hackang.cn
</VirtualHost>
此处的9090跟tomcatb中配置的http端口一致
到此Apache整合Tomcat全部结束,若要加强tomcat处理静态资源的能力,可以启用APR服务。
相关文章推荐
- Apache与tomcat的整合
- Apache+Tomcat整合后碰到的问题
- FreeBSD 最小化安装 +diablo-jdk +Apache 与 Tomcat 整合 !
- Apache整合tomcat
- Apache+tomcat的整合
- RHEL6下Apache与Tomcat整合
- Apache与Tomcat整合
- Apache + Tomcat 整合
- Tomcat与Apache整合(mod_jk)
- 在httpd.conf中使用反向代理整合apache与tomcat
- Apache 2.24 整合Tomcat 6.39
- CentOS7 apache与tomcat整合实现静态动态网页分离
- Apache HTTP Server 与 Tomcat 整合的三种方式 ZT
- apache+jdk+tomcat整合for suse11
- apache+tomcat 整合
- Apache+tomcat的整合
- Windows2000 server下的Apache2.0.47与Tomcat4.1.27的整合配置方法
- WinXP Pro 上整合 Apache 2.0.48 + Tomcat 5.0.19
- Apache与Tomcat整合
- Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结