Почему Varnish не влияет на время отклика сервера с моими восходящими потоками nginx и приложением nodejs?

Я видел несколько php-сайтов после того, как поместил Varnish перед ними и ответил через 0,2 секунды. Теперь у меня есть:

  1. восходящий поток Nginx
  2. Varnish перед 1)
  3. Два сервера приложений с nodejs

Моя настройка Varnish стандартная:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_recv {
#some redirects from 80 to https hosts
}

Nginx прослушивает 443 и передает его: 80 varnish и затем varnish передайте это nginx: 8080, который имеет два восходящих сервера. Nginx и два сервера находятся в локальной сети (Microsoft azure)

Теперь мой ответ страницы составляет от 0,7 до 1,5 секунд, и это просто безумие, потому что домашняя страница использует memcached для большинства частей (даже вызовы ajax, которые менее 0,1 секунды, использовали некоторые memcached

При запуске приложения nodejs на локальном компьютере я получил ответ 0,3 - 0,4.

Насколько я понимаю, Varnish не работает:

  1. Работает (я получил только в заголовках это: X-Varnish : 98306) или
  2. Cache

Я могу видеть данные в журнале Varnish по каждому запросу, но это совершенно не помогает.

Итак, есть ли кто-нибудь, кто может помочь мне этим?

0
задан 28 February 2017 в 13:13
1 ответ

Varnish, Nginx и даже Apache могут ускорять динамические веб-сайты путем кэширования содержимого. Вот что они делают. Они не могут ускорить медленный сайт, только поместив его впереди. Они должны кэшировать контент, которому обычно требуется время, чтобы отобразиться на сервере и доставить его, как если бы это была статическая веб-страница.

Лучший способ сделать контент кешируемым - это установить правильные заголовки кеша в вашем приложении. Приложение - подходящее место для этого, поскольку всегда существует разный контент в смысле кэшируемости:

  • общедоступный видимый контент, который можно кэшировать
  • общедоступный видимый контент, который не может быть кэширован
  • частный контент, который можно кэшировать для нужные люди
  • частный контент, который не может быть кэширован

Но иногда веб-разработчик не знает о кешировании, и поэтому приложение не отправляет правильные заголовки кеширования. Если это так, вам необходимо определить различные типы контента и настроить Varnish, Nginx или Apache, чтобы они поступали правильно с нужным типом контента.

На самом деле я бы проверил, насколько это сложно. Вы уже используете Nginx для своего веб-сайта. Поэтому для меня нет смысла устанавливать дополнительное программное обеспечение, поскольку Nginx также может обрабатывать кеширование. Но я бы рекомендовал использовать Varnish, если вам нравится использовать ESI или действительно сложные проверки для различения типов контента.

Следующие шаги для вас:

Внимательно изучите заголовки кэширования (Cache-Control) вашего приложения. Я предполагаю, что ваше приложение их не отправляет, поэтому Varnish не может кэшировать и не может ускорить ваше приложение.

0
ответ дан 5 December 2019 в 08:33

Теги

Похожие вопросы