Skip to content

November 7, 2010

3

Google Apache Mod_Pagespeed Konfigürasyonu

Merhaba arkadaşlar, bu yazımızda Google ‘ın geliştirdiği Apache HTTP Server ile çalışan mod_pagespeed eklentisinin konfigürasyonu konusunda incelemeler yapacağız.

Konfigürasyonu Nereden Yapabiliriz ?

Öncelikle ModPagespeed ayarlarının sadece pagespeed.conf ve diğer server konfigürasyon dosyalarından (apache2.conf vb) yapılabileceğini söylemek istiyoruz. Yağtığımız ilk testlerde site içerisinden (.htaccess ile) bu ayarları yazmak mümkün değil gibi görünmektedir.

Herhangi bir ayar değiştirdiğinizde Apache HTTP Server ‘i yeniden başlatmanız gerektiğini unutmayın.

Kısa bir hatırlatma: Apache Mod_Pagespeed üzerine yazdığımız yazılar (bu özellik çok yeni olduğundan) ilk denemelerin hemen yansımasıdır. Yanlış olduğunu düşündüğünüz konularda lütfen iletişim kurarak yada yorum yazarak bizi uyarın.

Mod_Pagespeed ‘in Varsayılan Ayarları ?

Bu ayarlar varsayılan ubuntu kurulumu için /etc/apache2/mods-available/pagespeed.conf yolundadır.

<IfModule pagespeed_module>
    SetOutputFilter MOD_PAGESPEED_OUTPUT_FILTER
    ModPagespeed on

    # ModPagespeedUrlPrefix is the prefix assigned to some types of
    # rewritten resources. This directive will be removed in a future
    # release. For now, you must specify a URL and path for a hostname
    # that is served by this Apache
    # instance. http://yourhostname/mod_pagespeed is a good default
    # value (replace localhost, below, with the hostname of your
    # Apache instance).
    ModPagespeedUrlPrefix                "http://localhost/mod_pagespeed/"

    # The ModPagespeedFileCachePath and
    # ModPagespeedGeneratedFilePrefix directories must exist and be
    # writable by the apache user (as specified by the User
    # directive).
    ModPagespeedFileCachePath            "/var/mod_pagespeed/cache/"
    ModPagespeedGeneratedFilePrefix      "/var/mod_pagespeed/files/"

    # Override the mod_pagespeed 'rewrite level'. The default level
    # "CoreFilters" uses a set of rewrite filters that are generally
    # safe for most web pages. Most sites should not need to change
    # this value and can instead fine-tune the configuration using the
    # ModPagespeedDisableFilters and ModPagespeedEnableFilters
    # directives, below. Valid values for ModPagespeedRewriteLevel are
    # PassThrough and CoreFilters.
    #
    # ModPagespeedRewriteLevel CoreFilters

    # Explicitly disables specific filters. This is useful in
    # conjuction with ModPagespeedRewriteLevel. For instance, if one
    # of the filters in the CoreFilters needs to be disabled for a
    # site, that filter can be added to
    # ModPagespeedDisableFilters. This directive contains a
    # comma-separated list of filter names, and can be repeated.
    #
    # ModPagespeedDisableFilters rewrite_javascript

    # Explicitly enables specific filters. This is useful in
    # conjuction with ModPagespeedRewriteLevel. For instance, filters
    # not included in the CoreFilters may be enabled using this
    # directive. This directive contains a comma-separated list of
    # filter names, and can be repeated.
    #
    # ModPagespeedEnableFilters collapse_whitespace,elide_attributes

    # ModPagespeedDomain
    # authorizes rewriting of JS, CSS, and Image files found in this
    # domain. By default only resources with the same origin as the
    # HTML file are rewritten. For example:
    #
    #   ModPagespeedDomain cdn.myhost.com
    #
    # This will allow resources found on http://cdn.myhost.com to be
    # rewritten in addition to those in the same domain as the HTML.
    #
    # Wildcards (* and ?) are allowed in the domain specification. Be
    # careful when using them as if you rewrite domains that do not
    # send you traffic, then the site receiving the traffic will not
    # know how to serve the rewritten content.

    # Enables server-side instrumentation and statistics.  If this rewriter is
    # enabled, then each rewritten HTML page will have instrumentation javacript
    # added that sends latency beacons to /mod_pagespeed_beacon.  These
    # statistics can be accessed at /mod_pagespeed_statistics.  You must also
    # enable the mod_pagespeed_statistics and mod_pagespeed_beacon handlers
    # below.
    #
    # ModPagespeedEnableFilters add_instrumentation

    # This handles the client-side instrumentation callbacks which are injected
    # by the add_instrumentation filter.
    # You can use a different location by adding the ModPagespeedBeaconUrl
    # directive; see the documentation on add_instrumentation.
    #
    # <Location /mod_pagespeed_beacon>
    #       SetHandler mod_pagespeed_beacon
    # </Location>

    # This page lets you view statistics about the mod_pagespeed module.
    <Location /mod_pagespeed_statistics>
        Order allow,deny
        # You may insert other "Allow from" lines to add hosts you want to
        # allow to look at generated statistics.  Another possibility is
        # to comment out the "Order" and "Allow" options from the config
        # file, to allow any client that can reach your server to examine
        # statistics.  This might be appropriate in an experimental setup or
        # if the Apache server is protected by a reverse proxy that will
        # filter URLs in some fashion.
        Allow from localhost
        SetHandler mod_pagespeed_statistics
    </Location>
