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

Кеширование всех файлов в лаке

Я хочу, чтобы мои лаковые серверы кешировали все файлы. На бэкэнде есть lighttpd, на котором размещаются только статические файлы, и есть мкр5 в URL-адресе в случае изменения файла, например. /gfx/Bird.b6e0bc2d6cbb7dfe1a52bc45dd2b05c4.swf). Однако мой рейтинг попаданий очень плох (около 0,18).

Моя конфигурация:

sub vcl_recv {
    set req.backend=default;

    ### passing health to backend
    if (req.url ~ "^/health.html$") {
        return (pass);
    }

    remove req.http.If-None-Match;
    remove req.http.cookie;
    remove req.http.authenticate;

    if (req.request == "GET") {
        return (lookup);
    }
}

sub vcl_fetch {
    ### do not cache wrong codes
    if (beresp.status == 404 || beresp.status >= 500) {
        set beresp.ttl = 0s;
    }
    remove beresp.http.Etag;
    remove beresp.http.Last-Modified;
}

sub vcl_deliver {
    set resp.http.expires = "Thu, 31 Dec 2037 23:55:55 GMT";
}

Я сделал настройку производительности:

DAEMON_OPTS="${DAEMON_OPTS} -p thread_pool_min=200 -p thread_pool_max=4000 -p thread_pool_add_delay=2 -p session_linger=100"
  1. Основной пропущенный URL-адрес ... /health.html. Правильно ли настроен переход на бэкэнд?
  2. Коэффициент попадания при отключении проверки здоровья увеличивается до 0,45. Сейчас в основном пропускается /crossdomain.xml (из многих доменов, так как это подстановочный знак). Как мне этого избежать?
  3. Должен ли я использовать другие заголовки, такие как User-Agent или Accept-Encoding? Я думаю, что механизм хеширования по умолчанию использует url + host / IP. Сжатие используется в серверной части.
  4. Что еще может улучшить производительность?

Для уверенности требуется дополнительная информация (светлые заголовки ответов), но я предполагаю, что ваш бэкэнд не устанавливает заголовок Expires или Cache-control.

Это необходимо, чтобы Varnish знал, как долго хранить данные в кеше, или вы также можете указать ttl по умолчанию в DAEMON_OPTS через -t default_ttl_in_seconds.

Или действительно внутри самого VCL, как здесь ответили: Varnish Cache - TTL по умолчанию?

ТЕМ НЕ МЕНИЕ: это снова предполагает, что ваш backend light server не возвращает истечение срока в прошлом и не возвращает заголовок Cache-control, который предотвращает кеширование (т.е. no-cache, must-revalidate iirc), если это так, установка ttl по умолчанию будет ничего не делать, чтобы облегчить проблему.