Как настроить Varnish Cache 4.0 с SSL-терминацией в Ubuntu 14.04

Вступление

В этом руководстве мы рассмотрим, как использовать Varnish Cache 4.0 для повышения производительности вашего существующего веб-сервера. Мы также покажем вам способ добавить поддержку HTTPS в Varnish, при этом Nginx выполняет завершение SSL. Предположим, что у вас уже настроен сервер веб-приложений, и в качестве отправной точки мы будем использовать общий сервер LAMP (Linux, Apache, MySQL, PHP).

Varnish Cache - это кеширующий обратный прокси-сервер HTTP или HTTP-ускоритель, который сокращает время, необходимое для предоставления контента пользователю. Основным методом, который он использует, является кэширование ответов от веб-сервера или сервера приложений в памяти, поэтому будущие запросы на тот же контент можно обслуживать без необходимости извлекать его с веб-сервера. Производительность может быть значительно улучшена в различных средах, и это особенно полезно, когда у вас есть насыщенные контентом динамические веб-приложения. Varnish был построен с использованием кэширования в качестве основной функции, но он также имеет и другие применения, такие как балансировка нагрузки обратного прокси.

Во многих случаях Varnish хорошо работает со своими настройками по умолчанию, но имейте в виду, что он должен быть настроен для повышения производительности определенных приложений, особенно тех, которые используют файлы cookie. Глубокая настройка Varnish выходит за рамки этого урока.

Предпосылки

В этом руководстве предполагается, что у вас уже есть сервер веб-приложений, который прослушивает HTTP (порт 80) на своем частном IP-адресе. Если у вас еще не настроен веб-сервер, используйте следующую ссылку для настройки собственного стека LAMP:How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 14.04. Мы будем называть этот серверLAMP_VPS.

Existing Environment

Вам нужно будет создать новый Ubuntu 14.04 VPS, который будет использоваться для вашей установки Varnish. Создайте пользователя без полномочий root с разрешениями sudo, выполнив шаги 1-4 в файлеinitial server setup for Ubuntu 14.04 guide. Мы будем называть этот серверVarnish_VPS.

Имейте в виду, что сервер Varnish будет получать пользовательские запросы и должен иметь соответствующий размер для ожидаемого объема трафика.

Наша цель

Our Goal

Наша цель - настроить Varnish Cache перед нашим сервером веб-приложений, чтобы запросы могли обрабатываться быстро и эффективно. После настройки кэширования мы покажем вам, как добавить поддержку HTTPS в Varnish, используя Nginx для обработки входящих запросов SSL. После завершения настройки трафик HTTP и HTTPS увидит преимущества кеширования в производительности.

Теперь, когда у вас есть установленные предпосылки, и вы знаете, что вы пытаетесь создать, давайте начнем!

Установить лак

Рекомендуемый способ получить последнюю версию Varnish 4.0 - установить пакет, доступный через официальный репозиторий.

Ubuntu 14.04 поставляется сapt-transport-https, но просто запустите следующую команду наVarnish_VPS, чтобы убедиться:

sudo apt-get install apt-transport-https

Теперь добавьте ключ Varnish GPG в apt:

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add -

Затем добавьте репозиторий Varnish 4.0 в ваш список подходящих источников:

sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list'

Наконец, обновите apt-get и установите Varnish с помощью следующих команд:

sudo apt-get update
sudo apt-get install varnish

По умолчанию Varnish настроен на прослушивание порта6081 и ожидает, что ваш веб-сервер находится на том же сервере и прослушивает порт8080. Откройте браузер и перейдите к порту 6081 вашего сервера (замените выделенную часть своим публичным IP-адресом или доменом):

http://varnish_VPS_public_IP:6081

Поскольку мы установили Varnish на новый VPS, при посещении порта6081 на публичном IP-адресе или доменном имени вашего сервера будет возвращена следующая страница с ошибкой:

503 Error

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

Настроить Лак

Сначала мы настроим Varnish на использование нашегоLAMP_VPS в качестве бэкэнда.

Файл конфигурации Varnish находится в/etc/varnish/default.vcl. Давайте отредактируем это сейчас:

sudo vi /etc/varnish/default.vcl

Найдите следующие строки:

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

