Здравейте! Като доставчик на Varnish видях от първа ръка колко е важно да се напише ефективен код на Varnish Configuration Language (VCL). В тази публикация в блога ще споделя някои съвети и трикове как да пишете VCL като професионалист.
Разбиране на основите на VCL
Първо, нека поговорим какво е VCL. Varnish е ускорител на уеб приложения (известен също като кеш), който се намира пред вашия уеб сървър. VCL е езикът за програмиране, използван за конфигуриране на Varnish. Тя ви позволява да контролирате как се държи Varnish, като например какви заявки да кешира, колко дълго да ги кешира и какво да правите, когато възникне пропуск в кеша.
VCL кодът е организиран в подпрограми, които са като функции в други езици за програмиране. Всяка подпрограма има специфична цел и Varnish извиква тези подпрограми на различни етапи от процеса на заявка и отговор. Някои от най-важните подпрограми включватvcl_recv,vcl_hash,vcl_backend_fetch, иvcl_deliver.
Започвайки с проста VCL конфигурация
Когато тепърва започвате с VCL, добра идея е да започнете с проста конфигурация. Ето пример за основен VCL файл:


vcl 4.0; бекенд по подразбиране { .host = "127.0.0.1"; .port = "8080"; } sub vcl_recv { return (pass); } sub vcl_backend_response {връщане (доставяне); } sub vcl_deliver {връщане (доставяне); }
В този пример ние дефинираме бекенд сървър на127.0.0.1:8080. Thevcl_recvподпрограмата се извиква, когато Varnish получи клиентска заявка. В този случай ние просто предаваме заявката към бекенд сървъра, без да я кешираме. Thevcl_backend_responseподпрограмата се извиква, когато Varnish получи отговор от бекенд сървъра и ние доставяме отговора на клиента. Thevcl_deliverподпрограмата също се използва за доставяне на отговора на клиента.
Стратегии за кеширане
Една от основните причини да използвате Varnish е да кеширате съдържанието и да намалите натоварването на вашите бекенд сървъри. Има няколко стратегии за кеширане, които можете да използвате във VCL, в зависимост от нуждите на вашето приложение.
Кеширане на статично съдържание
Статичното съдържание, като изображения, CSS файлове и JavaScript файлове, е чудесен кандидат за кеширане. Можете да конфигурирате Varnish да кешира тези файлове за дълго време. Ето пример за това как да кеширате статично съдържание:
sub vcl_recv { if (req.url ~ "\.(jpg|jpeg|png|gif|css|js)$") { return (хеш); } връщане (предаване); }
В този пример, ако URL адресът на заявката завършва с.jpg,.jpeg,.png,.gif,.css, или.js, изпращаме заявката доvcl_hashподпрограма за кеширане. В противен случай предаваме заявката към бекенд сървъра.
Кеширане на динамично съдържание
Кеширането на динамично съдържание може да бъде малко по-трудно, тъй като трябва да се уверите, че кешираното съдържание все още е валидно. Можете да използвате техники като кеш тагове и сурогатни ключове, за да управлявате кеша за динамично съдържание. Ето пример как да използвате кеш тагове:
sub vcl_backend_response { if (beresp.http.X-Cache-Tag) { set beresp.http.X-Cache-Tags = beresp.http.X-Cache-Tag; } връщане (доставяне); } sub vcl_purge { if (req.http.X-Cache-Tags) {ban("obj.http.X-Cache-Tags ~ " + req.http.X-Cache-Tags); } return (synth(200, "Purged")); }
В този пример, когато бекенд сървърът задаваX-кеш-тагзаглавка, копираме го вX-Cache-Tagsзаглавка в отговора на Varnish. Когато се появи заявка за прочистване сX-Cache-Tagsзаглавка, забраняваме всички обекти, които съответстват на таговете на кеша.
Обработка на пропуски в кеша
Когато възникне пропуск в кеша, Varnish трябва да извлече съдържанието от бекенд сървъра. Можете да използватеvcl_backend_fetchподпрограма за контрол на това как Varnish извлича съдържанието. Ето един пример:
sub vcl_backend_fetch { set bereq.http.User-Agent = "Varnish Cache"; връщане (извличане); }
В този пример задавамеПотребителски агентзаглавка в заявката към бекенд сървъра към „Varnish Cache“, преди да извлече съдържанието.
Използване на разширени VCL функции
Varnish има няколко разширени функции, които можете да използвате, за да персонализирате поведението му.
Манипулиране на HTTP заглавки
Можете да манипулирате HTTP заглавки във Varnish, за да добавяте, премахвате или променяте заглавки. Ето пример за това как да добавите персонализирана заглавка:
sub vcl_deliver { set resp.http.X-Custom-Header = "Това е персонализирана заглавка"; връщане (доставяне); }
В този пример добавяме персонализирана заглавка, нареченаX-Custom-Headerна отговора, преди да го достави на клиента.
Условна логика
Можете да използвате условна логика във Varnish, за да вземате решения въз основа на заявката или отговора. Ето пример за това как да използвате условна логика за пренасочване на заявки:
sub vcl_recv { if (req.url == "/old-page") { return (synth(301, "http://example.com/new-page")); } връщане (предаване); }
В този пример, ако URL адресът на заявката е/стара страница, изпращаме пренасочване 301 къмhttp://example.com/нова-страница.
Нашите лакови продукти
Като доставчик на лакове, ние предлагаме гама от висококачествени лакови продукти. Разгледайте нашитеБезцветен лак на водна основа,Матово горно покритие на водна основа, иПолиуретанов гланц на водна основа. Тези продукти са подходящи за различни приложения и могат да осигурят отлична защита и покритие.
Заключение
Писането на ефективен VCL код отнема време и практика, но си заслужава усилието. Чрез разбиране на основите на VCL, използване на подходящи стратегии за кеширане и използване на разширени функции, можете да оптимизирате производителността на вашето уеб приложение и да намалите натоварването на вашите бекенд сървъри.
Ако се интересувате от нашите лакови продукти или се нуждаете от повече информация относно конфигурацията на VCL, не се колебайте да се свържете с нас за обсъждане на поръчката. Ние сме тук, за да ви помогнем да намерите най-добрите решения за вашите нужди.
Референции
- Документация за лак
- Различни онлайн ресурси за Varnish и уеб кеширане