</IfModule>

Adım Adım Konfigürasyon

Yine Google ‘ın da hatırlattığı gibi mod_pagespeed ayarlarını IfModule tagı içerisine almayı unutmamamız gerekiyor.

<IfModule pagespeed_module>
....
</IfModule>

Ayrıca sadece mod_pagespeed değil diğer modüller içinde ayarları IfModule tagı içerisine almakta fayda vardır.

SetOutputFilter MOD_PAGESPEED_OUTPUT_FILTER

Bu satır tüm html dosyaları için output filter ‘i mod_pagespeed ‘e ayarlar.

ModPagespeed on

Bu satırı “on” olarak eklediğimizde pagespeed modülü aktif oluyor. Bu ayarı pagespeed.conf dosyasının en üstüne koymanız öneriliyor. Kapatmak için off kullanmanız gerekiyor.

ModPagespeedUrlPrefix                "http://localhost/mod_pagespeed/"

Yeniden yapılandırılmış/değiştirilmiş/sıkıştırılmış vb. optimizasyon yapılmış dosyalar için url öneki. Bu satırın sonraki versiyonlarda kaldırılabileceği yazıyor.

ModPagespeedFileCachePath            "/var/mod_pagespeed/cache/"

Bu ayar pagespeed ile cachingi aktif ettiğinizde cachelenen dosyaları yazacağı yer olacak. Ayrıca bu klasörün apache kullanıcısı tarafından yazma yetkisi ve cache yapılacak dosyaların disk limiti gibi sorunlara takılmaması için dikkat edilmesi gerekiyor.

ModPagespeedGeneratedFilePrefix      "/var/mod_pagespeed/files/"

Bu özellik ise pagespeed tarafından oluşturulmuş dosyalar için yine apache kullanıcısı tarafınfan yazılabilen bir klasör olması gerekiyor. Ancak Google bu özelliğin şuanda kullanılmadığını sonraki versiyonlarda gelecek olan çoklu sunucu caching için kullanılacağını söylüyor. Muhtemelen web server için birden fazla sunucu kullanıyorsanız ortak cache dosyalarını kullanması için bir özellik olacak diye tahmin ediyoruz.

# ModPagespeedRewriteLevel CoreFilters

Bu satır ise pagespeed modülünün nerelerden ayarlanabileceği (özerine yazma – override) ni belirliyor. Bunu kullanmak yerine biraz sonra değineceğimiz direktifleri kullanmanız öneriliyor.

# ModPagespeedDisableFilters rewrite_javascript

ModPagespeedDisableFilters direktifi, sistemde devre dışı bırakmak istediğiniz pagespeed modülü filtrelerini belirliyor. Virgülle birden çok filtre belirleyebilirsiniz.

# ModPagespeedEnableFilters collapse_whitespace,elide_attributes

ModPagespeedEnableFilters ise en çok kullanacağımız direktiflerden birisi. Bu satırı aktif edip yine virgülle ayrılmış bir şekilde kullanmak istediğiniz filtreleri yazıyorsunuz. Varsayılan konfigürasyona ilk defa müdahale ediyoruz ve # ‘i kaldırıyoruz. Bunu yaptığımızda collapse_whitespace ve elide_attributes filtreleri aktif oluyor. Filtreler hakkında daha fazla bilgi şu yazımızda mevcuttur.

