Alter.Org.UA
 << Back Home EN en   Donate Donate

url_rewrite -- Win32 программа-хелпер для поддержки Squid storeurl_rewrite_program

About

Как уже обсуждалось в статье по кешированию YouTube, часто разные ULR'ы указывают на одни и те же ресурсы. Для того, чтобы объяснить кеш-серверу, что повторно вытягивать ресурс не нужно, хотя его имя и изменилось, Squid имеет опцию storeurl_rewrite_program. Специальная программа-помощник анализирует запрос и выдает "ключ", идентифицирующий ресурс. Идея в том, чтобы разные ссылки на один ресурс превратить в одинаковый ключ. Squid, увидев, что новый запрос имеет такой же ключ, что и ранее сохраненный, не будет лишний раз лезть в интернет, а отдаст клиенту имеющуюся у него копию. Такая себе программа - нормализатор. Это актуально для сайтов, использующих зеркалирование и CDN (т.е. размещающих копии данных на разных серверах) и для ссылок, содержащих в себе дополнительные (не важные) параметры о клиенте.

Примеры

http://vec04.maps.yandex.net/tiles?l=map&v=2.39.0&x=1197&y=693&z=11&lang=uk_UA
http://vec01.maps.yandex.net/tiles?l=map&v=2.39.0&x=1197&y=693&z=11&lang=uk_UA
http://vec01.maps.yandex.net/tiles?l=map&x=1197&y=693&z=11&lang=uk_UA&v=2.39.0

http://r12---sn-5hn7sb7k.c.youtube.com/videoplayback?algorithm=.....
...&id=d2e4d35a7a16e4c9&ip=162.25.15.93&....
http://r14---sn-57re8b9k.d.youtube.com/videoplayback?algorithm=.....
...&id=d2e4d35a7a16e4c9&ip=205.2.151.19&....

Usage

Распаковываем архив, файл url_rewrite.exe в каталог C:\Squid\libexec

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

c:\Squid\etc\squid.conf
acl store_rewrite_list url_regex -i \.youtube\.com\/get_video\?
acl store_rewrite_list url_regex -i \.youtube\.com\/videoplay.*
acl store_rewrite_list url_regex -i \.youtube\.[a-z][a-z]\/videoplayback
acl store_rewrite_list url_regex -i \.youtube\.[a-z][a-z]\/get_video\?
acl store_rewrite_list url_regex -i \.googlevideo\.com\/videoplayback\?
acl store_rewrite_list url_regex -i \.googlevideo\.com\/get_video\?
acl store_rewrite_list url_regex -i \.google\.com\/videoplayback
acl store_rewrite_list url_regex -i \.google\.com\/get_video\?
acl store_rewrite_list url_regex -i \.google\.[a-z][a-z]\/videoplayback
acl store_rewrite_list url_regex -i \.google\.[a-z][a-z]\/get_video\?
acl store_rewrite_list url_regex -i \.ytimg\.com\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)
acl store_rewrite_list url_regex -i \.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(videoplayback|videoplay|get_video)\?
acl store_rewrite_list url_regex -i (kh|mt)(.?)\.google\.com
acl store_rewrite_list url_regex -i maps\.googleapis\.com
acl store_rewrite_list url_regex -i mt\d+.googleapis\.com
acl store_rewrite_list url_regex -i vec([0-9]+)\.maps\.yandex\.net\/tiles
acl store_rewrite_list url_regex -i pvec([0-9]+)\.maps\.yandex\.net
acl store_rewrite_list url_regex -i static\.video\.yandex\.net\/(.*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4|wmw|avi|mpg|mpeg)
acl store_rewrite_list url_regex -i tub-ua\.yandex\.net
acl store_rewrite_list url_regex -i s\d+\.dotua\.org\/fsua_items.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)
acl store_rewrite_list url_regex -i fbcdn\.net.*\.(jpg|jpeg|gif|png|ico)
acl store_rewrite_list url_regex -i cdn(.?)/[0-9a-zA-Z_-]*.?\.flv
acl store_rewrite_list url_regex -i st(.*)\.userapi\.com
acl store_rewrite_list url_regex -i ecn\.dynamic\..*\.tiles\.virtualearth\.net\/comp
acl store_rewrite_list url_regex -i static\.video\.yandex\.ru\/swf
acl store_rewrite_list url_regex -i video\.meta\.ua\/players
acl store_rewrite_list url_regex -i \.vkadre\.ru\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)
acl store_rewrite_list url_regex -i (st|cs)(.?)\.vk\.me\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)
acl store_rewrite_list url_regex -i img\d+.slando\.ua\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)
acl store_rewrite_list url_regex -i .*s\d*\.staticclassifieds\.com\/static

