Я пытаюсь настроить 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, аутентификация никогда не требуется.