Назад | Перейти на главную страницу

Apache mod_auth и mod_proxy не работают вместе

Я пытаюсь настроить apache в качестве интерфейса проверки подлинности для веб-сервера, работающего на порту 8080. На сервере нет проверки подлинности, поэтому, если вы curl localhost:8080 вы получаете сайт. Порт 8080 заблокирован извне, поэтому я хочу, чтобы apache аутентифицировал пользователя, обращающегося с порта 80, а затем прокси на порт 8080.

Я считаю, что это должно быть возможно, согласно этому сообщению в stackoverflow: https://stackoverflow.com/questions/724599/setting-up-an-apache-proxy-with-authentication

Я попытался воспроизвести это, однако я не могу заставить Apache пройти аутентификацию; он просто передается напрямую прокси. Вот конфигурация виртуального хоста:

<VirtualHost *:80>

  ServerName external.mywebsite.com

  <Location "/">
          Satisfy any
          require valid-user
          order allow,deny
          Allow from all
  </Location>


  ProxyRequests off
  ProxyPreserveHost on

  ProxyPass / http://localhost:8080/
  ProxyPassReverse / http://localhost:8080/

  <Proxy *>
          Order deny,allow
          Allow from all
          AuthType Basic
          AuthName "Private"
          AuthBasicProvider file
          AuthUserFile /path/to/htpasswd
          Require valid-user
  </Proxy>
</VirtualHost>

Это работает так же, как просмотр выходных данных external.mydomain.com из бэкэнда. Так что сам прокси работает, но как будто игнорируются директивы Auth. Я также попытался переместить директивы Auth в <location> блок, но это имеет тот же эффект.

Я использую Apache2 v2.2.22 под управлением Ubuntu 12.04. Какие-либо предложения?

Satisfy any делает именно то, что говорит: он разрешает доступ на основе аутентификации или Контроль доступа по IP.

Поскольку вы разрешаете первое в блоке Proxy, а второе - в блоке Location, аутентификация никогда не требуется.