Mod_pagespeed - оптимизация работы сайта

Thank you for reading this post, don't forget to subscribe!

Mod_pagespeed – один из самых попу­ляр­ных моду­лей Apache, фильтр выво­да, функ­ци­о­наль­ность кото­ро­го мож­но настро­ить при помо­щи кон­фи­гу­ра­ци­он­ных фай­лов или фай­лов .htaccess. Фильтр выво­да – это про­грам­ма, кото­рая пре­об­ра­зу­ет дан­ные перед отправ­кой на кли­ент. Дру­ги­ми сло­ва­ми, это уро­вень меж­ду сай­том и дан­ны­ми, кото­рые полу­ча­ет бра­у­зер поль­зо­ва­те­ля при посе­ще­нии URL-адреса.

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

Установка mod_pagespeed

Уста­нов­ка mod_pagespeed доволь­но про­ста и зави­сит от опе­ра­ци­он­ной систе­мы. В Ubuntu и Debian (и в любом дру­гом дис­три­бу­ти­ве Linux, кото­рый исполь­зу­ет паке­ты .DEB) есть гото­вые паке­ты, кото­рые доста­точ­но загру­зить и уста­но­вить. В осталь­ных дис­три­бу­ти­вах нуж­но ска­чи­вать и соби­рать исходники.

В 64-бит­ной вер­сии систе­мы (реко­мен­ду­ет­ся):

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm

В 32-бит­ной вер­сии (неже­ла­тель­но):

wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.rpm

Затем набе­ри­те:

yum install at

При­ме­ча­ние: если ути­ли­та at еще не уста­нов­ле­на, используйте:

rpm -U mod-pagespeed-*.rpm

Уда­ли­те загру­жен­ный пакет:

rm mod-pagespeed-*.deb

При­ме­ча­ние: уста­нов­ка моду­ля из исход­ни­ков выхо­дит за рам­ки дан­ной статьи.

После уста­нов­ки модуль акти­ви­ру­ет­ся авто­ма­ти­че­ски. Пере­за­пу­сти­те Apache для кор­рект­ной рабо­ты mod_pagespeed:

/etc/init.d/httpd restart

Гото­во! mod_pagespeed уста­нов­лен на выде­лен­ный сер­вер и готов к рабо­те. Про­ве­рить это мож­но, про­смот­рев заго­лов­ки отве­та стра­ниц: появит­ся зна­че­ние X-Mod-Pagespeed и номер уста­нов­лен­ной вер­сии модуля.

Уста­но­воч­ный пакет mod_pagespeed обра­ба­ты­ва­ет боль­шое коли­че­ство удоб­ных кон­фи­гу­ра­ций «из короб­ки». На самом деле, Apache име­ет отдель­ные стан­дарт­ные настрой­ки для это­го моду­ля, кото­рые вклю­ча­ют­ся авто­ма­ти­че­ски. Вер­сия mod_pagespeed, кото­рая будет уста­нов­ле­на и вклю­че­на, зави­сит имен­но от вер­сии Apache. Если на сер­ве­ре исполь­зу­ет­ся Apache 2.2, будет уста­нов­лен модуль mod_pagespeed.so; поль­зо­ва­те­ли Apache 2.4 полу­чат mod_pagespeed_ap24.so.

При­ме­ча­ние: модуль mod_pagespeed рабо­та­ет на Apache 2.2 и выше. Веб-сер­вер Apache 2.4.1 не может рабо­тать с этим моду­лем из-за бага. Реко­мен­ду­ет­ся исполь­зо­вать Apache 2.4.2 и выше.

Кро­ме того, в уста­нов­ке Apache появи­лись новые кон­фи­гу­ра­ци­он­ные фай­лы. Основ­ной кон­фи­гу­ра­ци­он­ный файл, — pagespeed.conf, — мож­но най­ти в:

/etc/httpd/conf.d/

Настройка mod_pagespeed

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

При­ме­ча­ние: настрой­ки mod_pagespeed, как пра­ви­ло, инди­ви­ду­аль­ны для каж­до­го сай­та; реко­мен­ду­ет­ся поэкс­пе­ри­мен­ти­ро­вать и подо­брать наи­бо­лее под­хо­дя­щий сай­ту вариант.

Дан­ное руко­вод­ство охва­ты­ва­ет несколь­ко общих настро­ек модуля.

