我已经在一些url中使用http basic auth来设置一个Tomcat。 在Tomcat前面有一个Apache服务器。
我已经设置Apache这样的代理(所有的stream量应该直接到tomcat):
/etc/httpd/conf.d/proxy_ajp.conf :
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so ProxyPass / ajp://localhost:8009/ ProxyPassReverse / ajp://localhost:8009/
有一个webapp安装到Tomcat的根目录(ROOT.war),所以我应该可以使用http:// localhost /来访问我的webapp。 但它不是与http基本身份validation。
问题是,一切正常,直到我尝试访问受HTTP基本身份validation保护的URL。 没有身份validation的url工作得很好。
当通过apache访问这个url时,我收到来自Apache的错误消息。 如果我直接从tomcat访问相同的URL,一切正常。
我得到这个Apache错误日志:
[Wed Sep 01 21:34:01 2010] [error] proxy: dialog to [::1]:8009 (localhost) failed
访问日志看起来像这样:
::1 - - [01/Sep/2010:21:34:01 +0300] "GET /protected_path/ HTTP/1.0" 503 360 "-" "w3m/0.5.2"
我在用:
基本的身份validation是在webapp(而不是Apache或Tomcat)中实现的。 这个webapp实际上是在Scala / Lift中实现的,但是这并不重要。 如果我直接访问tomcat,auth可以工作。
我从Apache获得的错误消息。 好奇的是,标题是未经授权,而不是内部错误 :
擅自
由于维护停机或容量问题,服务器暂时无法处理您的请求。 请稍后再试。
Apache / 2.2.16(Fedora)服务器在my.server.name.com端口80
可能是Apache看到的是200 OK响应以外的东西,并认为它实际上应该将收到的401未经授权的响应直接传递给浏览器是错误的。 如果这是问题,如何解决?
你是如何configuration基本身份validation的? 如果您正在使用<Directory>指令,请改为改为<Location> 。 (因为代理请求实际上并不接触Apache目录..
编辑:我假设你有: LoadModule proxy_ajp_module modules/mod_proxy_ajp.so