Я пытаюсь создать страницу прокси HTTP авторизации с помощью mod_auth_form
Apache2 mod_auth_form слишком много переадресаций под Адрес
Моя цель состоит в том, чтобы иметь одну страницу Auth в каталоге DocumentRoot
, то, как только пользователь подключен, просто прокси все маршруты к «реальному» приложению, работающие на локальном хосте с другим портом.
Я создал свой виртуальный хост с директивами Auth под корень Location
:
<VirtualHost *:80>
ServerName subdomain.example.com
DocumentRoot /var/www/subdomain.example.com/web/
<Location /login.html>
Order allow,deny
Allow from all
</Location>
<Location />
SetHandler form-login-handler
AuthType Form
AuthName realm
AuthFormProvider file
AuthUserFile /var/www/subdomain.example.com/.htpasswd
AuthFormLoginRequiredLocation "http://subdomain.example.com/login.html"
require valid-user
Session On
SessionCookieName session path=/
SessionCryptoPassphrase any-secret-passphrase
</Location>
ProxyPass /login.html !
ProxyPassReverse /login.html !
ProxyPass/http://localhost:8888
ProxyPassReverse/http://localhost:8888
ErrorLog ${APACHE_LOG_DIR}/subdomain.example.com/error.log
CustomLog ${APACHE_LOG_DIR}/subdomain.example.com/access.log combined
</VirtualHost>
EDIT Все, что было нужно, чтобы изменить порядок <Location></Location>
директив ... И добавить специальное место для форма обработчик. Рабочий раствор:
<VirtualHost *:80>
ServerName subdomain.example.com
DocumentRoot /var/www/subdomain.example.com/web/
<Location />
AuthType Form
AuthName realm
AuthFormProvider file
AuthUserFile /var/www/subdomain.example.com/.htpasswd
AuthFormLoginRequiredLocation "http://subdomain.example.com/login.html"
AuthFormLoginSuccessLocation "http://subdomain.example.com/"
require valid-user
Session On
SessionCookieName session path=/
SessionCryptoPassphrase any-secret-passphrase
</Location>
<Location /login_check.html>
SetHandler form-login-handler
AuthType Form
AuthName realm
AuthFormProvider file
AuthUserFile /var/www/subdomain.example.com/.htpasswd
AuthFormLoginRequiredLocation "http://subdomain.example.com/login.html"
AuthFormLoginSuccessLocation "http://subdomain.example.com/"
require valid-user
Session On
SessionCookieName session path=/
SessionCryptoPassphrase any-secret-passphrase
</Location>
<Location /login.html>
Order allow,deny
Allow from all
</Location>
ProxyPreserveHost On
ProxyPass /login.html !
ProxyPassReverse /login.html !
ProxyPass/http://localhost:8888
ProxyPassReverse/http://localhost:8888
ErrorLog ${APACHE_LOG_DIR}/subdomain.example.com/error.log
CustomLog ${APACHE_LOG_DIR}/subdomain.example.com/access.log combined
</VirtualHost>
Когда я пытаюсь получить доступ к subdomain.example.com, я перенаправлены на subdomain.example.com/login.html
Содержание этого (что это хорошо!) /var/www/subdomain.example.com/web/login.html страница:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width' />
<title>Authentication</title>
</head>
<body>
<form method='POST' action='/login_check.html'>
<div class='form-group'>
<label for='httpd_username'>Username</label>
<input id='http_username' class='form-control' type='text' name='httpd_username' value='' />
</div>
<div class='form-group'>
<label for='httpd_password'>Password</label>
<input id='httpd_password' class='form-control' type='password' name='httpd_password' value='' />
</div>
<div class='form-group'>
<input class='btn btn-success' type='submit' name='login' value='Login' />
</div>
</form>
</body>
</html>
Однако, никогда не отображается эта страница login.html, я получаю сообщение об ошибке: TOO_MANY_REDIRECTS
The webpage at http://subdomain.example.com/login.html has resulted in too many redirects.
Кажется, что этот специальный маршрут должен быть «вниз заперт» в процессе Auth ... Но я понятия не имею, как включить, что ...
Я попытался добавить еще ErrorDocument 401 /login.html
директиву, но это ничего не изменило.
Вы можете попробовать отображение 'HTTP: // локальный: 8888' в подкаталог субдомена (например,' ProxyPass/прокси/http: // localhost: 8888/'), поэтому он не будет мешать вашему' login.html' - по крайней мере, как временное решение для тестирования. Если это работает, вы можете выяснить, почему «Location/login.html», похоже, не влияет. (Кроме того, ваши два параметра для «ProxyPass» должны либо иметь трейлинг-косую черту, либо оба они не имеют.) –
Спасибо! Действительно, решение подпапки работает; За исключением того, что я заканчиваю с/proxy/в моем URL-адресе, который я бы предпочел избежать ... Есть ли способ избежать этого, сохраняя подпапку? В другой руке, как я могу выяснить, почему мой '' '' '' '' не работает? (Что вы имеете в виду с параметрами ProxyPass?) –
Должен быть способ сделать ваш исходный макет каталога работать, но я не могу точно сказать, как без тестирования всего этого.Я бы предположил, что Apache оценивает блоки '' в том порядке, в котором они их найдут, поэтому второй блок будет переопределять первый. Вы пытались их заменить? Что касается параметров «ProxyPass»: у них есть «ProxyPass/monit/http: // localhost: 2812 /» или «ProxyPass/monit http: // localhost: 2812'. Я не совсем понимаю, почему, но я не мог получить доступ к некоторым страницам, если только один из параметров имел завершающую косую черту. –