Способы настройки mod_pagespeed

Суще­ству­ет несколь­ко спо­со­бов настрой­ки моду­ля mod_pagespeed. Мож­но исполь­зо­вать ранее упо­мя­ну­тый кон­фи­гу­ра­ци­он­ный файл pagespeed.conf, что­бы настро­ить его для все­го сер­ве­ра. Так­же мож­но поме­стить кон­фи­гу­ра­ции в дирек­ти­ве VirtualHost для вир­ту­аль­но­го хоста или сай­та Apache. Кро­ме того, мож­но задать дирек­ти­вы в фай­ле .htaccess (что обыч­но дела­ет­ся для mod_rewrite).

Наи­ме­нее про­из­во­ди­тель­ным из всех этих вари­ан­тов явля­ет­ся послед­ний, посколь­ку сер­ве­ру при­дет­ся загру­жать файл .htaccess при каж­дом запро­се. Файл pagespeed.conf загру­жа­ет­ся вме­сте с Apache, бла­го­да­ря чему он явля­ет­ся иде­аль­ным местом для хра­не­ния настро­ек модуля.

Исполь­зо­ва­ние дирек­ти­вы VirtualHost так­же пред­по­чти­тель­нее фай­ла .htaccess (по той же при­чине). Это отлич­ный вари­ант для хра­не­ния инди­ви­ду­аль­ных настро­ек кон­крет­но­го сайта.

Для редак­ти­ро­ва­ния пере­чис­лен­ных кон­фи­гу­ра­ци­он­ных фай­лов мож­но исполь­зо­вать любой удоб­ный тек­сто­вый редак­тор (в дан­ном руко­вод­стве это nano).

Что­бы отре­дак­ти­ро­вать глав­ный кон­фи­гу­ра­ци­он­ный файл, исполь­зуй­те команду:

nano /etc/httpd/conf.d/pagespeed.conf

Базовые настройки mod_rewrite

В целом, настрой­ки в pagespeed.conf доста­точ­но непло­хо задо­ку­мен­ти­ро­ва­ны. Кро­ме того, на сай­те http://www.modpagespeed.com мож­но най­ти отлич­ный спи­сок при­ме­ров доступ­ных филь­тров. Ниже при­ве­де­но несколь­ко общих настро­ек моду­ля, с кото­ры­ми мож­но поэкс­пе­ри­мен­ти­ро­вать, что­бы опти­ми­зи­ро­вать про­из­во­ди­тель­ность сайта.

Включение/выключение mod_pagespeed

Для нача­ла попро­буй­те вклю­чить и выклю­чить модуль при помо­щи дирек­ти­вы ModPagespeed.

ModPagespeed on

или

ModPagespeed off

Уровни Rewrite

Любую кон­фи­гу­ра­цию мож­но упро­стить, ука­зав раз­ные уров­ни настро­ек. Стан­дарт­ный уро­вень назы­ва­ет­ся CoreFilters. Он содер­жит набор филь­тров, реко­мен­ду­е­мый коман­дой Google. Филь­тры – это инди­ви­ду­аль­ные дей­ствия, кото­рые выпол­ня­ют­ся на кон­крет­ный файл. В целом, менять стан­дарт­ное зна­че­ние вряд ли при­дет­ся. Про­ще исполь­зо­вать эту настрой­ку по умол­ча­нию, при необ­хо­ди­мо­сти исполь­зуя ModPagespeedEnableFilters и ModPagespeedDisableFilters, что­бы вклю­чить или отклю­чить филь­тры. Стан­дарт­ная настрой­ка выгля­дит так:

ModPagespeedRewriteLevel CoreFilters

Что­бы отклю­чить CoreFilters, используйте:

ModPagespeedRewriteLevel PassThrough

При­ме­ча­ние: при­дет­ся явно раз­ре­шить все филь­тры, кото­рые вклю­ча­ют­ся с помо­щью настрой­ки PassThrough.

Стан­дарт­ный rewrite-уро­вень CoreFilters по умол­ча­нию содер­жит мно­же­ство филь­тров, сре­ди кото­рых (на момент напи­са­ния статьи):

add_head
combine_css
convert_jpeg_to_progressive
convert_meta_tags
extend_cache
flatten_css_imports
inline_css
inline_import_to_link
inline_javascript
rewrite_css
rewrite_images
rewrite_javascript
rewrite_style_attributes_with_url

