Базовая аутентификация Apache с Tomcat

У меня следующие настройки сервера:

  • Apache Tomcat 7 с запущенным Atlassian Jira ( http: // : 8081 / билеты )
  • Веб-сервер Apache 2.4 в качестве обратного прокси-сервера, в настоящее время обслуживающий только приложение jira, но это еще не все ( http: // / tickets )

Теперь я хочу ограничить доступ ко всей системе (например, http: // / * ), установив базовую аутентификацию.

Это как выглядит единственная включенная конфигурация сайта 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, заставляя клиента аутентифицироваться при доступе к / * ?

4
задан 23 November 2015 в 17:16
2 ответа

Это заставило меня подозревать, что я получил ошибку 401 из приложения tomcat. похоже, что apache отправил запрос на авторизацию, хотя этого не должно было быть. Мне пришлось удалить параметр «Авторизация» из заголовка запроса.

Для этого. Я включил 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>

EDIT:

Jira использует собственный REST-API для гаджетов, поэтому мне пришлось определить Location-Tag для пути / Tickets / rest .

  • удален прокси-тег
  • добавил Location-Tag для jira-rest API

Есть идеи по решению проблемы:

1
ответ дан 3 December 2019 в 04:09

Вам необходимо заменить Требовать пользователя myuser на Требовать действительного пользователя

и удалить

    <Proxy *>
        Require all granted
    </Proxy>
0
ответ дан 3 December 2019 в 04:09

Теги

Похожие вопросы