И измените значенияhost иport на соответствие частному IP-адресу вашего LAMP-сервера и порту прослушивания соответственно. Обратите внимание, что мы предполагаем, что ваше веб-приложение прослушивает свой частный IP-адрес и порт 80. Если это не так, измените конфигурацию в соответствии с вашими потребностями:

backend default {
    .host = "LAMP_VPS_private_IP";
    .port = "80";
}

Varnish имеет функцию, называемую «льготный режим», которая при включении инструктирует Varnish обслуживать кэшированную копию запрошенных страниц, если серверная часть веб-сервера выходит из строя и становится недоступной. Давайте включим это сейчас. Найдите следующий блокsub vcl_backend_response и добавьте к нему следующие выделенные строки:

sub vcl_backend_response {
    set beresp.ttl = 10s;
    set beresp.grace = 1h;
}

Это устанавливает льготный период для кэшированных страниц равным одному часу, что означает, что Varnish будет продолжать обслуживать кэшированные страницы в течение часа, если не сможет добраться до вашего веб-сервера в поисках новой копии. Это может быть удобно, если ваш сервер приложений выходит из строя и вы предпочитаете, чтобы устаревший контент доставлялся пользователям вместо страницы с ошибкой (например, ошибка 503, которую мы видели ранее), а вы возвращаете свой веб-сервер обратно.

Сохраните и выйдите из файлаdefault.vcl.

Мы хотим настроить Varnish на прослушивание порта HTTP по умолчанию (80), чтобы ваши пользователи могли получить доступ к вашему сайту, не добавляя необычный номер порта в ваш URL. Это можно установить в файле/etc/default/varnish. Давайте отредактируем это сейчас:

sudo vi /etc/default/varnish

Вы увидите много строк, но большинство из них закомментированы. Найдите следующую строкуDAEMON_OPTS (она уже должна быть раскомментирована):

DAEMON_OPTS="-a :6081 \

Параметр-a используется для назначения адреса и порта, на котором Varnish будет прослушивать запросы. Давайте изменим его для прослушивания порта HTTP по умолчанию, порт 80. После вашей модификации это должно выглядеть так:

DAEMON_OPTS="-a :80 \

Сохранить и выйти.

Теперь перезапустите Varnish, чтобы изменения вступили в силу:

sudo service varnish restart

Теперь протестируйте его с помощью веб-браузера, посетив ваш сервер Varnish по его общедоступному IP-адресу, на этот раз через порт 80 (HTTP):

http://varnish_VPS_public_IP

Вы должны увидеть то же, что подается из вашего LAMP_VPS. В нашем случае это просто обычная страница Apache2 Ubuntu:

Apache2 Ubuntu Default Page

На данный момент Varnish кэширует наш сервер приложений - надеюсь, вы увидите преимущества в производительности за счет сокращения времени отклика. Если у вас было доменное имя, указывающее на ваш существующий сервер приложений, вы можете изменить его запись DNS, чтобы она указывала на вашVarnishVPSpublic_IP.

Теперь, когда мы настроили базовое кэширование, давайте добавим поддержку SSL с Nginx!

Поддержка SSL с Nginx (необязательно)

Varnish изначально не поддерживает SSL-терминацию, поэтому мы установим Nginx с единственной целью обработки трафика HTTPS. Мы рассмотрим шаги по установке и настройке Nginx с самозаверяющим SSL-сертификатом и обратному прокси-трафику от соединения HTTPS до Varnish по HTTP.

Если вам нужно более подробное объяснение настройки самоподписанного сертификата SSL с помощью Nginx, перейдите по этой ссылке:SSL with Nginx for Ubuntu. Если вы хотите опробовать сертификат от StartSSL,here is a tutorial that covers that.

Давайте установим Nginx.

Установить Nginx

НаVarnish_VPS давайте установим Nginx с помощью следующей команды apt:

sudo apt-get install nginx

После завершения установки вы заметите, что Nginx не работает. Это связано с тем, что по умолчанию он настроен на прослушивание порта 80, но Varnish уже использует этот порт. Это нормально, потому что мы хотим прослушивать порт HTTPS по умолчанию, порт 443.

Давайте создадим SSL-сертификат, который мы будем использовать.

Создать самозаверяющий сертификат SSL

НаVarnish_VPS создайте каталог, в котором можно разместить сертификат SSL:

