У меня следующая настройка сервера:
http:// <server-ip>:8081/tickets
)http: // <адрес-сервера> / билеты
)Теперь я хочу ограничить доступ ко всей системе (т.е. http: // <IP-адрес сервера> /*
) путем настройки базовой аутентификации.
Так выглядит единственная включенная конфигурация сайта apache:
<VirtualHost *:80> <Proxy *> Require all granted </Proxy> ProxyRequests Off ProxyPreserveHost On ProxyPass /tickets http://localhost:8081/tickets ProxyPassReverse /tickets http://localhost:8081/tickets <Location /> AllowOverride AuthConfig AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require user myuser </Location> </VirtualHost>
Но с этой конфигурацией я сталкиваюсь с проблемой при попытке войти в систему. После ввода данных для входа в систему появляется окно входа с запросом еще раз для входа. После трех попыток tomcat возвращает ошибку 401! приложение, а не apache.
Для этого запроса нет записи ни в apache access.log, ни в error.log. Хотя apache будет регистрировать запросы с неправильными учетными данными.
Как я могу настроить Apache для проксирования всех /tickets/*
запросы к Tomcat, заставляя клиента аутентифицироваться при доступе /*
?
У меня возникло подозрение, что я получил ошибку 401 из приложения tomcat. похоже, что apache отправил запрос на авторизацию, хотя этого не должно было быть. Мне пришлось удалить "Authorization"
параметр из заголовка запроса.
Сделать это. Я включил mod_headers
и добавил RequestHeader unset "Authorization"
непосредственно перед директивами ProxyPass.
Итак, моя конфигурация теперь выглядит следующим образом:
<VirtualHost *:80> ProxyRequests Off ProxyPreserveHost On RequestHeader unset "Authorization" <Location "/tickets/rest/"> Satisfy Any Order allow,deny Allow from all </Location> <Location /> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require user myuser </Location> ProxyPass /tickets http://localhost:8081/tickets ProxyPassReverse /tickets http://localhost:8081/tickets </VirtualHost>
РЕДАКТИРОВАТЬ:
Jira использует собственный REST-API для гаджетов, поэтому мне пришлось определить Location-Tag для /tickets/rest
дорожка.
Есть идеи по решению проблемы от:
Вам нужно заменить Require user myuser
по Require valid-user
и удалить
<Proxy *>
Require all granted
</Proxy>