#   ModPagespeedDomain cdn.myhost.com

Henüz çözemediğimiz bir direktif olan ModPagespeedDomain, muhtemelen birden çok site için aynı kaynağı kullanması gibi bir ayar içeriyor. Yada tum myhost.com domainlerinin statik içerikleri için cdn.myhost.com ‘u kullandır gibi bir ayarda olabilir.

# ModPagespeedEnableFilters add_instrumentation

Ve geldik biraz heyecan yaratan özelliğe. Bu direktif için ayrı bir yazı yazmayıda düşünüyoruz ancak şimdilik buradan nasıl çalıştığına değineceğiz. Bu özellik aktif edildiğinde (bağımlı olduğu direktifler var lütfen yazıyı tamamen okuyun) tüm html çıktılarını değiştirip <head>..</head> arasına ve sayfanın en sonuna </body> ‘den önce javascript dahil ediyor.

Dahil edilen javascriptler sayfanın yüklenmeye başladığı zamanı alıyor (head arasında olan) ve sayfa sonunda da bir süre alarak yüklenme süresi hakkında sunucuya bilgi gönderiyor. Bu işlemi yaparken “fake image” denilen sahte imaj yükleme tekniğini kullanıyor. Yani sunucuda bir imaj varmış gibi imaja src özelliğini vererek indirmeye çalışıyor ve GET ile bilgiler sunucuya ulaşmış oluyor. Not: DOM ‘a img tagını eklemediği için endişeye gerek yok.

