我已经设置了一个 Tomcat,其中包含一个 Web 应用程序,该 Web 应用程序在其某些 URL 中使用 http basic auth。Tomcat 前面有一个 Apache 服务器。
我已经将 Apache 设置为这样的代理(所有流量都应直接转到 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/
Tomcat 的根目录下安装了一个 Web 应用程序(ROOT.war),因此我应该能够使用http://本地主机/访问我的 Web 应用。但是它无法使用 http basic auth。
问题是,在我尝试访问受 HTTP 基本身份验证保护的 URL 之前,一切正常。未经身份验证的 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"
我在用:
- Fedora 版本 13(Goddard)
- httpd-2.2.16-1.fc13.x86_64
- tomcat5-5.5.27-7.4.fc12.noarch
基本身份验证是在 webapp 中实现的(而不是在 Apache 或 Tomcat 中)。webapp 实际上是在 Scala/Lift 中实现的,但这并不重要。如果我直接访问 tomcat,身份验证就可以正常工作。
我从 Apache 收到的错误消息。标题很奇怪未授权并不是内部错误:
未授权
由于维护停机或容量问题,服务器暂时无法满足您的请求。请稍后重试。
Apache/2.2.16 (Fedora) 服务器位于 my.server.name.com 端口 80
Apache 可能看到了其他东西200 正常响应并认为这是一个错误,而实际上它应该传递接收到的401 未授权直接响应浏览器。如果这是问题,该如何修复?
答案1
您如何配置基本身份验证?如果您正在使用<Directory>
指令,请尝试更改为<Location>
。(因为代理请求实际上不会触及 Apache 目录。)
编辑:我假设你有:LoadModule proxy_ajp_module modules/mod_proxy_ajp.so