Рубрики
Uncategorized

Nuster V5.0.0.21 выпущен. Сервер веб-кэша на основе haproxy

Nuster, кэширующий прокси-сервер на основе haproxy выпущен v5.0.0.21. Nuster Wiki |. Английский… Теги с ShowDev, DevOps, Opensource, Linux.

Настер , Кэширующий прокси-сервер на основе Haproxy выпустил V5.0.0.21.

Вики |. Английский | 中文 |. 日本語.

Высокопроизводительный сервер кеша прокси-сервера HTTP и RESTFLAFLE SERVER NOSQL Cache на основе HAProxy.

  • Введение
  • Представление
  • Начиная
  • использование
  • Директивы
  • Кэш
  • NoSQL
  • Управляющий делами
    • Статистика
    • Включить отключение правил
    • Обновление TTL.
    • Очистка
  • Магазин
  • Образец извлечений
  • Вопросы-Ответы

Nuster — это высокопроизводительный сервер кеша прокси-сервера HTTP и RESTSULE SERVER NOSQL Cache на основе HAProxy. Это 100%, совместимо с HAProxy, и в полной мере использует функциональность ACL HAProxy для обеспечения тонкозернистой политики кэширования на основе содержания запроса, ответа или состояния сервера.

Функции

Как балансировщик нагрузки HTTP/TCP

Nuster можно использовать в качестве балансировщика нагрузки HTTP/TCP, как HAProxy.

  • Все особенности HAProxy унаследованы, 100% совместимы с haproxy
  • Балансировки нагрузки
  • Https поддерживает как frontend и backend
  • HTTP сжатие
  • Перезапись HTTP и перенаправление
  • Http фиксация
  • Http2.
  • Мониторинг
  • Липкость
  • ACL и условия
  • Переключение контента

Как HTTP Cache Server

Nuster также может использоваться в качестве сервера кеша прокси-сервера HTTP, такими как лак или NGINX, чтобы кэшировать динамический и статический ответ HTTP.

  • Все функции от Haproxy (HTTPS, HTTP/2, ACL и т. Д.)
  • Чрезвычайно быстрый
  • Мощные динамические способности кэша
    • На основании HTTP-метода, URI, пути, запроса, заголовка, куки, и т. Д.
    • На основе HTTP-запроса или содержимого ответа, и т.д
    • На основе переменных среды, Серверное состояние и т. Д.
    • На основе версии SSL, SNI и т. Д.
    • На основе скорости подключения, номера, байта и т. Д.
  • Управление кэшем
  • Кешная очистка
  • Кэш статистика
  • Кэш TTL.
  • Настойчивость диска

Как RESTFLAFLE NOSQL Cache Server

Nuster также может быть использован в качестве спокойного сервера NoSQL Cache, используя HTTP Post/get/delete Чтобы установить/получить/удалить объект ключа/значения.

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

  • Все функции от Haproxy (HTTPS, HTTP/2, ACL и т. Д.)
  • Условный кэш
  • Внутренний кваш-кэш
  • Пользователь, стоящий перед спокойным кешем
  • Поддержка любых данных
  • Поддержите все языки программирования, если HTTP поддерживается
  • Настойчивость диска

Nuster очень быстрый, некоторые тесты показывают настер почти в три раза быстрее, чем Nginx, когда используя один сердечник, и почти в два раза быстрее, чем Nginx, и в три раза быстрее, чем лака, при использовании всех сердечников.

Посмотреть Подробный ориентир

Скачать

Скачать стабильную версию от Скачать Страница для производства, в противном случае Git Clone исходный код.

Строить

make TARGET=linux-glibc USE_LUA=1 LUA_INC=/usr/include/lua5.3 USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1
make install PREFIX=/usr/local/nuster

использовать Use_pthread_pshared = 1 использовать pthread lib

Опустите Use_lua = 1 lua_inc =/usr/include/lua5.3 Если ненужно

Посмотреть Haproxy Установите для деталей.

Создать файл конфигурации

Минимальный файл конфигурации: nuster.cfg.

global
    nuster cache on data-size 100m
    nuster nosql on data-size 200m
    master-worker # since v3
defaults
    mode http
frontend fe
    bind *:8080
    #bind *:4433 ssl crt example.com.pem alpn h2,http/1.1
    use_backend be2 if { path_beg /_kv/ }
    default_backend be1
backend be1
    nuster cache on
    nuster rule img ttl 1d if { path_beg /img/ }
    nuster rule api ttl 30s if { path /api/some/api }
    server s1 127.0.0.1:8081
    server s2 127.0.0.1:8082
backend be2
    nuster nosql on
    nuster rule r1 ttl 3600

