Я установил 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"
Я использую:
Базовая аутентификация реализована в веб-приложении (не в Apache или Tomcat). Веб-приложение фактически реализовано на Scala / Lift, но это не имеет значения. Auth работает, если я напрямую обращаюсь к tomcat.
Сообщение об ошибке, которое я получаю от Apache. Любопытно, что название Неавторизованный и нет Внутренняя ошибка:
Неавторизованный
Сервер временно не может обработать ваш запрос из-за простоя в обслуживании или проблем с производительностью. Пожалуйста, попробуйте позже.
Сервер Apache / 2.2.16 (Fedora) на порт 80 my.server.name.com
Возможно, Apache видит что-то еще, кроме 200 ОК ответ и думает, что это ошибка, когда он действительно должен передать полученный 401 Неавторизованный ответ прямо в браузер. Если это проблема, как ее исправить?
Как вы настраивали базовую аутентификацию? Если вы используете <Directory>
Директивы, попробуйте изменить на <Location>
вместо. (поскольку прокси-запросы фактически не касаются каталога Apache ..
Изменить: я предполагаю, что у вас есть: LoadModule proxy_ajp_module modules/mod_proxy_ajp.so