Описываем правила обработки URL'ов в отдельном файле. Пример есть в архиве - rewrite.pl Используются perl-regexp'ы. Данный конфигурационный файл сгенерирован из perl-скрипта, выполняющего ту же ф-цию под Unix-системами.
Формат @<regexp>@<на что заменить>@
Если вы будете модифицировать правила, не забудьте также обновить store_rewrite_list.

c:\Squid\etc\rewrite.pl
        =~s@^http://(.*/videoplayback\?.*redirect=yes&.*)@http://$1@){}
        =~s@^http://(.*)/videoplayback\?(.*)&id=([a-zA-Z\d\-_]+)&.*(&range=\d*-\d*)&.*@squid://videos.youtube.INTERNAL/ID=$3$4@){}
        =~s@^http://(.*)/videoplayback\?(.*)&id=([a-zA-Z\d\-_]+)&.*@squid://videos.youtube.INTERNAL/ID=$3@){}
        =~s@^http://(.*)\.ytimg\.com\/(.*)@squid://ytimg.INTERNAL/ID=$2@){}
        =~s@^http://(.*)/videoplay\?(.*)&id=([a-zA-Z\d\-_]+)&.*(&range=\d*-\d*)&.*@squid://videos.youtube.INTERNAL/ID=$3$4@){}
        =~s@^http://(.*)/videoplay\?(.*)&id=([a-zA-Z\d\-_]+)&.*@squid://videos.youtube.INTERNAL/ID=$3@){}
        =~s@^http://(.*)/videoplay\?(.*)&id=([a-zA-Z\d\-_]+)$@squid://videos.youtube.INTERNAL/ID=$3@){}
        =~s@^http://(.*)/get_video\?(.*)video_id=([a-zA-Z\d\-_]+)&.*@squid://videos.youtube.INTERNAL/ID=$3@){}
        =~s@^http://(.*)/get_video\?(.*)video_id=([a-zA-Z\d\-_]+)@squid://videos.youtube.INTERNAL/ID=$3@){}
        =~s@^http://(.*)rapidshare(.*)/files/(.*)/(.*)/(.*)@squid://files.rapidshare.INTERNAL/$5@){}
        =~s@^http://(.*)fbcdn\.net\/(.*)\/([sp]200x200)/([a-zA-Z\d\-_]*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)@squid://files.facebook.INTERNAL/sz$4.$5@){}
        =~s@^http://(.*)fbcdn\.net\/(.*)\/([sp]\d*x\d*/[a-zA-Z\d\-_]*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)@squid://files.facebook.INTERNAL/$3.$4@){}
        =~s@^http://(.*)fbcdn\.net\/(.*)\/(.*)/([a-zA-Z\d\-_]*)\.(jpg|jpeg|gif|png|ico|mp3|flv)@squid://files.facebook.INTERNAL/$4.$5@){}
        =~s@^http://(.*)fbcdn\.net/(.*)\/([a-zA-Z\d\-_]*)\.(jpg|jpeg|gif|png|ico|mp3|flv)@squid://files.facebook.INTERNAL/$3.$4@){}
        =~s@^http://(kh|mt)(.*)\.google\.com/(.*)\/(.*)(&s=.*)@squid://$1.google.maps.INTERNAL/$3/$4@){}
        =~s@^http://(kh|mt)(.*)\.googleapis\.com/(.*)\/(.*)(&s=.*)@squid://$1.googleapis.maps.INTERNAL/$3/$4@){}
        =~s@^http://st(.*)\.userapi\.com/(.*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)@squid://userapi.com.INTERNAL/$2.$3@){}
        =~s@^http://contenidos2(.*)/(.*)@squid://files.contenidos2.INTERNAL/$2@){}
        =~s@^http://cdn(.*)/([0-9a-zA-Z_-]*?\.flv)@squid://files.cdn.INTERNAL/$2@){}
        =~s@^http://web.vxv.com/data/media/(.*)@squid://files.vxv.INTERNAL/$1@){}
        =~s@^http://ecn\.dynamic\.t(\d*).tiles\.virtualearth\.net\/comp/ch/(.*)@squid://bing.maps.INTERNAL/$2@){}
        =~s@^http://(.*)megaupload\.com/files/(.*)/(.*)@squid://files.megaupload.INTERNAL/$3@){}
        =~s@^http://(.*)mediafire\.com/(.*)/(.*)@squid://files.megaupload.INTERNAL/$3@){}
        =~s@^http://(.*)depositfiles\.com/(.*)/(.*)/(.*)@squid://files.megaupload.INTERNAL/$4@){}
        =~s@^http://(.*)\.files\.youporn\.com\/(.*)\/([0-9a-zA-Z_-]*?\.flv)\?.*@squid://videos.youporn.INTERNAL/$3@){}
        =~s@^http://(.*)\.files\.youporn\.com\/(.*)\/([0-9a-zA-Z_-]*?\.flv)@squid://videos.youporn.INTERNAL/$3@){}
        =~s@^http://(.*)\.tube8\.com\/(.*)\/([0-9a-zA-Z_-]*?\.flv)\?.*@squid://videos.tube8.INTERNAL/$3@){}
        =~s@^http://(.*)\.tube8\.com\/(.*)\/([0-9a-zA-Z_-]*?\.flv)@squid://videos.tube8.INTERNAL/$3@){}
        =~s@^http://(.*)megaporn\.com\/files\/(.*)\/(.*)@squid://files.megaporn.INTERNAL/$3@){}
        =~s@^http://static\.video\.yandex\.ru\/swf\/.*&r=(\d*).*@squid://video.yandex.INTERNAL/$1@){}
        =~s@^http://vec0\d\.maps\.yandex\.net\/tiles\?l=map&v=([\d\.]*)&x=(\d*)&y=(\d*)&z=(\d*)&g=.*@squid://vec.yandex.INTERNAL/l=map&x=$2&y=$3&z=$4&lang=uk_UA@){}
        =~s@^http://vec0\d\.maps\.yandex\.net\/tiles\?l=map&v=([\d\.]*)&x=(\d*)&y=(\d*)&z=(\d*)&lang=(.*)@squid://vec.yandex.INTERNAL/l=map&x=$2&y=$3&z=$4&lang=$5@){}
        =~s@^http://\d+\.pvec\.maps\.yandex\.net\/(.*)@squid://pvec.yandex.INTERNAL/$1@){}
        =~s@^http://static\.video\.yandex\.net\/(.*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4|wmw|avi|mpg|mpeg)\?*.*@squid://static.video.yandex.yandex.INTERNAL/$1.$2@){}
        =~s@^http://video\.meta\.ua\/players\/video\/.*fileID=([\da-zA-Z]*)&.*@squid://video.meta.ua.INTERNAL/$1@){}
        =~s@^http://s\d+\.dotua\.org\/fsua_items(.*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)@squid://dotua.org.INTERNAL/fsua/$1.$2@){}
        =~s@^http://img\d+.slando\.ua\/(.*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)@squid://img.slando.ua.INTERNAL/$1.$2@){}
        =~s@^http://(.*)\.s\d*\.staticclassifieds\.com\/static(.*)@squid://staticclassifieds.com.INTERNAL/$1/$2@){}
        =~s@^http://(st|cs)\d+\.vk\.me\/(.*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4).*@squid://$1.vk.me.INTERNAL/$2.$3@){}
        =~s@^http://video\d*\.vkadre\.ru\/assets\/(.*)\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)@squid://vkadre.ru.INTERNAL/$1.$2@){}

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

