Любой ответ, который Вы получите здесь, чисто анекдотичен. Я предпочитаю Debian или Ubuntu. Удостоверьтесь, что Вы не используете версию на 64 бита при использовании меньше чем 4 ГБ поршня. Кроме того, выезд Linode для более выгодных условий (принимающий Вы используете Slicehost).
Я считаю, что самый простой способ думать об эффективности Varnish и его применении - это мыслить комбинациями. Каждая переменная создает экспоненциально больше комбинаций. Вкратце, это следующие переменные: хост, URI и заголовки / куки.
например, это разные объекты в кэше Varnish
domain.com/search/?q=something
domain.com/search/?q=something&source=A
domain.com/search/?q=something&source=B
domain.com/search/?q=something&source=A + nocookie
domain.com/search/?q=something&source=A + cookie1
domain.com/search/?q=something&source=A + cookie2
domain.com/search/?q=something&source=B + nocookie
domain.com/search/?q=something&source=B + cookie1
domain.com/search/?q=something&source=B + cookie2
ОДНАКО: Пока источники не сильно различаются, и пока сервер не отвечает за вывод различного контента в зависимости от источника, использование Varnish должно быть полупростым ... но только если вы сначала выполните какие-то манипуляции.
Поскольку у вас есть возможность манипулировать большей частью клиентского запроса с помощью Varnish, вы можете фактически удалить & source = A или & source = B из запрошенного URI, прежде чем он будет отправлен на бэкэнд сервер. Это по сути превращает все эти запросы:
domain.com/search/?q=something&source=A + nocookie
domain.com/search/?q=something&source=A + cookie1
domain.com/search/?q=something&source=A + cookie2
domain.com/search/?q=something&source=B + nocookie
domain.com/search/?q=something&source=B + cookie1
domain.com/search/?q=something&source=B + cookie2
в следующее:
domain.com/search/?q=something
То, что было 6 промахов и ни одного попадания, теперь составляет 1 промах и 5 попаданий
Итак, клиент запрашивает это у Varnish:
domain.com/search/?q=something&source=A + cookie1
, а Varnish запрашивает это из бэкэнда (например, Apache) для первого запроса:
domain.com/search/?q=something
, а затем кэшируется для последующих запросов (тем самым значительно повышая процент попаданий). Это называется «нормализацией».
Затем, конечно, статический файл JavaScript будет выполнять свою работу, ссылаясь на строки запроса URI и совершая некоторые манипуляции с DOM (что-то вроде того, что делает Google Analytics) на основе исходной строки запроса.
Таким образом, для клиента будет поддерживаться & source = A, и JavaScript может использовать это соответственно; и пока JavaScript отвечает за динамическое изменение содержимого, у вас не должно возникнуть проблем с удалением всех или большей части файлов cookie или строк запроса из вашего запроса до того, как Varnish отправит запрос на бэкэнд.
Вы также можете кэшировать ваши XML-запросы, пока они GET-запросы.
По сути, название игры с Varnish - это «нормализация» внутреннего запроса, чтобы URI / файлы cookie / заголовки не влияли на то, что ' https://stackoverflow.com/questions/3547384/can-i-reformat-my-url-parameters-with-varnish
Если вам необходимо динамически кэшировать контент на основе файла cookie, вы можете сделать поэтому используя vcl_hash: https://www.varnish-cache.org/trac/wiki/VCLExampleCacheCookies Это, конечно, снижает вашу посещаемость, поэтому гораздо лучше передать такую функциональность JavaScript для обработки и указать Varnish не кэшировать определенные конечные точки: например,
// don't cache this endpoint, this content changes based on the referrer
if (req.url ~ '/ajax/get_referrer/') { return (pass); }
Единственная часть, которую я не понимаю в вашем вопросе, была:
Cookie также удаляется, поэтому в следующий раз, когда пользователь вернется на страницу проверяет, существует ли cookie, если да, выбирает, чтобы показать правильный код преобразования в HTML.
Пока внутренний сервер не должен видеть cookie или устанавливать cookie, то есть, пока JavaScript отвечает за работу с DOM, вы должны быть в ясности . Обратите внимание: если «источник / реферер» для каждого пользователя разный, вы также должны указать Varnish не кэшировать какие-либо конечные точки, используемые для получения необходимых данных.
Также следует отметить, что в Varnish следует кэшировать только запросы GET и HEAD. Если ваш поиск или JavaScript использует POST или любой другой тип запроса, их не следует кэшировать.
Я определенно рекомендую делать все на сервере разработки. Вам придется учитывать множество других факторов, таких как доставка PDF-файлов / видео / аудио (также называемых конвейерными запросами), игнорирование страниц и многие другие особенности, уникальные для вашей ситуации.