Назад | Перейти на главную страницу

Перенаправление авторизованных пользователей на https, анонимное на http с помощью Varnish + Apache

У меня есть сервер с Varnish перед Apache перед Drupal.

Я бы хотел перенаправить мою форму входа на https (достаточно просто), а затем перенаправить всех вошедших (аутентифицированных) пользователей на https все время, при этом анонимные посетители все время перенаправлялись на http (по соображениям производительности) .

Я не хочу, чтобы аутентифицированные пользователи работали в смешанном режиме, если они нажимают на абсолютную ссылку на http://mysite.com/some/page -> так что причина всегда перенаправлять аутентифицированных пользователей на https, если протокол не https.

Можно ли сделать что-то подобное, используя комбинацию конфигурации Varnish + Apache? Или это единственное решение - постоянно использовать https для всех посетителей (что снижает производительность для всех этих анонимных посетителей).

Для справки я использую Varnish vcl на основе этого чувствительного к Drupal примера по умолчанию, предоставленного Four Kitchens: https://fourkitchens.atlassian.net/wiki/display/TECH/Configure+Varnish+3+for+Drupal+7

То, что вы пытаетесь сделать, очень сложно сделать правильно. Если вы сделаете ошибку при использовании http и https, вы можете открыть множество проблем с безопасностью.

Я бы порекомендовал настроить один http vserver в apache, который перенаправляет на тот же https URL и больше ничего не делает. Ему даже не нужно выяснять, существует ли URL-адрес или нет, он просто все время перенаправляет. Затем создайте еще один https vserver, на котором находится реальное содержимое сайта.

Не забудьте пометить все файлы cookie как безопасные, чтобы не допустить утечки файлов cookie при HTTP-соединениях.

Если вы настаиваете на том, чтобы отвечать по http для пользователей, которые не вошли в систему. Тогда вам понадобится один небезопасный файл cookie, который сообщает, вошел ли пользователь в систему или нет. Не помещайте никаких данных в этот файл cookie, просто сохраните, вошел ли пользователь в систему или нет. Вы можете использовать 0 или 1 в качестве сохраненного значения. Или вы можете использовать постоянное значение, и в этом случае наличие файла cookie означает, что пользователь вошел в систему, а отсутствие означает, что пользователь не вошел в систему.

На стороне http вы затем перенаправляете на https, если удовлетворяется любой из этих двух критериев. Существует файл cookie, указывающий, что пользователь вошел в систему или для URI запроса требуется вход. Когда будет получен запрос https, вам нужно будет выполнить дополнительные проверки, чтобы убедиться, что пользователь действительно вошел в систему. Для этой цели вы используете безопасный файл cookie, который не может быть угадан посторонним. Если обнаруживается, что пользователь не вошел в систему, вы перенаправляете обратно на http, если URL-адрес не требует входа в систему, и на этом этапе вы инструктируете браузер удалить небезопасный файл cookie, который неверно указывает на то, что пользователь вошел в систему.

Очень важно убедиться, что эти перенаправления не кэшируются. Вы абсолютно не хотите, чтобы браузер кэшировал оба перенаправления с http-версии URL-адреса на https-версию и наоборот.