В настоящее время у меня есть nginx vhost, который прокси-сервер передает на внутренний сервер. Если он получит ответ 401 от внутреннего сервера, он будет перенаправлен в местоположение /login
. Это /login
местоположение будет передаваться через прокси на любой сервер идентификации, где я могу войти в систему.
Я пытаюсь отразить эту функциональность в vache apache, но, похоже, не могу делать то, что мне нужно. Насколько я могу судить, единственный способ обработать ответ 401 от внутреннего сервера - это перенаправить на локальную страницу или удаленный URL (т. Е. htdocs/errors/401.html
ИЛИ http://127.0.0.1/errors/401.html
).
Возможно ли это в apache? Я чувствую, что я что-то упускаю.
Что у меня есть в nginx frontend.conf:
server {
listen 80;
server_name 127.0.0.1;
location /login {
proxy_pass http://{{ identity_provider }};
}
location / {
proxy_pass http://{{ backend_server }};
proxy_intercept_errors on;
error_page 401 /login;
}
}
Что у меня есть в apache frontend.conf:
<VirtualHost *:80>
ServerName 127.0.0.1
ServerAdmin webmaster@localhost
DocumentRoot htdocs/
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /error/ !
ErrorDocument 401 /error/401.html
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass "/" "http://{{ backend_server }}"
ProxyPassReverse "/" "http://{{ backend_server }}"
<Location />
Order allow,deny
Allow from all
ProxyErrorOverride On
</Location>
<Location /login>
ProxyPass "http://{{ identity_provider }}"
</Location>
</VirtualHost>
401.html
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="0; url=http://127.0.0.1/login">
<script type="text/javascript">
window.location.href = "http://127.0.0.1/login"
</script>
<title>Page Redirection</title>
</head>
<body>
<!-- Note: don't tell people to `click` the link, just tell them that it is a link. -->
If you are not redirected automatically, follow this <a href='http://127.0.0.1/login'>link to example</a>.
</body>
</html>