Tomcatredirect问题 – 主机名后加“/” – 帮助请

所有,

我们遇到了一个奇怪的问题。

我们有Apache2.2.3前端的Tomcat 6.0.24。 我们有一个VirtualHost服务端口80和ServerAlias。 Apache只是将“/”移交给Tomcat的负载平衡器。

——— httpd.conf片段:——–

<VirtualHost *:80> ServerName wwwprod.lsa.umich.edu ServerAlias wwwprod www www.lsa.umich.edu Redirect / balancer://dsmdelivery/ ProxyPass / balancer://dsmdelivery/ ProxyPassReverse / balancer://dsmdelivery/ TraceEnable Off </VirtualHost> 

————结束httpd.conf片段—-

Tomcat正在增加一个额外的“/”,因为它为其中一个服务器别名创build了一个302响应,而当URI没有尾随“/”时,而不是其他的在下面的curl输出。

所以你会注意到:

http://www.lsa.umich.edu/polisci <==返回302redirect响应消息的位置标题中的“//”

http://wwwprod.lsa.umich.edu/polisci <==在302的位置标题中没有“//”

————–两个虚拟主机的curl输出:————-

 $ curl -v http://wwwprod.lsa.umich.edu/polisci * About to connect() to wwwprod.lsa.umich.edu port 80 (#0) * Trying 141.211.177.191... connected * Connected to wwwprod.lsa.umich.edu (141.211.177.191) port 80 (#0) GET /polisci HTTP/1.1 User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3 Host: wwwprod.lsa.umich.edu Accept: */* < HTTP/1.1 302 Moved Temporarily < Server: Apache-Coyote/1.1 < Location: http://wwwprod.lsa.umich.edu/polisci/ < Transfer-Encoding: chunked < Date: Tue, 13 Sep 2011 20:28:29 GMT < * Connection #0 to host wwwprod.lsa.umich.edu left intact * Closing connection #0 $ $ $ curl -v http://www.lsa.umich.edu/polisci * About to connect() to www.lsa.umich.edu port 80 (#0) * Trying 141.211.177.203... connected * Connected to www.lsa.umich.edu (141.211.177.203) port 80 (#0) GET /polisci HTTP/1.1 User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3 Host: www.lsa.umich.edu Accept: */* < HTTP/1.1 302 Moved Temporarily < Date: Tue, 13 Sep 2011 20:28:47 GMT < Server: Apache-Coyote/1.1 < Location: http://www.lsa.umich.edu//polisci/ < Content-Length: 0 < X-Cnection: close < Content-Type: text/plain; charset=UTF-8 < Set-Cookie: BIGipServerlsa-cmsproddlv_pool=3232879501.20480.0000; path=/ < * Connection #0 to host www.lsa.umich.edu left intact * Closing connection #0 

注意上面第二个输出中的“//”。 这导致链接中断。

(这两个虚拟主机都有一个在F5上定义的虚拟服务器,“www.lsa.umich.edu”虚拟服务器上附有iRules,最近没有改变。

欣赏任何想法。

谢谢!

我将问题追溯到LSA和II VirtualHost上缺less“ProxyPreserveHost On”指令。 我添加了缺less的指令,并且工作正常。

Apache文档说:

启用时,此选项将传入请求中的主机:行传递给代理主机,而不是proxypass行中指定的主机名。

此选项通常应closures。 它在诸如基于代理的基于群集名称的虚拟主机这样的特殊configuration中是非常有用的,其中原始主机头需要由后端服务器进行评估。

在我们的例子中,我们正在进行大规模基于名称的虚拟主机,并且缺less这个指令。