用apache代理实现整合多个tomcat 推荐
2009-11-11 09:16
399 查看
要求:
运行多个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里面,取消下面四行的注释:
制作各自的虚拟主机
若需要内部端口整合
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
源码编译安装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>
编辑第二个tomcat配置文件,端口修改为8081
<Engine name="Catalina" defaultHost=localhost>
<
注意:网站文件放在tomcat安装文件目录的默认ROOT目录
localhost这里可以不用修改,因为只有一个网站,我们就可以不用域名代替
附出错分析:
如果编译安装没有编辑代理模块的解决办法
方法如下:
编译的时候要打开WITH_PROXY_MODULES选项,但我又不想重新安装apache,所以使用以下步骤达到此目的。
1、重新编译带有proxy模块的apache,但不安装。
进入源代码目录
#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
这样就编译进了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
#
已经添加进了apache,现在需要重新启动apache,就可以正常配置代理方式了
#配置(prefix是安装路径,enable-mods-shared=all表示编译配置所有so文件)
./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了
附:
tomcat 404页面设置方法在web.xml里面加入
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
添加404.jsp页面文件,重新启动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/
现在我们编辑第一个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=="[b]/www/cba.com/htdocs[/b]" 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>
编辑第二个tomcat配置文件,端口修改为8081
<Engine name="Catalina" defaultHost=localhost>
<
注意:网站文件放在tomcat安装文件目录的默认ROOT目录
localhost这里可以不用修改,因为只有一个网站,我们就可以不用域名代替
附出错分析:
如果编译安装没有编辑代理模块的解决办法
方法如下:
编译的时候要打开WITH_PROXY_MODULES选项,但我又不想重新安装apache,所以使用以下步骤达到此目的。
1、重新编译带有proxy模块的apache,但不安装。
进入源代码目录
#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
这样就编译进了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
#
已经添加进了apache,现在需要重新启动apache,就可以正常配置代理方式了
#配置(prefix是安装路径,enable-mods-shared=all表示编译配置所有so文件)
./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了
附:
tomcat 404页面设置方法在web.xml里面加入
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
添加404.jsp页面文件,重新启动tomcat可生效
相关文章推荐
- 用apache代理实现整合多个tomcat
- windows下实现wamp与tomcat环境整合 推荐
- 最新整合maven+SSM+Tomcat 实现注册登录
- Apache-Tomcat的整合操作的英文介绍--用mod_jk2.so实现
- Nginx+Tomcat实现反向代理与动静分离 推荐
- tengine整合tomcat加上memcached实现高并发、负载均衡、可扩展架构接
- 实现Nginx通过反代对Java环境和Perl环境的支持(附Tomcat) 推荐
- Apache2.2以上版本与Tomcat整合配置及负载均衡实现
- 利用systemd 实现 tomcat 多实例 推荐
- linux下利用mod-jk实现apache和tomcat整合
- apache与tomcat及整合实现负载均衡及集群(转)
- tomcat+nginx+redis实现均衡负载、session共享---(推荐)
- 用jk整合Apache和tomcat实现负载均衡
- Nginx+tomcat实现session共享 推荐
- Apache与Tomcat整合实现动静分离与负载均衡的配置实践
- springboot整合tomcat自带的websocket实现在线聊天及象棋网页对战功能
- 整合Apache和tomcat,实现端口转发
- 设置tomcat6.0的虚拟目录(与eclipse手动整合,实现热部署)
- 用jk整合Apache和tomcat实现负载均衡
- 整合Tomcat和Nginx实现动静态负载均衡