所有,
我们遇到了一个奇怪的问题。
我们有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这个指令。