Filtreyi denemek istiyorsanız yine bu direktifi de aktif ediyoruz (# ‘i kaldırıyoruz).

add_instrumentation filtresi add_head filtresine ihtiyaç duyar ve otomatik olarak aktif etmeye çalışır. Önerimiz add_instrumentation özelliğini kullanacaksanız add_head filtresini devredışı bırakmamanız yönünde.

 # <Location /mod_pagespeed_beacon>
 #       SetHandler mod_pagespeed_beacon
 # </Location>

Bu özellik (varsayılan devredışı) add_instrumentation filtresini aktif ettiğinizde sunucuya yapılacak çağrıyı karşılayacak yerin tanımıdır. Öncelikte (add_instrumentation özelliğini denemek istiyorsak) üç satırda da bulunan # leri kaldırıp özelliği aktif ediyoruz. Daha sonra hemen alt satırına da bu kodu eklemenizi öneriyoruz

ModPagespeedBeaconUrl "http://localhost/mod_pagespeed_beacon?ets="

Bu kodu eklediğinizde tüm siteler için http://localhost/mod_pagespeed_beacon adresine çağrı yapılacaktır. Bunu önermemizin sebebi apache vhost kullanıyorsanız sürekli olarak 404 hatası alabileceğinizi ve saatlerce sebebini araştırmanız gerkebileceğini tahmin ediyoruz (tecrübe ve bilgi eksikliğinden olsa gerek biz yarım gün uğraştık).

<Location /mod_pagespeed_statistics>
     Order allow,deny
     # You may insert other "Allow from" lines to add hosts you want to
     # allow to look at generated statistics.  Another possibility is
     # to comment out the "Order" and "Allow" options from the config
     # file, to allow any client that can reach your server to examine
     # statistics.  This might be appropriate in an experimental setup or
     # if the Apache server is protected by a reverse proxy that will
     # filter URLs in some fashion.
     Allow from localhost
     SetHandler mod_pagespeed_statistics
 </Location>

Ve son olarakta mod_pagespeed_statistics ayarını yaparak pagespeed.conf incelemesini bitireceğiz. Bu ayar istatistiklere kimin nasıl ulaşacağını belirtiyor. Sistem uzmanlarımız zaten Allow/Deny ayarlarını çok iyi bileceğinden bu konuya girmiyoruz. Test etmek isteyen arkadaşlar için bu ayarlar aynen kalabilir.

İstatistiklerin Gösterimi :

Adres satırından http://localhost/mod_pagespeed_statistics/ adresine girdiğinizde size mod_pagespeed istatistikleri hakkında detaylı bilgiler verir. Buradaki bilgileri başka bir yazımızda incelemeyi düşünüyoruz. Örnek ekran çıktısı şu şekildedir:

resource_fetches: 0
total_page_load_ms: 3605
page_load_count: 12
cache_extensions: 0
not_cacheable: 0
css_file_count_reduction: 0
css_filter_files_minified: 5
css_filter_minified_bytes_saved: 20
css_filter_parse_failures: 0
css_elements: 0
image_inline: 0
image_rewrite_saved_bytes: 0
image_rewrites: 0
javascript_blocks_minified: 5
javascript_bytes_saved: 370
javascript_minification_failures: 0
javascript_total_blocks: 5
url_trims: 0
url_trim_saved_bytes: 0
resource_404_count: 0
slurp_404_count: 0
serf_fetch_request_count: 0
serf_fetch_bytes_count: 0
serf_fetch_time_duration_ms: 0
serf_fetch_cancel_count: 0

Sonuç

Bu yazımızda değindiğimiz tüm filtreleri pagespeed.conf dosyasından ModPagespeedEnableFilters direktifi ile deneyebilirsiniz.

Buradan pagespeed testlerini yapabileceğiniz dosyaları indirebilirsiniz.

<< Apache mod_pagespeed Linux Üzerinde Kurulumu

Toplam 3 Yorum Yorum Yaz
  1. Evrim
    Jul 27 2011

    Merhaba,
    Öncelikle tebrik etmek isterim ki inanılmaz güzel bir site hazırlamışsınız. Bu kalitede Türkçe kaynak bulabilmek zor. Her ne kadar ingilizcem olsada ayrıntılarda zorlanıyorum. Özellikle mysql hakkındakiler çok iyi. Bende bu modülü bir süredir kullansam mı diye düşünüyordum. Kendi sitem için 1gb ramli vps im var. İyi kötü idare ediyorum ama amaç optimizasyonda kendimi geliştirmek ve siteniz tam bana hitap ediyor. Sorum şu ki bu modül hız sağlıyor fakat biraz fazla sistem kaynağı kullanıyormuş galiba. Siz test etmişsiniz, bu konuda bir gözleminiz oldumu acaba?

    Reply
  2. Jul 28 2011

    Merhaba,

    İlgilinize teşekkür ediyoruz. Bir yerden başlamak gerekiyordu ve giriş yaptık. Her ne kadar hedeflerimize zaman kısıtından dolayı geç ulaşacağız gibi görünüyor olsa da elimizden geldiğince bilgi alışverişinde bulunmaya çalışıyoruz.

    Evet modülü biraz kullanma ve test etme imkanım oldu. Yaptıkları tek kelimeyle harika. Ancak kaynak tüketimi ve standart ayarlarla sayfa oluşturulma süresini bazen uzatması gibi dezavantajlar gözüme çarptı.

    Mod_Pagespeed makaleleri sadece modülü tanıtan yazılardan ibaret olduğunu kabul ediyoruz. Asıl amacımız bunu farklı konfigürasyonlarla, yük altında, caching aktif olarak vb. kombinasyonlarla test edip uzunca bir yazı yazmamızdı.

    Burada harcanan sistem kaynağı ve süreleri çok sık değişmeyen ve kullanıcılar için ortak olan dosya çıktısını her seferinde oluşturmak yerine disk veya memcache üzerinde tutarak performans artışı sağlanabilir. Böylelikle hem sistem kaynakları serbest kalır hemde pagespeed ve yslow skorları yüksek olur.

    Tekrar teşekkür eder iyi çalışmalar dileriz.

    Reply
  3. Jul 28 2011

    Ayrıca sistem kaynağı tüketimini değerlendirirken ve Mod_Pagespeed testlerini yaparken bir sayfa ziyaretinde sadece 1 istek olmadığınu unutmamaktır. Yani css, img, js vb. tüm dosyalar yine Apache sunucusu üzerinden geçiyorsa ve ortalama bir sayfa ziyaretinde 30-40 istek yapılıyorsa bunları Mod_Pagespeed modülünden sonra ki haliyle karşılaştırıp değerlendirmek gerekir.

    Reply

Sizin fikriniz nedir? Lütfen aşağıdaki formu kullanarak yorum yapın.

(gerekli)
(gerekli)