日期:2014-05-16  浏览次数:21148 次

Tomcat与apache的连接

上次做的项目,使用的是apache做为前台服务器,接收浏览器发送过来的请求,通过jk连接转发给后台的tomcat处理。
一直不明白布署的那位仁兄为什么要这么做。我曾经问过这位仁兄,其说看过一些文章,说tomcat对于静态页面的处理效率不高,而apache的处理效率比较高,所以就这么做。而jk连接器的配置就是从网上抄了一个过来。
原来服务器一直相安无事,这个系统是给国内的一个比较有名的投资公司做的。前几天,对方突然要求我们开发一个相册的功能,来处理集体活动的照片。
于是按照要求写了一个。布署上去后,前一天倒还无事,原来设计中是一页只显示了12张照片的缩略图。后来对方要求多加一点,于是改到了48,结果问题来了,经常是莫名其妙的,服务器就处理不了请求了,查看了一个程序,确认不是程序的问题。
最让人觉得费解的是居然没有发现服务器有Crash的日志,也就是说服务器本身并没有crash掉。于是不解。郁闷了半天,查找了服务器上是否有病毒,(前一次就是有病毒,导致服务器效率奇低,痛恨使用Windows来布署服务器),没有发现系统进程中有可疑的进程。
于是打电话与那位仁兄交流,那位仁兄的意见还是将静态的东西交由Apache来处理,说可以将相册的图片的显示交由静态服务器来做。
在详细询问了jk的配置的时候,突然发现了对于tomcat的最大连接数配置的是150,也就是说tomcat同时能够处理150个请求,而jk的连接数也只有150,也就是说jk也只可以转发150个讨还到tomcat,这一点倒是吻合。前台的apache的倒是可以处理挺多的请求的。于是细问了这个仁兄一句, 为何这样配置?仁兄的答案是都是这样配置的。
于是细一想,不对啊,我现在如果请求一个相册中的照片,即打开一个相册,我至少就会提交了1+48=49个请求,如果再同时多点击几次,不是一下就到达了150吗?难怪会出现不响应的现象。一想,应当是apache接收了请求后,想通过jk交由tomcat可是后二者的连接数都已经满了,不处理完之前无法处理,所以就造成了这种现象出现了。
于是马上加班改,将图片交由前台的apache直接管理,幸好是图片没有权限的控制,是大家都能看的。不会出现权限的问题。

最后得出一个结论,在配置这些之前,一定要搞清楚原理啊。盲目的抄了网上的东西,或者是照本宣科,套用一句俗气的电影台词:“出来混,早晚都要还的!”

1 楼 lijie250 2007-05-07  
其实我对这个问题也一直没想通,总感觉这种连接的效率不高,其实APACHE和TOMCAT配合还有其他方式,我在一本书上看到了比这个好的方法!不过今天看了你的文章还是学了点,谢谢!
2 楼 quaff 2007-05-08  
<br/>
<strong>jimmy.shine 写道:</strong><br/>
<div class='quote_div'>
<p>上次做的项目,使用的是apache做为前台服务器,接收浏览器发送过来的请求,通过jk连接转发给后台的tomcat处理。<br/>
一直不明白布署的那位仁兄为什么要这么做。我曾经问过这位仁兄,其说看过一些文章,说tomcat对于静态页面的处理效率不高,而apache的处理效率比较高,所以就这么做。而jk连接器的配置就是从网上抄了一个过来。<br/>
原来服务器一直相安无事,这个系统是给国内的一个比较有名的投资公司做的。前几天,对方突然要求我们开发一个相册的功能,来处理集体活动的照片。<br/>
于是按照要求写了一个。布署上去后,前一天倒还无事,原来设计中是一页只显示了12张照片的缩略图。后来对方要求多加一点,于是改到了48,结果问题来了,经常是莫名其妙的,服务器就处理不了请求了,查看了一个程序,确认不是程序的问题。<br/>
最让人觉得费解的是居然没有发现服务器有Crash的日志,也就是说服务器本身并没有crash掉。于是不解。郁闷了半天,查找了服务器上是否有病毒,(前一次就是有病毒,导致服务器效率奇低,痛恨使用Windows来布署服务器),没有发现系统进程中有可疑的进程。<br/>
于是打电话与那位仁兄交流,那位仁兄的意见还是将静态的东西交由Apache来处理,说可以将相册的图片的显示交由静态服务器来做。<br/>
在详细询问了jk的配置的时候,突然发现了对于tomcat的最大连接数配置的是150,也就是说tomcat同时能够处理150个请求,而jk的连接数也只有150,也就是说jk也只可以转发150个讨还到tomcat,这一点倒是吻合。前台的apache的倒是可以处理挺多的请求的。于是细问了这个仁兄一句, 为何这样配置?仁兄的答案是都是这样配置的。<br/>
于是细一想,不对啊,我现在如果请求一个相册中的照片,即打开一个相册,我至少就会提交了1+48=49个请求,如果再同时多点击几次,不是一下就到达了150吗?难怪会出现不响应的现象。一想,应当是apache接收了请求后,想通过jk交由tomcat可是后二者的连接数都已经满了,不处理完之前无法处理,所以就造成了这种现象出现了。<br/>
于是马上加班改,将图片交由前台的apache直接管理,幸好是图片没有权限的控制,是大家都能看的。不会出现权限的问题。<br/>
<br/>
最后得出一个结论,在配置这些之前,一定要搞清楚原理啊。盲目的抄了网上的东西,或者是照本宣科,套用一句俗气的电影台词:“出来混,早晚都要还的!”</p>
</div>
<br/>
如果图片有权限问题怎么处理?比如有图片a.jpg,b.jpg,c.jpg,其中a和b是公开的,c是要验证权限的,他们访问的url必须一致/pic/a.jpg, /pic/b.jpg, /pic/c.jpg,我希望a和b是交给apache来处理,c让tomcat来处理,不知道有没有办法让apache在找不到c.jpg的情况下再转发给tomcat?
3 楼 jimmy.shine 2007-05-08  
回quaff
apache本身是一个表态的服务器,是无法处理权限的问题的,如果是5.5以上的tomcat服务器,本身将静态的显示交由tomcat去处理也是可以的,因为5.5已经引入了新的机制,在处理静态图片的效率高于5.0 70%-80%;
所有的动态权限的处理都逃不开要实施一个拦截过程。
4 楼 quaff 2007-05-08  
jimmy.shine 写道
回quaff
apache本身是一个表态的服务器,是无法处理权限的问题的,如果是5.5以上的tomcat服务器,本身将静态的显示交由tomcat去处理也是可以的,因为5.5已经引入了新的机制,在处理静态图片的效率高于5.0 70%-80%;
所有的动态权限的处理都逃不开要实施一个拦截过程。

我知道apache是无法处理权限问题,我想这样,把a和b放到pic文件夹,这个文件夹通过apache来访问,c不放到这个文件夹里面,但是访问的路径是一样的,也是/pic/c.jpg,这个要交给tomcat来处理,最终想要的就是同一个pattern下的url有的是apache服务有的是tomcat服务,不知道怎么能做到这样
5 楼 jimmy.shine 2007-05-09  
回quaff:
明白你所说的实现方式。其实apache与tomcat服务器通过jk连接的道理很简单,就