Конеч­но, в даль­ней­шем этот спи­сок будет уве­ли­чи­вать­ся. При исполь­зо­ва­нии уров­ня CoreFilters выше­пе­ре­чис­лен­ные филь­тры акти­ви­ру­ют­ся авто­ма­ти­че­ски. PassThrough потре­бу­ет явно вклю­чить новые фильтры.

Включение фильтров

Что­бы вклю­чить допол­ни­тель­ные филь­тры, нуж­но задать их в дирек­ти­ве ModPagespeedEnableFilters в виде спис­ка, раз­де­лен­но­го запятыми.

При­ме­ча­ние: В кон­фи­гу­ра­ци­он­ные фай­лы мож­но вно­сить несколь­ко дирек­тив ModPagespeedEnableFilters.

Таким обра­зом, вклю­чить опре­де­лен­ный фильтр для каж­до­го сай­та мож­но в кон­фи­гу­ра­ци­он­ном фай­ле вир­ту­аль­но­го хоста или в фай­ле .htaccess (вме­сто глав­но­го pagespeed.conf).

При­ве­ден­ный ниже при­мер демон­стри­ру­ет вклю­че­ние филь­тров Pedantic (кото­рые добав­ля­ют атри­бу­ты type в теги сти­лей и скрип­тов) и Remove Comment (уда­ля­ет ком­мен­та­рии HTML):

ModPagespeedEnableFilters pedantic,remove_comments

Отключение фильтров

Отклю­чать филь­тры так­же мож­но инди­ви­ду­аль­но. Спи­сок филь­тров, кото­рые нуж­но отклю­чить, име­ет такой же вид, что и при­ве­ден­ный ранее спи­сок дирек­ти­вы ModPagespeedEnableFilters.

Ниже при­ве­ден при­мер отклю­че­ния филь­тра Convert JPEG to Progressive (обра­ти­те вни­ма­ние: его мож­но отклю­чить, несмот­ря на то, что он явля­ет­ся частью набо­ра CoreFilters):

ModPagespeedDisableFilters convert_jpeg_to_progressive

Определение переписанных URL-адресов

По умол­ча­нию mod_pagespeed пере­пи­сы­ва­ет все, что он может пере­пи­сать. При помо­щи сле­ду­ю­щей дирек­ти­вы мож­но исклю­чить из пере­за­пи­си неко­то­рые фай­лы (напри­мер, биб­лио­те­ки Javascript):

ModPagespeedDisallow "*/jquery-ui-*.min.js"

Эта опция отклю­чит пере­за­пись фай­лов, соот­вет­ству­ю­щих задан­но­му шаб­ло­ну (jquery U в дан­ном случае).

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

ModPagespeedDisallow "*"
ModPagespeedAllow "http://*some-site.com/*/styles/*.css"
ModPagespeedAllow "http://*some-site.com/*.html"
ModPagespeedDisallow "*/notrewritten.html"

Соглас­но этим настрой­кам, все фай­лы сай­та some-site, кото­рые закан­чи­ва­ют­ся на .html, будут пере­пи­са­ны. Дирек­ти­ва Disallow зна­чит, что любой URL, кото­рый сов­па­да­ет с задан­ным в ней шаб­ло­ном, не будет пере­пи­сан, пото­му что это отме­ня­ет преды­ду­щую настройку.

Перезапуск Apache

Не забы­вай­те пере­за­пус­кать веб-сер­вер Apache после редак­ти­ро­ва­ния pagespeed.conf или VirtualHost, ина­че новые настрой­ки не будут акти­ви­ро­ва­ны. Для это­го используйте:

/etc/init.d/httpd restart

Заключение

Дан­ное руко­вод­ство зна­ко­мит с осно­ва­ми рабо­ты с моду­лем mod_pagespeed. Конеч­но, все суще­ству­ю­щие обще­сер­вер­ные и инди­ви­ду­аль­ные опции и дирек­ти­вы моду­ля невоз­мож­но охва­тить в рам­ках одной ста­тьи. Кро­ме того, модуль mod_pagespeed нахо­дит­ся на ста­дии актив­ной раз­ра­бот­ки. более подроб­ную инфор­ма­цию мож­но най­ти на http://www.modpagespeed.com.

Так­же мож­но обра­тить­ся к офи­ци­аль­но­му сай­ту mod_pagespeed.