Перенаправить запрос http на веб-сайт из iframe с обратным прокси-сервером перед сайтом. - PullRequest
0 голосов
/ 23 сентября 2018

Я использую nginx в качестве обратного прокси-сервера перед сайтом и перехватываю запросы на скачивание / предварительный просмотр для файлов, хранящихся на сайте.Запросы на загрузку поступают из iframe, и если пользователь не авторизован, я перенаправляю их на страницу выхода из системы.Но это не переводит главную страницу (вне iframe) на страницу выхода из системы.Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 24 сентября 2018

Если пользователь не авторизован, вы можете отправить сообщение из iframe его родителю.Получив сообщение, вы перенаправите родительское окно на страницу выхода.Пример реализации находится здесь .

Однако это становится намного сложнее, если вы не можете изменить источник страницы iframe.Поскольку вы используете nginx, одним из решений будет внедрение скрипта с использованием модуля ngx_http_sub_module.Этот модуль заменяет одну строку в ответе другой.Обратите внимание, что этот модуль не включен по умолчанию, вам может понадобиться собрать nginx с параметром --with-http_sub_module.Для получения дополнительной информации, включая пример, см. Страницу модуля .

Для iframe необходима строка:

parent.postMessage( "redirect", "http://www.your-domain.com" );

Чтобы добавить это с помощью nginx, вы можете попробовать:

location / {
    sub_filter '</head>' '<script language="javascript">parent.postMessage( "redirect", "http://www.your-domain.com" );</script></head>';
    sub_filter_once on;
}

Родительскому окну потребуется соответствующий код:

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[ eventMethod ];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

// Listen to message from child window
eventer( messageEvent, function( e ) {
    // normally if the message was meant to come from your domain
    // you would check e.origin to verify that it's not someone
    // sending messages you don't want
    if ( e.data = "redirect" ) {
        window.location.replace( "your-logout-url" );
    }
}, false );

Более продвинутое решение может включать URL-адрес перенаправления в сообщении;затем вы можете обрабатывать iframe, перенаправляя в разные места.

...