- Почему вы должны использовать обратный прокси на вашем сайте?
- Что такое кеш varnish?
- Varnish cache и nginx cache: сравнение производительности
- Varnish cache: a performance boost for dynamic websites
- Varnish или nginx?
- Гибкость
- Как использовать varnish cache на вашем сайте wordpress?
- Как работает varnish cache?
- Каковы преимущества использования varnish cache?
- Который лучший?
- Связанные статьи:
- Моя тестовая среда
- Настраиваем ssl для сайтов в nginx
- Редирект к ssl с помощью varnish
- Создаем или устанавливаем ssl-сертификат
- Сравнение varnish cache и nginx cache
- Управление статическим контентом
- Установка nginx
- Подводя итоги
Почему вы должны использовать обратный прокси на вашем сайте?
Ответ прост: есть несколько преимуществ использования обратного прокси. Давайте посмотрим их кратко:
Что такое кеш varnish?
Теперь, когда вы знаете, что такое обратный прокси-сервер, вы готовы погрузиться в магию Varnish Cache!
Varnish cache и nginx cache: сравнение производительности
Если есть что-то общее, чего сегодня пытается достичь каждый владелец веб-сайта, так это обеспечить быструю загрузку веб-сайта. Излишне говорить, что время загрузки в значительной степени способствует удержанию посетителей вашего сайта, а также повышению рейтинга в поисковых системах.
Применяя различные методы, такие как оптимизация изображений, интеграция сети доставки контента (CDN), использование правильного кэширующего сервера и т. д., владельцы сайтов постоянно стремятся увеличить время загрузки страниц своих сайтов. Хотя все эти меры в совокупности полезны, цель обсуждения в этой статьи — уделить особое внимание кешированию.
Хотя оба имеют свои соответствующие преимущества, подробное изучение каждого из них и сравнение их функций может помочь вам решить, какой из них вам следует выбрать.
Varnish cache: a performance boost for dynamic websites
In the chain of processes that occur during data requests, Varnish is positioned directly upstream from the web server where the desired content is found. While page requests are still initially processed by the original server, it’s the Varnish proxy that saves the request and required content. Further requests of this kind are dealt with by loading the desired data directly from the Varnish Cache. This means that the software is able to cache all data located in the working memory and allows the operating system to determine what’s to be saved to the server’s hard drive. Doing this helps users avoid simultaneously saving data on both their hard drives and in the cache.
Varnish also functions as a load balancer . With the help of the Round Robin procedure, incoming client requests are evaluated as separate worker threads that are dealt with in sequential fashion by the Varnish Cache. A fixed limit determines how many simultaneously active threads are able to be processed. Once this threshold is reached, all other requests end up in a queue where they wait to be processed. Incoming connections are only blocked once the queue’s limit is reached.
Configuring Varnish reserve proxies is mostly controlled via the Varnish Configuration Language (VCL). This makes it possible for hooks (here: a technique which allows users to integrate foreign code into the application) to be written. Once this VCL script is loaded, it’s then translated into the programming language C and compiled into a program library; the VCL instructions are linked to the Varnish cache. If the applied CMS, e-commerce software, or web application supports the markup language ESI (Edge Side Includes), Varnish is also able to transmit entirely cached pages. The tagging language generates ESI tags in the HTML files, which are used for labeling dynamic content. During client requests, Varnish Cache is able to recognize these tags and reload their corresponding content.
Varnish или nginx?
На практике трудно провести сравнение Varnish и NGINX. Потому что основы Varnish и NGINX очень похожи; оба могут использоваться в качестве обратного прокси и балансировщика нагрузки для вашего сервера. Однако, если мы углубимся в их технологии, есть несколько конкретных аспектов производительности Varnish по сравнению с NGINX Cache, которые можно сопоставить друг с другом.
Гибкость
Самое главное, на что обращают внимание при использовании определённого технологического решения, — это его гибкость. Одна из ключевых особенностей, которые дают Varnish Cache преимущество перед NGINX, — это гибкость, которую он предлагает с помощью своего языка конфигурации.
Как мы упоминали ранее, Varnish позволяет разработчикам использовать язык конфигурации Varnish для создания структуры кэширования, адаптированной к потребностям веб-сайта, что делает её настраиваемой. Вы можете установить инструкции о том, как обрабатывать входящие запросы, какой контент извлекать с сервера и делиться с конечным пользователем, какой источник использовать и как при необходимости изменять ответы пользователя.
Как использовать varnish cache на вашем сайте wordpress?
Миллионы сайтов WordPress используют Varnish Cache.
После того, как Varnish установлен и настроен на вашем веб-сервере, вы готовы дать указание WordPress взаимодействовать с ним и очищать Varnish Cache каждый раз, когда изменяется содержимое в кэше.
Для этого вы можете использовать плагин WordPress: одним из наиболее установленных (и лучше поддерживаемых) является Proxy Cache Purge.
Как работает varnish cache?
Varnish обрабатывает все входящие запросы, прежде чем они попадут на серверную часть вашего веб-сервера: его кэш обслуживает весь веб-трафик и по умолчанию обновляется каждые две минуты (или другой срок службы, если вы решите).
Если запрос не кэшируется, Varnish перенаправляет запрос на серверную часть веб-сервера и кэширует результат, как мы уже видели в параграфе общего обратного прокси-сервера.
Кэшированные запросы затем сохраняются в памяти: с этого момента получение и доставка их клиентам будет намного быстрее.
Чтобы указать конфигурацию, политики кэширования и другие правила, Varnish использует язык VCL ( язык конфигурации Varnish ).
Благодаря этому языку и его изменениям вы можете обрабатывать каждый запрос по-разному. Например, вы можете перенаправить определенные запросы в конкретный бэкэнд или попросить Varnish действовать по-разному в зависимости от свойств входящего запроса или его вывода.
Еще одно интересное поведение Varnish заключается в том, что благодаря встроенному инструменту, называемому бэкэнд-опросом, кэшированное содержимое может продолжать обслуживаться, даже если веб-сервер недоступен.
Опрос бэкэнда опрашивает сервер с частотой, которую вы можете гибко настроить: если Varnish обнаружит время простоя, он продолжит обслуживать кэшированный контент в течение периода, называемого льготным временем (которое также можно настраивать).
Дополнительная информация о командах конфигурации доступна в документации Varnish.
Каковы преимущества использования varnish cache?
Как уже упоминалось, первое преимущество Varnish – это повышение скорости действующего сайта и сервера.
Это происходит благодаря ряду факторов:
- При доставке объектов сервер кэширования работает быстрее, чем сервер-источник,поскольку рабочая нагрузка на первом менее интенсивна и менее разнообразна.
- Сервер кэширования предоставляет все ресурсы, которые не часто меняются, например файлы CSS и JavaScript. Это уменьшает нагрузку на исходный сервер, который может сосредоточиться на визуализации страниц быстрее, поскольку он не должен обслуживать статический контент при каждой перезагрузке.
- Время до первого байта (TTFB) уменьшается, поскольку время обработки базы данных внутреннего сервера меньше.
- Вы можете использовать Varnish как часть высокодоступной среды для обслуживания кэшированного содержимого, даже когда веб-сервер испытывает простои (подробнее об этом ниже).
Который лучший?
Не существует единственного правильного ответа на программное обеспечение для веб-кэширования, которое подойдёт вам. Каждый вариант использования индивидуален. Вы должны выбрать подходящий для своего сайта.
Связанные статьи:
Моя тестовая среда
Я буду работать с Vagrant, используя Ubuntu Trusty. Как уже было сказано выше, Apache у меня привязан к порту 8080, а Varnish 4 – к порту 80.
Вы можете загрузить мою тестовую среду с GitHub. Инструкции по ее установке находятся в файле readme.
У меня есть два сконфигурированных сайта. Если я посещу эти сайты в браузере, то Varnish обработает запрос в порте 80, либо поставив файл из кэша, либо обратившись к Apache.
В данный момент полезно проверить, какие порты у нас используются. Подключаемся по SSH к Vagrant:
vagrant ssh
Затем выполняем netstat:
sudo netstat -taupen
Мы получим список портов, а также информацию о том, какие процессы их используют. Вы должны отметить, что Varnish работает с портом 80, а Apache – с 8080.
Вы также можете убедиться в том, что Varnish работает в обычном режиме и выдает страницы из кэша:
varnishstat
Если вы перезагрузите страницу в браузере, вы сможете увидеть статистику обращения к кэшу.
Если вы используете мой VCL с GitHub, то вы можете видеть, что я добавил к конфигурации Varnish некоторый код, который передает браузеру заголовок HIT или MISS. Это означает, что вы можете видеть, какой заголовок был отправлен. Вы должны увидеть X-Cache: HIT, если страница была получена из кэша Varnish, и X-Cache: MISS, если страница поступила от Apache.
Настраиваем ssl для сайтов в nginx
Как только вы поместите в папку на сервере ваш самоподписанный или приобретенный SSL-сертификат, вы можете заняться настройкой ваших сайтов в Nginx.
Во-первых, удалите стандартный конфигурационный файл из /etc/nginx/sites-enabled. Вы можете удалить файл default или переместить его в другую папку.
Нам нужно настроить только те сайты, которые будут выводиться через SSL; все остальные сайты продолжат выводиться через Varnish, запущенный на порте 80. В моем случае я буду настраивать smashing_ssl_one.tutorials.eoms. Везде, где вы далее увидите этот домен, вам нужно будет его заменить на свой домен (локальный или онлайн). Исключение: тот случай, если вы используете мою рабочую среду, которая была приведена по ссылке выше.
Редирект к ssl с помощью varnish
Как показывает моя практика, вы можете захотеть выполнить некоторые улучшения.
Создаем или устанавливаем ssl-сертификат
Следующий шаг – установка SSL-сертификата. Поскольку мы работаем локально, мы можем создать самоподписанный сертификат с целью тестирования SSL-соединения.
Чтобы создать самоподписанный сертификат для тестирования, выберите или создайте директорию, в которой он будет находиться. Я создал директорию nginx в /etc/ssl. Затем выполните следующую команду для генерации ключа и сертификата.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/nginx/smashing_ssl_one.tutorials.eoms.key -out /etc/ssl/nginx/smashing_ssl_one.tutorials.eoms.crt
Когда вы выполните эту команду, вам будет задана серия вопросов. Вы можете написать любую ерунду в качестве ответов; однако, когда у вас спросят «Common Name», используйте домен, который вы обычно вводите в строку URL для доступа к вашему сайту в Vagrant. В моем случае это smashing_ssl_one.tutorials.eoms:
Если вы теперь заглянете в папку, которую вы создали, вы должны увидеть в ней два файла: один с расширением .key и другой с расширением .crt.
Для работающего сервера вы должны, естественно, заказать сертификат от центра сертификации. В таком случае вы получите готовый ключ и файл сертификата – вам не придется создавать их вручную. Вам нужно будет разместить их на своем сервере перед тем, как выполнить следующий шаг.
Рекомендую приобретать SSL-сертификаты для сайтов (Comodo, Symantec и др.) в проверенной компании ЛидерТелеком. ЛидерТелеком – стратегический партнер Comodo. Цены на сертификаты ниже, чем у официальных центров регистрации, да и поддержка имеется на русском языке. Можно будет легко решить все вопросы, если они возникнут.
Сравнение varnish cache и nginx cache
- Varnish Cache поддерживает ESI, а Nginx — нет; Nginx поддерживает SSL, а Varnish Cache — нет.
- Varnish Cache — это чистый веб-кеш, который имеет более продвинутые функции, связанные с кешем, чем Nginx; однако Nginx может действовать как «настоящий» кеш-сервер, когда размещается перед сервером/серверами приложений.
- Varnish Cache обладает большой гибкостью, позволяя разработчикам создавать более сложную структуру кеширования, чем Nginx.
- Varnish Cache имеет встроенный механизм, который позволяет очищать контент, в то время как Nginx OSS не поддерживает это изначально (однако Nginx Plus поддерживает)
- Nginx известен своей высокоэффективной службой статического контента, особенно когда статические файлы находятся на том же сервере, что и Nginx. Если вы хотите избежать дополнительных накладных расходов за счёт внедрения новых технологий, Nginx может быть лучше.
Управление статическим контентом
Когда дело доходит до управления статическим контентом на веб-сервере, NGINX лучше справляется с управлением контентом, особенно если прокси-сервер NGINX и статические файлы сосуществуют на одном сервере. С другой стороны, при использовании Varnish Cache вам может потребоваться добавить дополнительные функции, чтобы иметь возможность управлять аналогичным контентом.
Но когда дело доходит до очистки контента, роли каждого из этих решений для кэширования меняются. NGINX, будучи сервером с открытым исходным кодом, имеет свои ограничения. Вот почему базовый NGINX-OSS не предлагает опции очистки контента. Вы всегда можете выбрать план NGINX Plus и воспользоваться функцией Fast CGI Cache Purge.
Установка nginx
Теперь мы установим Nginx. В системе с Ubuntu это сделать очень просто:
sudo apt-get install nginx
Документация Nginx содержит в себе информацию об установке Nginx на разных системах, а также пакеты для систем, которые не входят в их систему управления пакетами. Помните, что мы используем Nginx только в качестве прокси, т.е. нам не понадобится заниматься настройкой поддержки PHP или MySQL.
Подводя итоги
Глядя на приведённое выше подробное описание Varnish и NGINX, становится совершенно ясно, что Varnish предлагает более продвинутые функции, специфичные для функций кэширования, в то время как NGINX может использоваться в качестве кэширующего сервера.
Однако каждое из этих решений для кеширования имеет свои преимущества и пригодность в определённых ситуациях и сценариях. Например, если вы обеспечиваете работу веб-сайта электронной коммерции или веб-сайта СМИ, который работает с тяжёлым контентом, с высоким трафиком и ищете высокую производительность, Varnish Cache более подойдёт вам. В противном случае вам подойдёт веб-сервер с открытым исходным кодом, такой как NGINX.

