读书人

Apache httpd跟Tomcat结合配置web应用

发布时间: 2012-10-31 14:37:31 作者: rapoo

Apache httpd和Tomcat结合配置web应用 应对互联网用户大量请求
摘要:本文阐述如何配置使用apache作为前端web服务器,Tomcat作为后端服务器处理互联网用户的站点请求。

1、软件版本:
Tomcate 5.5;Apache Httpd 2.2;JDK 1.6;S6240本;WinXP Home Edition操作系统;

2、需求概况:
对外总共有5个服务:www.paoding.net, passport.paoding.net, office.paoding.net, zhidao.paoding.net, post.paoding.net 。这5个服务分别对应5个web应用。由apache httpd作为互联网接入服务器,在80端口接收对这5个服务的请求。apache httpd再将这5个请求分别对应到不同的后端web服务器(Tomcat)处理。这种架构具有多种好处,其中最大的一条是:能够将负载简单地按功能应用分担到不同的物理机器上。另外还有一些好处,比如便于升级、能够利用apache httpd处理静态文件快速的特点离补java web服务引擎对静态资源相对较弱的缺点,。。。。

3、先行步骤:
3.1 在C:\WINDOWS\system32\drivers\etc\host文件中,配置以上5个域名映射到本机即127.0.0.1,同时配置service域名,大致如下:
    127.0.0.1 www.paoding.net
    127.0.0.1 passport.paoding.net
    127.0.0.1 office.paoding.net
    127.0.0.1 zhidao.paoding.net
    127.0.0.1 post.paoding.net

    127.0.0.1 www.service.paoding.net
    127.0.0.1 passport.service.paoding.net
    127.0.0.1 office.service.paoding.net
    127.0.0.1 zhidao.service.paoding.net
    127.0.0.1 post.service.paoding.net

3.2 以passport为例,建立一个普通的web application,创建一个jsp,命名为index.jsp,jsp页面上输出“你好,这是passport系统”简单几个字

4、在tomcat中配置passport应用,并确认可用:
4.1 $catalina_home/confi/server.xml文件中,增加Host元素,如下内容:

<Host name="passport.service.paoding.net" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>

4.2 $catalina_home/conf/Catalina下创建passport.service.paoding.net目录,并在这个目下下创建名为ROOT.xml的文件,文件内容如下:

<Context docBase="E:/paoding.net/workspace/Passport/WebContent"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>

docBase具体配置路径由你的web application路径确定,应根据你的情况进行调整。

4.3 在浏览器访问:http://passport.service.paoding.net:8080/index.jsp,确认正确浏览到该页面。成功后不要关闭Tomcat服务器

5、配置Apache httpd:
5.1 找到apach/conf/httpd.conf文件,确认以下这些文字行前面没有"#"注释号:

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.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

5.2 增加VirtualHost元素,如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName passport.paoding.net
ProxyIOBufferSize 8192
ProxyRequests Off
ProxyVia Full
ProxyPass / http://passport.service.paoding.net:8080/ smax=5 max=20 ttl=120 retry=300
</VirtualHost>

5.3 在浏览器中访问http://passport.paoding.net/index.jsp,确认输出的内容与在Tomcat输出内容一致。如果你看到这个访问能够成功,则表示这次试验完全成功。

6 总结

其他的服务配置类似如此。具体网站时,会配置多个服务器,可以将不同的应用分布在不同的服务器当中。[也就是变更host文件的地址映射]
1 楼 galaxystar 2007-02-04 你这边只是对不同二级域名做了一个代理的重定向,即针对不同的应用进行了分离,没有真正起到负载均衡的作用!
如果passport.paoding.net域名的流量非常大,本身tomcat还是需要承受相同量的load!
而且apache属于应用层load balance,比起二层,三层,四层的均衡负载,性能低很多!
如果各个域名都是一套系统,不如根据请求进行分发!让tomcat集群可以跨应用处理!这样高流量应用分布到5台中间服务器上,效率可以高很多!
2 楼 Qieqie 2007-02-04 galaxystar 写道你这边只是对不同二级域名做了一个代理的重定向,即针对不同的应用进行了分离,没有真正起到负载均衡的作用!
如果passport.paoding.net域名的流量非常大,本身tomcat还是需要承受相同量的load!
而且apache属于应用层load balance,比起二层,三层,四层的均衡负载,性能低很多!
如果各个域名都是一套系统,不如根据请求进行分发!让tomcat集群可以跨应用处理!这样高流量应用分布到5台中间服务器上,效率可以高很多!


