Từ tài liệu:
Khi người dùng cuối đã điền chi tiết đăng nhập của họ, biểu mẫu sẽ thực hiện yêu cầu HTTP POST tới URL được bảo vệ bằng mật khẩu ban đầu. mod_auth_form sẽ chặn yêu cầu POST này và nếu tìm thấy các trường HTML cho tên người dùng và mật khẩu, thì người dùng sẽ đăng nhập và URL gốc được bảo vệ bằng mật khẩu sẽ được trả lại cho người dùng dưới dạng yêu cầu GET.
Tôi có một cuộc chạy ở cảng 45001
và apache ủy quyền ngược cho nó. Tôi sử dụng xác thực mẫu và LỗiTài Liệu
để thực thi đăng nhập. Đây là cấu hình của tôi:
<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>
Biểu mẫu (đơn giản hóa các lớp và trình bao bọc div):
<form action="" method="POST">
<input name="httpd_username" type="text">
<input name="httpd_password" type="password">
<button type="submit">
Login
</button>
</form>
Đối với các tình huống khác, khi tôi không sử dụng proxy ngược, quy trình làm việc là chính xác:
- truy cập URL
- kiểm tra cookie phiên
- yêu cầu đăng nhập nếu cần
- gửi
HTTP NHẬN
yêu cầu URL bị chặn ban đầu
Nhưng khi tôi sử dụng proxy ngược, thay vì gửi HTTP NHẬN
đối với yêu cầu bị chặn, apache sẽ gửi BÀI ĐĂNG HTTP
. Ứng dụng đằng sau proxy không hoạt động với BƯU KIỆN
và in một lỗi.
Nếu người dùng làm mới trang, thì tất cả đều hoạt động bình thường vì cookie phiên đã được đặt.
Điều gì gây ra hành vi sai trái này và/hoặc làm cách nào để định cấu hình xác thực này hoạt động đúng cách?