Из документации:
Когда конечный пользователь введет свои данные для входа, форма отправит HTTP-запрос POST на исходный защищенный паролем URL-адрес. mod_auth_form перехватит этот POST-запрос, и если для имени пользователя и пароля будут обнаружены поля HTML, пользователь войдет в систему, и исходный защищенный паролем URL-адрес будет возвращен пользователю в виде запроса GET.
у меня работа в порту 45001
и обратное проксирование Apache. Я использую аутентификацию формы и ErrorDocument
для принудительного входа в систему. Это моя конфигурация:
<VirtualHost myip:44302>
ServerName myserver.com
# Pass auth info
RequestHeader set X-Remote-User %{REMOTE_USER}s
# Login page is directly on the server - don't use reverse proxy
ProxyPass /login/ !
# Proxy all requests to the app running in a docker container
ProxyPreserveHost On
ProxyPass / http://localhost:45001/
ProxyPassReverse / http://localhost:45001/
# Require auth for all requests except the login page
<LocationMatch ^/(?!login).*$>
AuthType form
AuthName "login"
AuthFormProvider ldap
AuthLDAPURL <url>
AuthLDAPBindAuthoritative off
# Redirecting to login page if auth is needed
ErrorDocument 401 /login/index.html
# If authorization fails, return 403 insead of 401
AuthzSendForbiddenOnFailure On
# Use session cookie
Session On
SessionCookieName session path=/;httponly;
SessionCryptoPassphrase <passphrase>
Require valid-user
</LocationMatch>
</VirtualHost>
Форма (упрощенная из классов и оболочек div):
<form action="" method="POST">
<input name="httpd_username" type="text">
<input name="httpd_password" type="password">
<button type="submit">
Login
</button>
</form>
Для других сценариев, где я не использую обратный прокси-сервер, рабочий процесс правильный:
- URL доступа
- проверить файл cookie сеанса
- запросить логин, если нужно
- Отправить
HTTP ПОЛУЧИТЬ
запрос к исходному перехваченному URL
Но когда я использую обратный прокси, вместо отправки HTTP ПОЛУЧИТЬ
на перехваченный запрос apache отправляет HTTP-ПОСТ
. Приложение за прокси не работает с ПУБЛИКОВАТЬ
и печатает ошибку.
Если пользователь обновляет страницу, все работает правильно, потому что файл cookie сеанса уже установлен.
Что вызывает это неправильное поведение и/или как правильно настроить эту аутентификацию для работы?