Apache, Tomcat 5 и проблема с базовой аутентификацией HTTP
Я настроил Tomcat с веб-приложением, которое использует базовую аутентификацию http в некоторых своих URL. Перед 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 (ROOT.war) установлено веб-приложение, поэтому я должен иметь возможность использовать http://localhost/ для доступа к своему веб-приложению. Но это не работает с http базовой аутентификации.
Проблема в том, что все работает, пока я не попытаюсь получить доступ к URL-адресу, защищенному базовой аутентификацией HTTP. URL без аутентификации работают просто отлично.
При доступе к этому URL через Apache я получаю сообщение об ошибке от Apache. Если я получаю доступ к тому же URL прямо из tomcat, все работает просто отлично.
Я получаю это в журнал ошибок 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 (Годдард)
- HTTPD-2.2.16-1.fc13.x86_64
- tomcat5-5.5.27-7.4.fc12.noarch
Базовая аутентификация реализована в веб-приложении (не в Apache или Tomcat). Веб-приложение фактически реализовано в Scala/Lift, но это не должно иметь значения. Аутентификация работает, если я получаю прямой доступ к коту.
Сообщение об ошибке, которое я получаю от Apache. Любопытно, что заголовок неавторизован, а не внутренняя ошибка:
неразрешенный
Сервер временно не может обслуживать ваш запрос из-за простоя обслуживания или проблем с пропускной способностью. Пожалуйста, попробуйте позже.
Сервер Apache/2.2.16 (Fedora) по адресу my.server.name.com Порт 80
Возможно, что Apache видит что-то еще, кроме ответа 200 OK, и считает, что это ошибка, когда он фактически должен передать полученный 401-й несанкционированный ответ прямо в браузер. Если это проблема, как это исправить?
1 ответ
Как вы настроили базовую аутентификацию? Если вы используете <Directory>
Директивы, попробуйте перейти на <Location>
вместо. (поскольку прокси-запросы на самом деле не затрагивают каталог Apache..
Изменить: я предполагаю, что у вас есть: LoadModule proxy_ajp_module modules/mod_proxy_ajp.so