В настоящее время я использую Varnish перед apache для всего http-трафика. Я добавил stunnel, чтобы использовать кеш для HTTPS-соединений. Итак, для HTTPS stunnel общается с varnish, который затем общается с Apache.
Проблема в том, что когда varnish возвращает кешированную страницу в stunnel, stunnel отправляет ее клиенту через HTTPS, но остальные ресурсы, например файлы css, файлы js и т. Д., Запрашиваются клиентом через простой HTTP. Я предполагаю, что это связано с кешированными страницами, содержащими ссылки на ресурсы только с HTTP.
Мои вопросы:
Это обычная проблема с обратными ssl-прокси?
Есть ли способ предотвратить появление этой формы?
Допустим, у меня есть домен www.example.com, и я хочу, чтобы он был доступен только через HTTPS, и я также хочу http://www.example.com не возвращать 404, а перенаправлять на https://www.example.com. Как это можно сделать, избегая циклов (например, перенаправления varnish в stunnel, который затем снова запрашивает страницу из varnish через HTTP, который, в свою очередь, снова перенаправляет на stunnel и т. Д.). Есть ли способ для stunnel вставить заголовок, который будет искать varnish, чтобы не выполнять перенаправление, если заголовок присутствует?
На некоторых веб-сайтах, если вы переключаетесь с версии HTTP на HTTPS, вы должны сообщить конфигурации веб-сайта, например, «Эй, сейчас мы обслуживаемся через HTTPS». Дело в том, что на некоторых веб-сайтах жестко запрограммирована конфигурация генератора статических URL-адресов файлов. Таким образом, даже если они обслуживаются через HTTPS, генератор статических URL-адресов по-прежнему считает, что мы говорим через HTTP.
Теперь вы подозреваете, что кеш-память varnish все еще доставляет старый контент. Предположение может быть правдой ... Что ж, вы можете очистить кеш, чтобы вы могли подтвердить теория.
Чтобы перенаправить части, вы можете настроить лак, чтобы они выполняли задачу перенаправления. Добавьте эту строку в конфигурацию лака внутри sub vcl_recv
if (!req.http.X-Forward-For && client.ip !~ localhost) {
set req.http.x-Redir-Url = "https://" + req.http.host + req.url;
error 750 req.http.x-Redir-Url;
}
Логика: если какой-то случайный IP (кроме localhost) подключается к varnish (потому что они все еще используют версию HTTP), тогда varnish перенаправляет на HTTPS. Логика VCL взята из этот блог.
Чтобы разрешить статическую часть URL-адреса файла, вы должны (1) проверить конфигурацию веб-сайта и сообщить, что сейчас мы обслуживаемся через HTTPS, и (2) очистить кеш-память.
Перенаправление HTTP на HTTPS задачу можно сделать с помощью лак