Как да конфигурираме Squid да ползва refresh patterns
Squid може да бъде конфигуриран така че да удовлетворява дори най-взискателните конфигурации. При последните версии могат да се конфигурират поне 250 отделни параметъра. Стандартния конфигурационен файл се намира в /etc/squid.conf и заедно с коментарите достига 4600 реда. Конфигурирането на приложението може да се окаже предизвикателство дори за напреднали администратори.
Препоръчително е да имате голяма кеш, която няма да се напълни за по-малко от седмица. Добре е да се запълни за около месец. Разбира се големината на кеша е в зависимост от трафика който минава през мрежата. Колкото е по-голям кешът толкова е по-вероятно файла който се търси.
Refresh patterns указват какво се запазва и какво се обслужва от кеша. По принцип бихте искали сървъра да казва на вашия squid какво и за колко време да кешира. Тези опции се изпращат като HTTP хедъри, които Squid разбира. За нещастие обаче повечето сървъри използват настройките по подразбиране и не може да се спести много трафик.
Refresh patterns са в следния формат:
refresh_pattern [-i] regex min percent max [options]
където min и max са минималното и максималното време в минути, а percent са проценти. Възможните опции са :
- override-expire -- игнорира expire хедъра от уеб сървъра.
- override-lastmod -- игнорира последния модифициран едър от уеб сървъра.
- reload-into-ims -- reload заявката от клиента се трансформита в If-Modified-Since заявка.
- ignore-reload -- игнорира client's no-cache или "reload from origin server" директивите. Заявката може да бъде изпълнена от кеша ако е възможно.
- ignore-no-cache -- a no-cache directive from the Web server which makes an object non-cacheable is ignored.
- ignore-no-store -- a no-store directive from the Web server which makes an object non-cacheable is ignored.
- ignore-private -- a private directive from the Web server which makes an object non-cacheable is ignored.
- ignore-auth -- objects requiring authorisation are non-cacheable. This option overrides this limitation.
- refresh-ims -- a refresh request from a client is converted into an If-Modified-Since request.
Проверете в конфигурационния файл кои от тези опции са допустими във вашата версия на Squid.
Refresh patterns са ефективни ако няма expire хедър от уеб сървъра или refresh pattern-а съдържа override-expire опцията. Например:
refresh_pattern -i \.gif$ 1440 20% 10080.
Това означава:
- Ако няма expire хедър за всичко обекти, чиито имена завършват на .gif or .GIF (това са картинки) тогава:
- ако не са по стари от 1,440 минути(колко време обекта е бил в кеша), тогава обслужи обекта и спри
- ако обекта е по стар от 10,080 минути, копирай го от уеб сървъра и спри
- ако възрастта е между минималната и максималната стойност , използвай lm-factor за да определиш дали обекта е валиден. lm-factor е отношението между възрастта на обекта в кеша и периода за който се променя на уеб сървъра като процент. Така че ако обекта е бил създаден преди 10,000 минути на уеб сървъра и е бил в кеша за 1,800 минути lm-factor-а е 1,800/10,000 = 18%.
- Ако lm-factor-а е по-малко от процента в нашия refresh pattern (20%) тогава обслужи обекта и спри
- в противен случай копирай нова версия от уеб сървъра.
За обекти, които много рядко се променят под едно и също име(видео, картинки, звуци, изпълними файлове, архиви) може да накарате Squid да ги пази за по-дълго време в кеша:
refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.index.(html|htm)$ 0 40% 10080 refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320 refresh_pattern . 0 40% 40320
Понякога, за нещастие от наша гледна точка, сървъри като youtube.com, правят всичко възможно за да предотвратят кеширане на тяхното съдържание. По-горните опции би трябвало да ви помогнат да преодолеете това тяхно поведение.
Refresh patterns се изпълняват за всички заявки от горе надолу докато се намери правило което съответства. Последното правило ще съответства на всички заявки, които не съответстват на нито едно правило.
По принцип Squid няма да кешира динамично съдържание. Динамичното съдържание отговаря на "cgi-bin" или "?". Тази опция се активира в по-новите версии на Squid чрез refresh_pattern (/cgi-bin/|\?) 0 0% 0. Това ви дава възможност да определите кои сайтове имат динамично съдържание и кои могат да прескачат това правило. Ако направите следния refresh pattern:
refresh_pattern -i movies.com/.* 10080 90% 43200 refresh_pattern (/cgi-bin/|\?) 0 0% 0
Тогава дори в адреса на movies.com да има "?" съдържаните ще се кешира ако всички други условия са спазени.
Squid прави доста DNS заявки. По една dns заявка за всяка http заявка. Добра идея е да се инсталира кеширащ DNS сървър, за да се намали броя на DNS заявките.
Сайтове като Microsoft-ския windowsupdate.com, които се ползват от много компютри за да си обновяват операционните системи, са тези, които използват най-много трафик. За нещастие обаче тези сайтове не могат да се кешират понеже предлагат частични отговори (http код 206), които не могат да бъдат кеширани от Squid на този етап. В такъв случай бихте могли да ограничим трафика към тези сайтове в определен период.
Тук конфигурираме ограничение 64Kbps (8KBps), при който трафикът за windowsupdate.com по време на пиковите периоди от 10:00-16:00 ще е ограничен на 64Kbps.
acl winupdate dstdomain .windowsupdate.com acl peakperiod time 10:00-16:00 delay_pools 1 delay_class 1 1 # 64 Kbit/s delay_parameters 1 8000/8000 delay_access 1 allow winupdate peakperiod
След като направих гореспоменатите промени, Squid започна да кешира до 26-37%, за разлика от 8% преди това.
Possibly Related Posts:
- Оптимизиране на Firefox с tmpfs
- Системни статистики с vmstat
- drop_caches
- Конфигуриране на ядрото: Поддръжка на мрежови протоколи
- Конфигуриране на ядрото