sudo mkdir /etc/nginx/ssl

Создайте самоподписанный 2048-битный ключ SSL и пару сертификатов:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

Убедитесь, что вы установилиcommon name в соответствии с вашим доменным именем. Срок действия данного сертификата истекает через год.

Теперь, когда у нас есть сертификат, давайте настроим Nginx для его использования.

Настроить Nginx

Откройте конфигурацию блока сервера Nginx по умолчанию для редактирования:

sudo vi /etc/nginx/sites-enabled/default

Удалите все в файле и замените его следующим (и изменитеserver_name в соответствии с вашим доменным именем):

server {
        listen 443 ssl;

        server_name example.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }
}

Сохранить и выйти. Приведенная выше конфигурация имеет несколько важных строк, которые мы объясним более подробно:

  • ssl_certificate: указывает местоположение сертификата SSL

  • sslcertificatekey: указывает местоположение ключа SSL

  • listen 443 ssl: настраивает Nginx для прослушивания порта 443

  • server_name: указывает имя вашего сервера и должно совпадать с общим именем вашего сертификата SSL

  • proxy_pass http://127.0.0.1:80;: перенаправляет трафик на Varnish (который работает на 80-м порту 127.0.0.1 (т.е. localhost)

Остальные строкиproxy_set_header указывают Nginx пересылать информацию, такую ​​как IP-адрес исходного пользователя, вместе с любыми запросами пользователей.

Теперь давайте запустим Nginx, чтобы наш сервер мог обрабатывать HTTPS-запросы.

sudo service nginx start

Теперь протестируйте его с помощью веб-браузера, посетив ваш сервер Varnish по его общедоступному IP-адресу, на этот раз через порт 443 (HTTPS):

https://varnish_VPS_public_IP

Note: Если вы использовали самозаверяющий сертификат, вы увидите предупреждение вроде «Сертификат безопасности сайта не является доверенным». Поскольку вы знаете, что только что создали сертификат, продолжить можно безопасно.

Опять же, вы должны увидеть ту же страницу приложения, что и раньше. Разница в том, что вы на самом деле посещаете сервер Nginx, который обрабатывает шифрование SSL и перенаправляет незашифрованный запрос в Varnish, который обрабатывает запрос, как обычно.

Настройка внутреннего веб-сервера

Если ваш серверный веб-сервер привязан ко всем своим сетевым интерфейсам (т.е. интерфейсы общедоступной и частной сети), вам нужно изменить конфигурацию вашего веб-сервера, чтобы он прослушивал только свой частный интерфейс. Это сделано для того, чтобы пользователи не могли напрямую получить доступ к вашему внутреннему веб-серверу через его общедоступный IP-адрес, что могло бы обойти ваш Varnish Cache.

В Apache или Nginx для этого потребуется назначить значение директивlisten для привязки к частному IP-адресу вашего внутреннего сервера.

Устранение неполадок лака

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

Статистика

Если вы хотите получить представление о том, насколько хорошо работает ваш кеш, вам нужно взглянуть на командуvarnishstat. Запустите это так:

varnishstat

Вы получите экран, который выглядит следующим образом:

Varnish Stats

Появляется большое разнообразие характеристик, и с помощью стрелок вверх / вниз для прокрутки вы увидите краткое описание каждого элемента. Статистикаcache_hit показывает, сколько запросов было обслужено с кешированным результатом - вы хотите, чтобы это число было как можно ближе к общему количеству клиентских запросов (client_req).

Для выхода нажмитеq.

Logs

Если вы хотите получить подробное представление о том, как Varnish обрабатывает каждый отдельный запрос, в виде журнала потоковой передачи, вам нужно будет использовать командуvarnishlog. Запустите это так:

varnishlog

Как только он запустится, попробуйте получить доступ к вашему серверу Varnish через веб-браузер. Для каждого запроса, отправляемого в Varnish, вы увидите подробный вывод, который можно использовать для устранения неполадок и настройки конфигурации Varnish.

Для выхода нажмитеCTRL + C.

Заключение

Теперь, когда перед вашим веб-сервером установлен сервер Varnish Cache, в большинстве случаев вы увидите повышение производительности. Помните, что Varnish очень мощный и настраиваемый, и может потребоваться дополнительная настройка, чтобы получить полную выгоду от него.

Related