Nuster слушает порта 8080 и принимает HTTP-запросы. Запросы начинаются с /_kv/ Перейти к Backend BE2. , вы можете сделать Post/get/delete Запросы на /_kv/any_key к Set/Get/Delete K/V объект. Другие запросы отправляются в Backend Be1 и будет передан на серверы S1 или S2 Отказ Среди этих запросов, /img/* будет кэшироваться на 1 день и /API/некоторые/API будет кэшироваться в течение 30 секунд.

Начинать

/usr/local/nuster/sbin/nuster -f nuster.cfg.

Докер

docker pull nuster/nuster
docker run -d -v /path/to/nuster.cfg:/etc/nuster/nuster.cfg:ro -p 8080:8080 nuster/nuster

Настерет основан на haproxy, все директивы от haproxy поддерживаются в настере.

Базовый

Есть четыре основных раздел S: глобальный , по умолчанию , Frontend и отдохнуть Как вы можете узнать в приведенном выше файле конфигурации.

  • Глобальный
    • Определяет широкие процессы и часто специфичные OS-специфические параметры
    • Nuster Cache на или Настер NoSQL на Должно быть объявлено в этом разделе, чтобы использовать функциональность кэша или NOSQL
  • по умолчанию
    • Определяет параметры по умолчанию для всех других Frontend , Backend разделы
    • и может быть перезаписан в определенные Frontend или Backend раздел
  • внешний интерфейс
    • Описывает набор прослушивающих сокетов, принимающих клиентские соединения
  • отдохнуть
    • Описывает набор серверов, к которым прокси подключится к передний входящими соединениями
    • Nuster Cache на или Настер NoSQL на должен быть объявлен в этом разделе
    • Настере правило должен быть объявлен здесь

Вы можете определить несколько Frontend или Backend разделы. Если Nuster Cache | NoSQL OFF объявлен или нет Nuster Cache | NoSQL на | Объявлен, Nuster действует так же, как Haproxy, как балансировщик TCP и HTTP.

Хотя Слушать является полным прокси с его запчастями Frestend и Backend в одном разделе, вы не можете использовать настер в Слушать , используйте внешний интерфейс и Backend Пары.

Вы можете найти документацию HAProxy в /Док и Онлайн Haproxy Documentation

Как балансировщик нагрузки TCP

frontend mysql-lb
   bind *:3306
   mode tcp
   default_backend mysql-cluster
backend mysql-cluster
   balance roundrobin
   mode tcp
   server s1 10.0.0.101:3306
   server s2 10.0.0.102:3306
   server s3 10.0.0.103:3306

Как балансировщик нагрузки HTTP/HTTPS

frontend web-lb
   bind *:80
   #bind *:443 ssl crt XXX.pem
   mode http
   default_backend apps
backend apps
   balance roundrobin
   mode http
   server s1 10.0.0.101:8080
   server s2 10.0.0.102:8080
   server s3 10.0.0.103:8080
   #server s4 10.0.0.101:8443 ssl verify none

Как HTTP Cache Server

global
    nuster cache on data-size 200m
frontend fe
    bind *:8080
    default_backend be
backend be
    nuster cache on
    nuster rule all
    server s1 127.0.0.1:8081

Как RESTFLAFLE NOSQL Cache Server

global
    nuster nosql on data-size 200m
frontend fe
    bind *:8080
    default_backend be
backend be
    nuster nosql on
    nuster rule r1 ttl 3600

Global: Nuster Manager

синтаксис:

Nuster Manager на | [URI URI] [метод очистки метода]

По умолчанию: выключенный

контекст: Глобальный

Enable Manager/STATS/PURGE API, определите метод конечной точки и очистки.

По умолчанию он отключен. Когда он включен, не забудьте ограничить доступ (см. FAQ).

Смотрите менеджер по деталям.

уваживание

Определите URI конечной точки, /nuster по умолчанию.

чистка-метод

Определите настроенный метод HTTP для очистки, это Чистка по умолчанию.

Глобал: Nuster Cache | NoSQL

синтаксис:

Nuster Cache на | Выключение [Размер данного размера] [Размер диктового размера] [DIR DIR] [DICK-CLEALER N] [CLEALER NATIOR N] [Disk-Cleaner N] [Disk-Loader N] [Диск-загрузка N]

Nuster NoSQL на | [Размер данного размера] [Размер размера DICK-DIC] [DIR DIR] [DICK-CLEILER N] [HATIO CLEALER N] [Disk-Cleaner N] [Disk-Loader N] [Disk-Saver N]

По умолчанию: никто

контекст: Глобальный

Определяет, следует ли использовать кэш/NoSQL или нет.

Зона памяти с размером Размер данных + Dict-размер будет создан.

За исключением временных данных, созданных и разрушенных в течение запроса, все данные, связанные с кэшем, включая данные HTTP, ключи и накладные расходы, хранятся в этой зоне памяти и совместно используются между всеми процессами. Если из этой памяти не может быть выделено никакой памяти, новые запросы, которые должны быть кэшированы в соответствии с определенными правилами, не будут кэшированы, если некоторая память не будет освобождена. Временные данные хранятся в пуле памяти, который распределяет память динамически из системы в случае отсутствия доступной памяти в пуле. Глобальный внутренний счетчик контролирует использование памяти всех данных HTTP-ответа во всех процессах, новые запросы не будут кэшированы, если счетчик превышает Размер данных Отказ

Размер данных

Определяет размер зоны памяти наряду с Диктовый размер Отказ

Это принимает единицы, такие как м , М С g и г . По умолчанию размер 1024 * 1024 байта, который также является минимальным размером.

диктовый размер

Определяет размер памяти, используемой хэш-таблицей.

Это принимает единицы, такие как м , М С g и г . По умолчанию размер 1024 * 1024 байта, который также является минимальным размером.

Обратите внимание, что он только решает память, используемую хеш-таблицы ведра, а не ключами. На самом деле, ключи хранятся в зоне памяти, которая ограничена Размер данных Отказ

Диктовый размер (количество ведер) отличается от Количество ключей Отказ Новые ключевые ключи все еще могут быть добавлены в таблицу HASH, даже если количество ключей превышает размер диктома (количество ведер), если достаточно памяти.

Тем не менее, это может привести к потенциальному падению производительности, если Количество ключей больше чем Диктовый размер (количество ведер) Отказ Примерное количество ключей, умноженных на 8 (обычно) как Диктовый размер все должно быть в порядке.

Размер Dict будет удален в будущем выпуске, автоматически изменяя изменение размера хэш-таблица в первой версии, будет добавлена обратно.

дир

Укажите корневой каталог настойчивости диска. Это должно быть установлено, чтобы использовать настойчивость диска.

диктопил

До V2.x, задачи менеджера, такие как удаление недействительных данных кэша, сброса записей DICT выполняются в итерациях в каждом HTTP-запросе. Соответствующие показатели или указатели увеличиваются или продвигаются в каждой итерации.

В V3.x эти задачи перемещаются в основной процесс, а также выполняются в итерациях, и эти параметры могут быть установлены для управления количеством раз определенной задачи во время одной итерации.

Во время одной итерации Диктопильщик Записи проверены, неверные записи будут удалены (по умолчанию 100).

очиститель данных

Во время одной итерации очиститель данных Данные проверяются, неверные данные будут удалены (по умолчанию 100).

Очиститель диска

Если настойчивость диска включена, данные хранятся в файлах. Эти файлы проверяются основным процессом и будут удалены, если истек, например, истек.

Во время одной итерации Уборщик дисков Файлы проверяются, неверные файлы будут удалены (по умолчанию 100).

диск-погрузчик

После запуска Nuster Master Process будет загружать информацию о данных, ранее хранящихся на диске в память.

Во время одной итерации Диск-погрузчик Файлы загружены (по умолчанию 100).

дисковое устройство

Главный процесс спасет синхронизация диска Периодически хранится данные.

Во время одной итерации Диск-заставка Данные проверяются и сохраняются на диск при необходимости (по умолчанию 100).

Смотрите магазин для деталей.

прокси: Nuster Cache | NoSQL

синтаксис:

Nuster Cache [On | Off]

Nuster NoSQL [на | OFF]

По умолчанию: на

контекст: отдохнуть

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

прокси: Настере

синтаксис:

Настере имя правила [ключ ключей] [TTL TTL] [Extend Extend] [код кода] [память на | OFF] [диск на | выключен | синхронизация] [Etag на | Off] [Последнее изменение | OFF] [если | Если только состояние]

По умолчанию: никто

контекст: отдохнуть

Определите правило для указания кэш/NoSQL Создание условий, свойств. Должно быть определено хотя бы одно правило.

nuster cache on

# cache request `/asdf` for 30 seconds
nuster rule asdf ttl 30 if { path /asdf }

# cache if the request path begins with /img/
nuster rule img if { path_beg /img/ }

# cache if the response header `cache` is `yes`
acl resHdrCache res.hdr(cache) yes
nuster rule r1 if resHdrCache

Возможно и рекомендуется объявить несколько правил в том же разделе. Заказ важен, потому что соответствующий процесс останавливается на первом матче.

acl pathA path /a.html
nuster cache on
nuster rule all ttl 3600
nuster rule path01 ttl 60 if pathA

Правило Path01 никогда не будет соответствовать, потому что первое правило будет все кэшировать.

название

Определите имя для этого правила.

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

ключевой ключ

Определите ключ для кэша/NoSQL, он берет строку в сочетании следующих ключевых слов с Отказ разделитель:

  • Метод: HTTP-метод, Get/Post …
  • Схема: http или https
  • Хозяин: хост по запросу
  • Uri: Первая косушка до конца URL
  • Путь: УРЛ путь запроса
  • Разделитель: ‘? Если запрос существует иначе пусто
  • Запрос: целая строка запроса запроса
  • Header_Name: значение заголовка НАЗВАНИЕ
  • Cookie_Name: значение cookie НАЗВАНИЕ
  • param_name: значение запроса НАЗВАНИЕ
  • Тело: тело запроса

Ключ кэша по умолчанию — method.scheme.host.uri и ключ по умолчанию NoSQL IS Get.scheme.host.uri Отказ

Пример

GET http://www.example.com/q?name=X&type=Y

http header:
GET /q?name=X&type=Y HTTP/1.1
Host: www.example.com
ASDF: Z
Cookie: logged_in=yes; user=nuster;

Должен привести:

  • Метод: ПОЛУЧИТЬ
  • Схема: http.
  • Хозяин: www.example.com.
  • Uri:
  • путь:/q
  • Разделитель:?
  • запрос:
  • header_asdf: Z
  • Пользователь Cookie: BUSTER
  • param_type: Y
  • Тело: (пусто)

Поэтому ключ по умолчанию производит Получить \ 0http \ 0www.example.com \ 0/Q? Имя = X & type = y \ 0 и Ключевой метод .scheme.host.path.header_asdf.cookie_user.param_type производит Получить \ 0http \ 0www.example.com \ 0/q \ 0z \ 0nuster \ 0y \ 0 Отказ

\ 0 это нулевой характер

Если запрос имеет один и тот же ключ, что и кэшированный файл ответа HTTP, то кэшированные данные будут отправлены клиенту.

TTL TTL.

Установите ключ TTL, после истечения истечения TTL ключ будет удален.

Это принимает единицы, такие как D , h , m и S Отказ TTL по умолчанию IS 0 который не истекает ключ.

TTL может быть автоматически расширен с использованием простираться ключевое слово.

продлить продлить

Автоматически расширить TTL.

Формат

простираться на | OFF | N1, N2, N3, N4

По умолчанию: ВЫКЛ.

N1, N2, N3, N4: положительное целое число менее 100, а N1 + N2 + N3 составляет менее 100. Вместе они определяют четыре временных интервала следующим образом:

time:       0                                                       ttl         ttl * (1 + n4%)
access:     |            A1             |   A2    |   A3    |   A4    |         |
            |---------------------------|---------|---------|---------|---------|
percentage: |<- (100 - n1 - n2 - n3)% ->|<- n1% ->|<- n2% ->|<- n3% ->|<- n4% ->|

TTL будет продлен, если:

  1. A4> A3> A2.
  2. Новый запрос имеет место между TTL и TTL * (1 + N4%)

на равна 33,33,33,33

Кодовой код1, код2 …

Кэш только если код состояния ответа является кодом.

По умолчанию только 200 ответов кэшируется. Вы можете использовать все кэшировать все ответы.

nuster rule only200
nuster rule 200and404 code 200,404
nuster rule all code all

память на |

Сохраните данные в память или нет, по умолчанию.

Смотрите магазин для деталей.

диск на | выкл | синхронизация

Сохраните данные на диск или нет, а как, выключен по умолчанию.

Память на должен быть установлен для использования синхронизация диска режим.

Смотрите магазин для деталей.

ЭТАГ на |

Включить обработку условных запросов Etag. Добавить Etag заголовок, если отсутствует.

По умолчанию выключен.

Последнее модифицированное на |

Включить последнюю модифицированную обработку условных запросов. Добавить Последнее модифицированное заголовок, если отсутствует.

По умолчанию выключен.

Если | Если только состояние

Определите, когда кэшируйте использование haproxy acl.

Оценка включает в себя два этапа: этап запроса и стадии реагирования.

Кэш будет выполнен, если:

  1. Оценка на этапе запроса верна,
  2. Оценка на этапе запроса ложная, но верна на стадии реагирования.

Пожалуйста, будьте очень осторожны, если вы используете отрицание в условиях или образцах, недоступных на определенном этапе

Например,

  1. Кэш Если путь запроса начинается с /img/

    Настере правило IMG, если {path_beg/img/}

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

  1. Кэш, если Content-Type В ответ это image/jpeg.

    Настере правило JPEG, если {res.hdr (тип контента)/jpeg}

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

  1. Кэш, если путь запроса начинается с /img/ и Content-Type В ответ это image/jpeg.

Это не будет работать, если вы определите правило как:

nuster rule img if { path_beg /img/ } { res.hdr(Content-Type) image/jpeg }

потому что путь не доступен на этапе ответа и res.hdr не доступен на этапе запроса, поэтому оценка никогда не будет правдой.

В заказе сделать эту работу, путь необходимо выделить для дальнейшего использования в этапе «Ответ»:

http-request set-var(txn.pathImg) path
acl pathImg var(txn.pathImg) -m beg /img/
acl resHdrCT res.hdr(Content-Type) image/jpeg
nuster rule r3 if pathImg resHdrCT
  1. Другой пример, кэш, если путь запроса не начинается с /API/

Это не будет работать ни один:

acl NoCache path_beg /api/
nuster rule r3 if !NoCache

Потому что оценка Nocache против /API/ На этапе запроса верно, а отрицание ложно, что является желаемым состоянием, но на этапе ответа, оценка Nocache всегда ложно, как путь не доступен на этапе ответа, и он будет кэшироваться как отрицание ! Nocache правда.

Это будет работать:

http-request set-var(txn.path) path
acl NoCache var(txn.path) -m beg /api/
nuster rule r1 if !NoCache

Я добавлю несколько новых методов Femse Fetch для упрощения такого рода задач в будущих версиях.

Посмотреть 7 Использование ACL и выборки образцов Раздел в Конфигурация haproxy

Nuster можно использовать в качестве сервера кеша прокси-сервера HTTP, например, лак или nginx, чтобы кэшировать динамический и статический ответ HTTP.

Вы можете использовать функциональные возможности HAProxy для завершения SSL, Normize HTTP, поддерживают HTTP2, переписать URL-адрес или изменять заголовки и т. Д., И дополнительные функции, предоставленные Nuster для управления кэшем.

global
    nuster cache on data-size 200m
frontend fe
    bind *:8080
    default_backend be
backend be
    nuster cache on
    nuster rule r1 if { path /a1 }
    nuster rule r2 key method.scheme.host.path.delimiter.query.cookie_userId if { path /a2 }
    nuster rule r3 ttl 10 if { path /a3 }
    nuster rule r4 disk only if { path /a4 }

    server s1 127.0.0.1:8081

Когда запрос принят, Nuster проверит правила один за другим. Ключ будет создан и используется для поиска в кэше, и если это удар, кэшированные данные будут возвращены клиенту. В противном случае ACL будет протестирован, и если он пройдет тест, ответ будет кэшироваться.

Nuster можно использовать в качестве спокойного сервера Cache NoSQL, используя HTTP Post/get/delete Чтобы установить/получить/удалить объект ключа/значения.

Основные операции

Набор

curl -v -X POST -d value1 http://127.0.0.1:8080/key1
curl -v -X POST --data-binary @icon.jpg http://127.0.0.1:8080/imgs/icon.jpg

Получить

Curl -V http://127.0.0.1:8080/key1.

Удалить

Curl -v -x удалить http://127.0.0.1:8080/key1

Ответ

Проверьте код состояния.

  • 200 ОК
    • Опубликовать/получить: преуспевать
    • Удалить: всегда
  • ошибка 400, неверный запрос
    • пустое значение
    • Неправильный ACL, правила и т. Д.
  • 404 не обнаружена
    • Пост: не удалось по всем тестам правила
    • Получить: нет нашел
  • 405 Метод не допускается
    • другие методы
  • внутренняя ошибка сервера 500
    • Любая ошибка возникает
  • 507 недостаточное хранение
    • превышает максимальный размер данных

Данные по пользователю

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

nuster rule r1 key method.scheme.host.uri.header_userId if { path /mypoint }
nuster rule r2 key method.scheme.host.uri.cookie_sessionId if { path /mydata }

Набор

curl -v -X POST -d "333" -H "userId: 1000" http://127.0.0.1:8080/mypoint
curl -v -X POST -d "555" -H "userId: 1001" http://127.0.0.1:8080/mypoint

curl -v -X POST -d "userA data" --cookie "sessionId=ijsf023xe" http://127.0.0.1:8080/mydata
curl -v -X POST -d "userB data" --cookie "sessionId=rosre329x" http://127.0.0.1:8080/mydata

Получить

curl -v http://127.0.0.1:8080/mypoint
< 404 Not Found

curl -v -H "userId: 1000" http://127.0.0.1:8080/mypoint
< 200 OK
333

curl -v --cookie "sessionId=ijsf023xe" http://127.0.0.1:8080/mydata
< 200 OK
userA data

Клиенты

Вы можете использовать любые инструменты или Libs, которые поддерживают http: Curl , почтальон , Python Запросы пойти Net/http , и т.д.

Nuster можно управлять через API менеджера, какие конечные точки определяются URI и можно получить доступ, сделав HTTP-запросы вместе с некоторыми заголовками

Включить и определить конечную точку URI и очистить метод

nuster manager on uri /internal/nuster purge-method PURGEX

Использование матрицы

ПОЛУЧИТЬ / внутренний / настер получить статистику
ПОЧТА / внутренний / настер Включить и отключить правило, обновить TTL
УДАЛИТЬ / внутренний / настер Усовершенствованный кэш чистки
Пургекс / Любой / реальный / путь базовая чистка

Статистика

Nuster Cats можно получить доступ, создавая HTTP-запрос на конечную точку, определяемую URI ;

использование

Curl http://127.0.0.1/internal/nuster.

Вывод

**NUSTER**
nuster.cache:                   on
nuster.nosql:                   on
nuster.manager:                 on

**MANAGER**
manager.uri:                    /nuster
manager.purge_method:           PURGE

**MEMORY**
memory.common.total:            1048576
memory.common.used:             1600
memory.cache.total:             2098200576
memory.cache.used:              1048960
memory.nosql.total:             11534336
memory.nosql.used:              1048960

**DISK**
disk.cache.dir:                 /tmp/nuster/cache
disk.cache.loaded:              no
disk.nosql.dir:                 /tmp/nuster/nosql
disk.nosql.loaded:              no

**STATISTICS**
statistics.cache.total:         0
statistics.cache.hit:           0
statistics.cache.fetch:         0
statistics.cache.abort:         0
statistics.nosql.total:         0
statistics.nosql.get:           0
statistics.nosql.post:          0
statistics.nosql.delete:        0

**PROXY cache app1**
app1.rule.rule1:                state=on  memory=on  disk=off   ttl=10
app1.rule.rule2:                state=on  memory=on  disk=on    ttl=10
app1.rule.rule3:                state=on  memory=on  disk=sync  ttl=10
app1.rule.rule4:                state=on  memory=off disk=on    ttl=10
app1.rule.rule5:                state=on  memory=off disk=off   ttl=10

**PROXY nosql app2**
app2.rule.ruleA:                state=on  memory=on  disk=off   ttl=10
app2.rule.ruleB:                state=on  memory=on  disk=on    ttl=10
app2.rule.ruleC:                state=on  memory=on  disk=sync  ttl=10
app2.rule.ruleD:                state=on  memory=off disk=on    ttl=10
app2.rule.ruleE:                state=on  memory=off disk=off   ttl=10

Включить и отключить правило

Правило можно отключить во время выполнения через Manager URI. Правило отключенного пользователя не будет обработана, и не будет создан кеш.

заголовки

включить государство Включить правило
запрещать Отключить правило
Название правила название правило, которое будет включено / отключено
Имя прокси Все правила имени прокси
* Все правила

Имейте в виду, что если имя не уникально, все Правила с этим именем будут отключены/включены.

Примеры

  • Отключить правило R1

Curl -x post -h «Имя: R1» -H «Состояние: Отключить «http://127.0.0.1/nuster.

  • Отключить все правила, определенные в Proxy App1b

Curl -x post -h «Имя: app1b» -h «Состояние: Отключить» http://127.0.0.1/nuster

  • Включить все правила

Curl -x post -h «Название: *» -H «Состояние: включить» http://127.0.0.1/nuster

Обновление TTL.

Изменить TTL. Это только влияет на TTL ответов, чтобы быть кэшированным, не Обновите TTL существующих кэшей.

заголовки

Новый TTL. ттл Смотрите TTL в правиле настера
Название правила название правило, которое будет изменено
Имя прокси Все правила имени прокси
* Все правила

Примеры

curl -X POST -H "name: r1" -H "ttl: 0" http://127.0.0.1/nuster
curl -X POST -H "name: r2" -H "ttl: 2h" http://127.0.0.1/nuster

Обновление состояния и TTL

Состояние и TTL могут быть обновлены одновременно

curl -X POST -H "name: r1" -H "ttl: 0" -H "state: enabled" http://127.0.0.1/nuster

Очистка

Существует два режима продувки: базовый и продвинутый.

  • базовый: Отправить HTTP-метод, определенный Очистка-метод MyPurge на путь, который вы хотите удалить
  • Advanced: Отправить Удалить метод в УРИ менеджера, определяемый уваживание

Базовая продувка

Этот метод удаляет конкретный URL, который требуется, как это:

Curl -xpurge http://127.0.0.1/imgs/test.jpg.

Ключ создается таким же образом, когда кеш создан, за исключением того, что Метод это Получить Отказ

Примечание по умолчанию Cache Cache содержит Хозяин Если вы кэшируете запрос, как http://example.com/test и очистить от localhost, вам нужно указать Хозяин Заголовок:

Curl -xpurge -h «Хост: example.com» http://127.0.0.1/test

Работает как для кеша, так и для NoSQL, это псевдоним Удалить в режиме NoSQL.

Расширенная продувка: продувка по имени

Кэш может быть очищен, сделав HTTP Удалить просит менеджеру URI вместе с Имя Заголовок

заголовки

Настере имя правила название Кэши, созданные правилом $ {name}, будут очищены
Имя прокси кеши прокси $ {имя}

Примеры

# purge all caches of proxy applb
curl -X DELETE -H "name: app1b" http://127.0.0.1/nuster
# purge all caches of rule r1
curl -X DELETE -H "name: r1" http://127.0.0.1/nuster

Расширенная продувка: очистить хост

Вы также можете очистить кеш-хост, все кэши с этим хостом будут удалены:

заголовки

ХОЗЯИН хозяин $ {хозяин}
ХОЗЯИН застенчик Настер-хост имеет более высокий приоритет над хостом
кэш, nosql. Режим Шутер Cache или NoSQL Data

Примеры

curl -X DELETE -H "nuster-host: 127.0.0.1:8080" http://127.0.0.1/nuster

Продвинутая продувка: продувка по пути

По умолчанию часть запроса также используется в качестве клавиши кэша, поэтому будет несколько кеши, если запрос отличается.

Например, для правила Настере правило IMGS, если {path_beg/imgs/} , и запрос

curl http://127.0.0.1/imgs/test.jpg?w=120&h=120
curl http://127.0.0.1/imgs/test.jpg?w=180&h=180

Поскольку клавиша по умолчанию будет два объекта кэша.

Для того, чтобы удалить это, вы может

Удалить один на один, если вы знаете все запросы

curl -XPURGE http://127.0.0.1/imgs/test.jpg?w=120&h=120
curl -XPURGE http://127.0.0.1/imgs/test.jpg?w=180&h=180

Это не работает, если вы не знаете все запросы.

Используйте настроенный ключ и удалите один раз в случае, если часть запроса не имеет значения

Определите ключ, как Настере правило IMGS ключевой метод .scheme.host.Path Если {path_beg/imgs} Таким образом, будет создан только один кеш, и вы можете очистить без запроса:

Curl -xpurge http://127.0.0.1/imgs/test.jpg.

Это не работает, если требуется часть запроса.

Удалить по имени правила

Curl -x удалить -H «Имя: IMGS» http://127.0.0.1/nuster

Это не работает, если правило настерна определяется что-то вроде Настере правило статическое Если {path_beg/imgs//css/} Отказ

Этот метод обеспечивает способ очистки только по пути:

заголовки

ДОРОЖКА дорожка кэши с $ {путь} будет очищен
ХОЗЯИН хозяин и хозяин $ {хозяин}
ХОЗЯИН застенчик Настер-хост имеет более высокий приоритет над хостом
кэш, nosql. Режим Шутер Cache или NoSQL Data

Примеры

#delete all caches which path is /imgs/test.jpg
curl -X DELETE -H "path: /imgs/test.jpg" http://127.0.0.1/nuster
#delete all caches which path is /imgs/test.jpg and with host of 127.0.0.1:8080
curl -X DELETE -H "path: /imgs/test.jpg" -H "nuster-host: 127.0.0.1:8080" http://127.0.0.1/nuster

Расширенная очистка: очистка по регуляторам Regex

Вы также можете очистить кеш по Regex, кэширует, какой путь соответствует Regex, будет удален.

заголовки

Regex. regex. кэширует, какой путь соответствует с $ {Regex} будет очищен
ХОЗЯИН хозяин и хозяин $ {хозяин}
ХОЗЯИН застенчик Настер-хост имеет более высокий приоритет над хостом
кэш, nosql. Режим Шутер Cache или NoSQL Data

Примеры

#delete all caches which path starts with /imgs and ends with .jpg
curl -X DELETE -H "regex: ^/imgs/.*\.jpg$" http://127.0.0.1/nuster
#delete all caches which path starts with /imgs and ends with .jpg and with host of 127.0.0.1:8080
curl -X DELETE -H "regex: ^/imgs/.*\.jpg$" -H "127.0.0.1:8080" http://127.0.0.1/nuster

Очистить осторожность

  1. Включить ограничение доступа

  2. Если есть смешанные заголовки, используйте приоритет Имя , Путь и хост , путь , Regex & Host , regex. , хозяин

Curl -x delete -h "Имя: pault1" -h "Путь:/imgs/a.jpg" : очистить по имени

  1. Если есть избыточные заголовки, используйте первое вхождение

Curl -x delete -h "Имя: rue1" -h "Имя: reval2" : очистить от правило

  1. Regex это НЕТ Глобай

Например, все файлы JPG под/imgs должны быть ^/IMGS/.* \. JPG $ вместо /imgs/*.jpg.

  1. Очистные файлы кеша по имени правила или имени прокси работает только в текущем сеансе. Если Nuster перезагружается, то файлы кэширования не могут быть очищены именем правила или именем прокси, поскольку информация, такое название правила и имя прокси не сохраняется в кэше.

  2. Очистные файлы кеша по хосту или пути или Regex работают только после завершения процесса дискового загрузчика. Вы можете проверить статус через статистику URL.

Настер (оба кеша, так и NoSQL) поддерживает различные бэкэндские магазины. В настоящее время поддерживается память и диск. Больше магазинов будут добавлены.

объем памяти

Данные хранятся в область памяти, размер которой определяется Размер данных Отказ Данные не сохраняются в памяти и проиграют после перезапуска.

Диск

Данные хранятся на диске и по пути, определенным дир . Данные сохраняются после перезагрузки.

Есть 3 режима:

  • OFF: по умолчанию, отключить настойчивость диска.
  • на: Сохраните данные на диск.
  • Синхронизация: Память на должен быть установлен, чтобы использовать этот режим. Сохранить данные в память, сначала и данные будут синхронизированы на диск позже главным процессом. Одна итерация Диск-заставка Данные проверяются и сохранены на диск.

Nuster представил следующие образцы

nuster.cache.hit: логический

Возвращает логическое значение, указывающее, является ли это хитом или нет и может использоваться как

http-response set-header x-cache hit if { nuster.cache.hit }

Не может начать: не в режиме мастера-работника

Установить Мастер-работник в глобальный раздел или начать настраивать с -W .

Как отлаживать?

Установить Отладка в глобальный раздел или начать настраивать с -d .

Связанные настраиваемые сообщения об отладки начнутся с [Настерет Отказ

Как кэшировать запрос на запрос?

Включить Опция HTTP-буфер-запрос и установить Тело В кеше правил ключ .

По умолчанию ключ кэша не включает в себя тело запроса, не забудьте поставить Тело в ключевом поле.

Обратите внимание, что размер тела запроса должен быть меньше Tune.bufsize - Tune.maxrewrite - request_header_size , который по умолчанию это 16384 - 1024 - request_header_size Отказ

Обратитесь к Опция HTTP-буфер-запрос и Tune.bufsize Раздел в Конфигурация HAProxy для деталей.

Кроме того, это может быть хорошая идея, чтобы поставить его отдельно на выделенную бэкэнду, как пример.

Как ограничить доступ?

Вы можете использовать мощный Haproxy ACL, что-то вроде этого

acl network_allowed src 127.0.0.1
acl purge_method method PURGE
http-request deny if purge_method !network_allowed

Как включить http2

bind :443 ssl crt pub.pem alpn h2,http/1.1
global
    nuster manager on uri /_/nuster purge-method MYPURGE
    nuster cache on data-size 100m
    nuster nosql on data-size 100m
    master-worker # since v3
    # daemon
    # debug
defaults
    retries 3
    option redispatch
    timeout client  30s
    timeout connect 30s
    timeout server  30s
frontend web1
    bind *:8080
    mode http
    acl pathPost path /search
    use_backend app1a if pathPost
    default_backend app1b
backend app1a
    balance roundrobin
    # mode must be http
    mode http

    # http-buffer-request must be enabled to cache post request
    option http-buffer-request

    acl pathPost path /search

    # enable cache for this proxy
    nuster cache

    # cache /search for 120 seconds. Only works when POST/PUT
    nuster rule rpost key method.scheme.host.uri.body ttl 120 if pathPost

    server s1 10.0.0.10:8080
backend app1b
    balance     roundrobin
    mode http

    nuster cache on

    # cache /a.jpg, not expire
    acl pathA path /a.jpg
    nuster rule r1 ttl 0 if pathA

    # cache /mypage, key contains cookie[userId], so it will be cached per user
    acl pathB path /mypage
    nuster rule r2 key method.scheme.host.path.delimiter.query.cookie_userId ttl 60 if pathB

    # cache /a.html if response's header[cache] is yes
    http-request set-var(txn.pathC) path
    acl pathC var(txn.pathC) -m str /a.html
    acl resHdrCache1 res.hdr(cache) yes
    nuster rule r3 if pathC resHdrCache1

    # cache /heavy for 100 seconds if be_conn greater than 10
    acl heavypage path /heavy
    acl tooFast be_conn ge 100
    nuster rule heavy ttl 100 if heavypage tooFast

    # cache all if response's header[asdf] is fdsa
    acl resHdrCache2 res.hdr(asdf)  fdsa
    nuster rule resCache ttl 0 if resHdrCache1

    server s1 10.0.0.10:8080

frontend web2
    bind *:8081
    mode http
    default_backend app2
backend app2
    balance     roundrobin
    mode http

    # disable cache on this proxy
    nuster cache off
    nuster rule all

    server s2 10.0.0.11:8080

frontend nosql_fe
    bind *:9090
    default_backend nosql_be
backend nosql_be
    nuster nosql on
    nuster rule r1 ttl 3600
  • Присоединяйтесь к развитию
  • Дать обратную связь
  • Отчет о проблемах
  • Отправить запросы на потяну
  • Распространять настере

Copyright (C) 2017 подарок, Цзян Вэньюань

Все права защищены.

Лицензированные под GPL, так же, как Haproxy

Haproxy и другие источники лицензионные уведомления: см. Соответствующие отдельные файлы.

Оригинал: «https://dev.to/nuster/nuster-v5-0-0-21-released-a-web-cache-server-based-on-haproxy-5gbd»