论坛首页 Java企业应用论坛

Tomcat与apache的连接

浏览 6408 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-06  

上次做的项目,使用的是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直接管理,幸好是图片没有权限的控制,是大家都能看的。不会出现权限的问题。

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

   发表时间:2007-05-07  
其实我对这个问题也一直没想通,总感觉这种连接的效率不高,其实APACHE和TOMCAT配合还有其他方式,我在一本书上看到了比这个好的方法!不过今天看了你的文章还是学了点,谢谢!
0 请登录后投票
   发表时间:2007-05-08  

jimmy.shine 写道:

上次做的项目,使用的是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直接管理,幸好是图片没有权限的控制,是大家都能看的。不会出现权限的问题。

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


如果图片有权限问题怎么处理?比如有图片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?
0 请登录后投票
   发表时间:2007-05-08  
回quaff
apache本身是一个表态的服务器,是无法处理权限的问题的,如果是5.5以上的tomcat服务器,本身将静态的显示交由tomcat去处理也是可以的,因为5.5已经引入了新的机制,在处理静态图片的效率高于5.0 70%-80%;
所有的动态权限的处理都逃不开要实施一个拦截过程。
0 请登录后投票
   发表时间: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服务,不知道怎么能做到这样
0 请登录后投票
   发表时间:2007-05-09  
回quaff:
明白你所说的实现方式。其实apache与tomcat服务器通过jk连接的道理很简单,就是jk作为一个分发器,根据定义的规则将部分请求发送到tomcat服务器。
而目前就我理解来说,匹配方式就是通过对于请求的url进行解析。说穿了,就是解析字符串,要想解决你所说的权限的问题,就要如何在url的匹配解析层次上进行分发。
0 请登录后投票
   发表时间:2007-05-09  
jimmy.shine 写道
回quaff:
明白你所说的实现方式。其实apache与tomcat服务器通过jk连接的道理很简单,就是jk作为一个分发器,根据定义的规则将部分请求发送到tomcat服务器。
而目前就我理解来说,匹配方式就是通过对于请求的url进行解析。说穿了,就是解析字符串,要想解决你所说的权限的问题,就要如何在url的匹配解析层次上进行分发。

现在要的就是url的pattern是一样的,所以利用url的匹配是做不到的,一般情况下apache找不到资源就是返回404,不知道有没有什么方法可以让apache找不到这个资源的时候转发给tomcat
0 请登录后投票
   发表时间:2007-05-09  
回quaff:
如果是如你所想,也是可以的,使用ajax的方式去处理,不过这与apache就没有任何关系了,只是在浏览器没有显示出真正的url而已。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics