Nginx error_page Эквивалент Apache - на 401 перенаправление в блок местоположения - PullRequest
0 голосов
/ 16 января 2019

В настоящее время у меня есть 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>
...