超大型网站很多都要做特别处理,没有一成不变的通用套路。在负载方面不仅仅要做应用方面的分离,还要把同样的应用部署在不同的物理机器上,通过共享架构实现(可能使用hash将同类型数据存放在不同的共享服务器中,参考memcached)数据共享,或失效通知的方式达到数据一致。

但是,利用apache 或lighttpd等和tomcate/resin之类的结合也是很常见的,能够大大提升性能的,以及进行负载分担,做起来非常简单,“性价比”高。大多数互联网站均可以采用类似的技术。

当然对于超大型,偶瞄了楼上的文章,列出一些参考目录如下(原创的?ZT?):


1、使用负载均衡技术建设高负载的网络站点
2、负载均衡技术全攻略
3、讨论:负载均衡服务器宕机怎么办?!


对了,楼上的,你具体使用什么技术分发请求? 3 楼 galaxystar 2007-02-04 基于IP分发,LVS应该比较流行的!
均衡负载里,我认为缓存动态内容也是提升高负载的诀窍之一!
我使用ESI,基于squid解析esi,做到缓存动态内容!
其中,缓存载体,我也喜欢memcache!

我的那些文章是从CSDN转的!怕收藏链接,以后找不到了,直接copy过来了,赖得加转载!呵呵! 4 楼 frankiehuang 2007-02-07 Windows xp Home?大量请求?

JDK 6.0也过于新,用于生产系统?

我看你的架构是个实验系统吧?
5 楼 Qieqie 2007-02-07 frankiehuang 写道Windows xp Home?大量请求?

JDK 6.0也过于新,用于生产系统?

我看你的架构是个实验系统吧?



示例性给出一个东西,同时告知示运行的环境,应该是一种起码的道德。
可以把xp home换成你喜欢的操作系统,jdk换成你认为ok的版本,对本帖子内容没有任何影响。

这种架构不是什么实验系统,实实在在的在现实中普遍被使用。
[几百万用户的网站使用类似这种架构用的好好的]
[不一定是apache,同时apache也不是最好的;同时前后服务器之间连接还有其他文章可做]

了解高效的Web服务器和java web服务器的各自优缺点,以及帖子中阐述的一些其他特性,你就知道这是一种不错选择, not 纸面谈兵

JDK6.0为什么不能用于“生产系统”,给点具体的理由? 或者请你给出升级jdk时你遇到的具体困难,这里肯定有人帮你搞定。
6 楼 kevinliang 2007-05-26 能不能给的全一点啊,你说的有点粗糙,对于刚接触的人,配置很难成功,希望能写的全点,我按照这个配置,不成功啊,还有要注意哪些,谢谢了! 7 楼 dingyuan 2007-05-26 这5个网站session如何共享呢? 8 楼 chenqj 2007-05-27 jdk 6.0还是很稳定的吧,我们已经用了好几个月了。
7x24小时在线系统,千万级访问量,没因为jdk发生过什么问题 9 楼 chenqj 2007-05-27 不明白你在应用前面放一个apache干嘛用
不同应用的请求直接访问不同的服务器不就行了
流量大的时候,一个apache是无法满足性能需求的
另外一个慢的应用就可能使所有应用不能访问
也许是我太笨,没看懂楼主的方案,呵呵 10 楼 ak478288 2007-06-08 楼主的方案适合根据机器的性能进行配置,把性能影响不大的应用放到性能差一点的机器上。在一定程度上能缓解一小部分压力。
如果要真正解决压力问题的话,这样做是不行的 11 楼 xuehongliang 2007-06-08 楼主给出的方案不错,不过对这方面了解的不多.
如果能在详细一些可以对初学者有更大的帮助,其中不明白的是在应用服务器
之上加上Apache怎么样达到大用户量的请求的呢?

读书人网 >互联网

热点推荐