Добро пожаловать!






  Правила
 Забыли пароль?
 Регистрация

Разное полезное:

Главная arrow Документация arrow Описание и настройка HandyCache
Описание и настройка HandyCache Печать E-mail
Автор DenZzz   
08.12.2006 г.
Оглавление
Описание и настройка HandyCache
Настройки / Общие
Настройки / Кэш
Настройки / Списки
Настройка браузеров
Скрипты Lua в HandyCache

Скрипты Lua в HandyCache






В HandyCache c помощью скриптов Lua можно обрабатывать заголовки запросов клиента и ответов сервера и выполнять следующие действия:

  • остановить загрузку файла;
  • отдать файл из кэша или сформировать свой произвольный ответ;
  • принудительно сохранять/не сохранять файл в кэш;
  • изменять заголовки запроса или ответа;
  • осуществлять управление скоростью закачки определенных типов файлов;
  • настроить ограничения трафика и скорости пользователей;
  • отключать проверку определенных списков в зависимости от пользователей или прочих условий;
  • и другое...

Чтобы опробовать работу скриптов, необходимо скачать архив hc_script.zip и распаковать его в папку НС.
Подробное описание см. ниже.



Для начала использования скриптов в HandyCache необходимо:

  • в папке HC должен находиться файл библиотеки lua5.x.dll (из архива hc_script.zip), файл-список luaR.lst (для обработки запросов клиента) и lua.lst (для обработки ответов удаленного сервера);
  • скрипты должны храниться в подкаталоге \lua (примеры скриптов можно найти в файлах _first_req.lua и first.lua или скачать рабочие скрипты с оф.форума );
  • в список Серверов-посредников необходимо добавить 2 строки (использовать команду Добавить из буфера):
    #5#~#True#~#lua2#~#script://lua/request#~#luaR.lst#~#.*
    #5#~#True#~#lua#~#script://lua/answer#~#lua.lst#~#.*

В списке Серверов-посредников может быть несколько строк с файлами-списками для скриптов.


В файле lua.lst (luaR.lst) должны быть строки вида:

rule <script=lua\scriptname.lua>

