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

Другие вопросы по тегам