apache代理tomcat

给用户做了个网站,运行在tomcat6上,又给用户挂了个php的论坛,所以就把apache放在前面,除论坛外,其它都转交tomcat来处理。

 

一、初始配置

 

没有使用第三方的代理程序,直接使用apache自己实现的代理,在apache的httpd.conf中作了如下配置:

1、加载代理相关的动态库:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

2、除论坛外,其它访问都转向tomcat,开始,我使用的是ajp:
ProxyPass /bbs !
ProxyPass / ajp://localhost:8009/
系统运行基本正常,但是有时会报如下错误:
-------------------------------------------------------------------------
2011-3-17 2:14:07 org.apache.jk.core.MsgContext action
警告: Error sending end packet
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:531)
at org.apache.jk.common.JkInputStream.endMessage(JkInputStream.java:121)
at org.apache.jk.core.MsgContext.action(MsgContext.java:301)
at org.apache.coyote.Response.action(Response.java:183)
at org.apache.coyote.Response.finish(Response.java:305)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:195)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)
2011-3-17 2:14:07 org.apache.jk.common.ChannelSocket processConnection
警告: processCallbacks status 2
-----------------------------------------------------------------------------
经测试发现,我如果拼命按F5刷新页面,后台就容易报这种错误。
二、改进
作如下配置,不用ajp协议,换用http协议来访问,就不会报上面这个错误了:
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyPass / http://localhost:8080/
但这时,出现了另一个问题。当我访问“http://网站域名/index.action”时,正常;访问“http://网站域名”时,浏览器地址直接转向了“http://localhost:8080/index.action”,本地当然访问不了。使用ajp协议时,不会出现这个问题,换用http协议时就出现这个问题。
我网站首页的访问路径是index.action,但我没有做相关配置,当访问“http://网站域名”时,实际上是访问“http://网站域名/index.jsp”,在index.jsp中,通过response.sendRedirect("index.action");来转向。看来,AJP协议没有问题,HTTP协议,就把浏览器转向localhost了。
三、问题解决
1、方法一:修改index.jsp中的转向方式,采用如下方法就可以:
response.setStatus(301,"Moved Permanently");
response.addHeader("Location", request.getContextPath()+"/index.action");
2、方法二:修改web.xml,把welcome-file设置为index.action,然后在应用的根目录下,建立一个空文件,名字为index.action。
觉得方法二应该比方法一重定向要好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值