storeurl_access allow store_rewrite_list
storeurl_access deny all
storeurl_rewrite_program C:/Squid/libexec/url_rewrite.exe C:\\Squid\\etc\\rewrite.pl
storeurl_rewrite_children 5
storeurl_rewrite_concurrency 10 # since v1.3

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

c:\Squid\etc\squid.conf
#	usage: refresh_pattern [-i] regex min percent max [options]
#	The refresh_pattern lines are checked in the order listed here.
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern youtube.*videoplay  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern youtube.*get_video  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern google.*videoplay   14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern googlevideo.*get_video  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern ytimg\.com\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern (mt|kh|pap).*\.google\.com  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern (mt|kh|pap).*\.googleapis\.com  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern s\d+\.dotua\.org\/fsua_items.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern .*static\.video\.yandex\.ru\/swf\/.*&r=.*  14400   90%     24400   ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern vec.*\.maps\.yandex\.net\/tiles\?	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern static.*\.maps\.yandex\.	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern pvec.*\.maps\.yandex\.net	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern lrs\.maps\.yandex\.net\/tiles\?		14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern yandex\.st\/.*(jpg|jpeg|gif|png|ico|mp3|flv|mp4)		14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern static\.video\.yandex\.net\/.*(jpg|jpeg|gif|png|ico|mp3|flv|mp4).*		14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private ignore-auth
refresh_pattern .*ecn\.dynamic.*\.tiles\.virtualearth\.net\/comp   14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern fbcdn\.net.*\.(jpg|jpeg|gif|png|ico|mp3|flv)	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern static\.ak\.fbcdn\.net.*\.(jpg|jpeg|gif|png|ico|mp3|flv)	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern (st|cs)\d+\.vk\.me\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern img\d+.slando\.ua\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv)	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern .*s\d*\.staticclassifieds\.com\/static	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern \.vkadre\.ru\/assets\/.*\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4)	14400	90%	20080 ignore-no-cache override-expire override-lastmod ignore-reload ignore-private
refresh_pattern .*\.(css)$	1440	90%	1440 ignore-no-cache override-expire override-lastmod ignore-private
refresh_pattern .*\.(js)$	1440	90%	1440 ignore-private
refresh_pattern -i (/cgi-bin/|\?) 10	20%	120
refresh_pattern .		10	20%	4320
#	see also refresh_pattern for a more selective approach.

