Stunnel + Varnish + Apache вопросы
В настоящее время я использую Varnish перед apache для всего http-трафика. Я добавил stunnel, чтобы также использовать кеш для HTTPS-соединений. Итак, для HTTPS stunnel общается с лаком, который затем общается с Apache.
Проблема заключается в том, что когда лак возвращает кэшированную страницу в stunnel, stunnel отправляет ее через HTTPS клиенту, но остальные ресурсы, например, файлы css, файлы js и т. Д., Запрашиваются клиентом через простой HTTP. Я думаю, это связано с тем, что кэшированные страницы содержат ссылки на ресурсы только с HTTP.
Мои вопросы:
Это общая проблема с обратными ssl прокси?
Есть ли способ предотвратить эту форму?
Допустим, у меня есть домен www.example.com, и я хочу, чтобы он был доступен только через HTTPS, и я также хочу, чтобы http://www.example.com/ не возвращал 404, а перенаправлял на https://www.example.com/. Как это можно сделать, избегая циклов (то есть перенаправления лака на stunnel, который затем снова запрашивает страницу с лака через HTTP, который, в свою очередь, снова перенаправляет на stunnel и т. Д.). Есть ли какой-нибудь способ для stunnel вставить заголовок, который будет искать Лак, чтобы не выполнять перенаправление, если заголовок присутствует?
1 ответ
На некоторых веб-сайтах, если вы переключаетесь с HTTP на HTTPS-версию, вы должны сообщить конфигурацию веб-сайта, например: "Эй, теперь мы обслуживаемся через HTTPS". Ну, причина в том, что некоторые веб-сайты имеют жестко запрограммированную конфигурацию для генератора статических файлов URL. Таким образом, даже если они обслуживаются по протоколу HTTPS, генератор статических ресурсов по-прежнему считает, что мы говорим по протоколу HTTP.
Now, you suspect that varnish cache still deliver old content. The guess can be true... Well, you can clear the cache so you can confirm the theory.
To redirect parts, you can configure varnish so they do the redirect task. Add this line to varnish config inside 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;
}
The logic: if some random IP (other that localhost) connect to varnish (because they still use HTTP version), than varnish issue redirect to HTTPS. The VCL logic taken from this blog.
Резюме
To resolve the static file URL part, you should (1) check website configuration and inform it that we are served through HTTPS now and (2) clear the varnish cache.
Redirecting HTTP to HTTPS task can be done by varnish