здесь rule - правило, при выполнении которого будет работать скрипт из файла lua\scriptname.lua.
Правило может представлять из себя регулярное выражение (признак регулярного выражения - символ # в первой позиции строки), упрощенное правило (начинается с символа + и может содержать шаблоны * и ?) или просто строку символов. В последнем случае заданная строка ищется в URL запроса и если таковая найдена, то правило считается выполненным.
Если в первой позиции строки стоит символ !, то правило считается исключением. Если выполняется исключение, то все правила, расположенные ниже этого исключения, пропускаются до конца файла или строки <new_block>.
Если строка начинается с символа ; - это комментарий.


Пример файла-списка:

; Файл-список скриптов LUA для обработки заголовков ответов сервера
;------------------------------------------------------------------

!#_rtsi?_|rts_chart_ru|informer\.rts\.ru/|/graph/plot\.swf$|/graphs/micex_
!#^http://192\.168\.\d+\.

#.  <script=lua\save_or_block_403_and_404.lua>
#.  <script=lua\dont_update_image_by_type.lua>
#.  <script=lua\dont_update_file_by_size.lua>
#.  <script=lua\block_long_file.lua>

; Еще несколько строк для примера:
!otc-stock.rbc.ru/targets/graph.ser?
rbc.ru <script=lua\ex1.lua>
<new_block>
!+citforum.ru/?ab/*.html
+img?.narod.ru/*.gif <script=lua\ex2.lua>

Все скрипты, соответствующие сработавшим правилам, будут запущены НС в том порядке, в котором они расположены в файле-списке.
При выполнении скрипта HC всегда ищет и запускает функцию main. Скрипт может использовать предопределенные глобальные переменные.


Глобальные переменные скриптов:

Название

Место

Допустимые значения

Описание

hc_url Запросы, Ответы В соответствие с RFC 2616 п.3.2.2 URL запроса
hc_method Запросы, Ответы В соответствие с RFC 2616 п.9 Метод, использованный в запросе
hc_header Запросы, Ответы В соответствие с RFC 2616 Заголовок, передаваемый скрипту. Если скрипт изменяет этот заголовок, то он помещает результат в эту же переменную. В этом случае он должен присвоить переменной hc_header_replace значение true
hc_header_replace Запросы, Ответы true, false Флаг изменения заголовка hc_header скриптом.
hc_cache_file_size Запросы, Ответы <число> Размер файла в кэше (-1 если файла нет).
hc_cache_file_age Запросы, Ответы <число> Возраст файла в кэше в секундах.
hc_cache_file_content_type Запросы, Ответы "<строка>" Тип содержимого файла в кэше.
hc_user_name Запросы, Ответы "<строка>" Имя пользователя, от которого поступил запрос.
hc_user_from_internet Запросы, Ответы <число> Количество данных, полученных пользователем из интернета за текущие сутки.
hc_user_from_cache Запросы, Ответы <число> Количество данных, полученных пользователем из кэша за текущие сутки.
hc_user_to_internet Запросы, Ответы <число> Количество данных, отправленных пользователем за текущие сутки.
hc_answer_header Запросы В соответствие с RFC 2616 Заголовок ответа, сформированный скриптом. Если этой переменной присвоено значение, то клиенту будет передан этот заголовок.
hc_answer_body Запросы, Ответы "<строка>",
"file=<имя файла>",
"file=URLToCache(<URL>)"
Тело ответа, сформированное скриптом. Если переменной hc_answer_header (hc_header - для скриптов ответов) и этой переменной присвоены значения, то клиенту будет передано содержимое этой переменной в качестве тела ответа.
Переменная hc_answer_body вместо непосредственно тела ответа может содержать также имя файла, который будет использован в качестве тела ответа ("file=c:\abc\qwerty.html"), или URL ("file=URLToCache(http://site.ru/abc.gif)"). В последнем случае в качестве тела ответа будет использован файл в кэше, соответствующий указанному URL.
hc_action Запросы, Ответы Для Запросов:
"stop",
"dont_update",
"only_from_cache",
Для Ответов:
"stop",
"dont_update",
"save",
"dont_save"
Действие, которое должен выполнить НС:
  • "stop" - заблокировать загрузку;
  • "dont_update" - не обновлять файл (отдать из кэша).
  • "only_from_cache" - если файл есть в кэше, то отдать его клиенту, иначе заблокировать загрузку.
  • "save" - записать файл в кэш;
  • "dont_save" - не записывать файл в кэш, даже если сработал список Запись в кэш.
hc_white_mask Запросы "<строка>" Маска Белого списка - в эту переменную можно добавить по одному символу для каждого из списков, если нужно, чтобы этот список не работал с данным запросом. Для обозначения списков можно использовать символы:
  • W или Б - Белый список
  • B или Ч - Черный список
  • S или З - список Запись в кэш
  • D или Н - список Не обновлять
  • O или Т - список Только из кэша
  • R или А - список Переадресация
  • U или П - список Преобразование URL
Символы могут быть строчные или заглавные. Например, для выключения Черного списка, списка Только из кэша и списка Преобразование URL значение переменной может быть такое: hc_white_mask="ЧТu".
hc_file_speed_limit Запросы, Ответы <число> Если этой переменной присвоить значение больше 0, то это значение будет использоваться как лимит скорости (в байтах в секунду) для загрузки данного файла.
hc_user_speed_limit Запросы, Ответы <число> Если этой переменной присвоить значение больше 0, то это значение будет использоваться как лимит скорости (в байтах в секунду) для данного пользователя до задания другого значения или перезапуска HandyCache. hc_user_speed_limit=0 снимает ограничения скорости для данного пользователя.

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

После выполнения последнего скрипта НС передает измененные заголовки, выполняет действие hc_action, применяет маску Белого списка hc_white_mask или ограничивает скорость закачки в соответствие с hc_file_speed_limit или hc_user_speed_limit.

Информацию о языке Lua можно найти, например, здесь: по-английски или по-русски.

В файле LuaTest.exe из архива hc_script.zip находится программа для тестирования работы скриптов.
Примеры скриптов можно найти в файлах _first_req.lua и first.lua или скачать рабочие скрипты с оф.форума.