Перезапускаем Squid и наслаждаемся.

Download

Полностью готово к использованию.
Не требует установки никаких дополнительных файлов/библиотек. Внутри используется статическая библиотека PCRE 7.2 (входит в состав исполнимого файла).

squid_url_rewrite_v1d.rar/tgz (113.1 Kb/168.9 Kb)

History

Добавлена опция -v, включающая логирование чтения конфига. По умолчанию лишние сообщения теперь не выводятся.

squid_url_rewrite_v1d.rar/tgz (113.1 Kb/168.9 Kb)
2013.09.24

Добавлена поддержка режима storeurl_rewrite_concurrency, см. squid.conf и Squid Wiki

squid_url_rewrite_v1c.rar/tgz (113 Kb/168.8 Kb)
2013.09.24

Исправлена ошибка в поддержке "больших" наборов правил (более 32).

squid_url_rewrite_v1b.rar/tgz (110.6 Kb/166.4 Kb)
2013.09.01

1я версия. Как оказалось, имеет ограничение - 32 правила. Если попробовать использовать больше - падает.

squid_url_rewrite_v1.rar/tgz (109.7 Kb/165.5 Kb)
2012.12.31

См. также



Предложения и коментарии слать на FB or mail alterX@alter.org.ua (remove X)   Share

Автор: Alter (Александр А. Телятников) Сервер: Apache+PHP под FBSD © 2002-2024