Apache2’nin mod_deflate’i ile Trafikten Nasıl Tasarruf Edilir

Eylül 5, 2023
2
Share

Bu eğitimde, bir Apache2 web sunucusuna mod_deflate’in nasıl kurulacağını ve yapılandırılacağını anlatacağım. mod_deflate, Apache2’nin dosyaları sıkıştırmasını ve bunları sıkıştırılmış içeriği işleyebilen istemcilere (örneğin tarayıcılar) sunmasını sağlar, ki çoğu modern tarayıcı bunu yapar. mod_deflate ile HTML, metin veya XML dosyalarını orijinal boyutlarının yaklaşık %20 – 30’una sıkıştırabilir, böylece sunucu trafiğinden tasarruf edebilir ve modem kullanıcılarınızı daha mutlu edebilirsiniz.

Dosyaları sıkıştırmak sunucu üzerinde biraz daha fazla yüke neden olur, ancak deneyimlerime göre bu, istemcilerin sunucunuza bağlantı sürelerinin çok azalmasıyla telafi ediliyor. Örneğin, sıkıştırılmamış bir HTML dosyasını indirmek için yedi saniyeye ihtiyaç duyan bir modem kullanıcısı şimdi aynı ancak sıkıştırılmış dosya için yalnızca iki saniyeye ihtiyaç duyabilir.

mod_deflate kullanarak, sıkıştırılmış içeriği işleyemeyen eski tarayıcılara sahip kullanıcıları dışlamaktan korkmanıza gerek yoktur. Tarayıcı, herhangi bir dosya aktarılmadan önce sunucu ile görüşür ve tarayıcı sıkıştırılmış içeriği işleyemiyorsa, sunucu dosyaları sıkıştırılmamış olarak teslim eder.

Apache2’de mod_deflate, Apache 1.3’ün mod_gzip’inin yerini almıştır. Sıkıştırılmış dosyaları Apache 1.3 ile sunmak istiyorsanız, şu eğitime bir göz atın: mod_gzip – Apache web sunucusu tarafından sıkıştırılmış içerik sunumu

Öncelikle böyle bir sistem kurmanın tek yolunun bu olmadığını söylemek istiyorum. Bu hedefe ulaşmanın birçok yolu var ama benim izlediğim yol bu. Bunun sizin için işe yarayacağına dair herhangi bir garanti vermiyorum!

1 mod_deflate’i etkinleştir

Eğer Apache2 yüklüyse, mod_deflate de sisteminizde zaten yüklü olmalıdır. Şimdi onu etkinleştirmemiz gerekiyor. Debian’da bunu şu şekilde yapabiliriz:

a2enmod deflate

Ardından Apache2’yi yeniden başlatın:

service apache2 restart

Diğer dağıtımlarda, mod_deflate’i etkinleştirmek için Apache2’nin yapılandırmasını manuel olarak düzenlemeniz gerekebilir. LoadModule bölümüne bunun gibi bir satır eklemeniz gerekebilir:

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

mod_deflate.so’nun yolunu ayarladığınızdan emin olun ve daha sonra Apache2’yi yeniden başlatın.

2 mod_deflate’i yapılandırma

Dosyaların sıkıştırılması iki şekilde yapılandırılabilir: dosyaların uzantıya göre açık bir şekilde hariç tutulması ya da dosyaların MIME türüne göre açık bir şekilde dahil edilmesi. Mod_deflate’i tüm Apache2 sunucunuz için ya da sadece belirli sanal siteler için etkinleştirebilirsiniz. Buna bağlı olarak, ya Apache2’nizin genel sunucu yapılandırma bölümünü ya da sadece mod_deflate’i etkinleştirmek istediğiniz vhost yapılandırma bölümünü açın.

2.1 Dosyaların MIME Türüne Göre Açıkça Dahil Edilmesi

Yalnızca HTML, metin ve XML dosyalarını sıkıştırmak istiyorsanız, bu satırı yapılandırmanıza ekleyin:

AddOutputFilterByType DEFLATE text/html text/plain text/xml

Bu benim kullandığım yapılandırma çünkü görüntüleri veya PDF dosyalarını ya da zip dosyaları gibi zaten sıkıştırılmış dosyaları sıkıştırmak istemiyorum.

2.2 Dosyaların Uzantıya Göre Hariç Tutulması

Tüm dosya türlerini sıkıştırmak ve sadece birkaçını hariç tutmak istiyorsanız, yapılandırmanıza aşağıdaki gibi bir şey eklersiniz (bölüm 2.1’deki satır yerine):

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
    no-gzip dont-vary
SetEnvIfNoCase Request_URI \
    \.(?:exe|t?gz|zip|bz2|sit|rar)$ \
    no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

Bu, resimler (gif, jpg ve png), önceden sıkıştırılmış dosyalar (zip ve tar.gz gibi) ve PDF dosyaları hariç tüm dosyaları sıkıştıracaktır, bu da mantıklıdır çünkü bu dosya türlerini sıkıştırarak fazla bir şey kazanmazsınız.

2.3 Diğer Yapılandırma Direktifleri

Bölüm 2.1 veya 2.2’deki yapılandırmayı kullanmanızdan bağımsız olarak, bu satırları yapılandırmanıza eklemelisiniz:

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Bu satırlar HTML belgeleri dışındaki dosyaların sıkıştırılmasını desteklemeyen bazı eski tarayıcılar içindir.

Yapılandırma artık tamamlanmıştır ve şimdi Apache2’yi yeniden başlatmalısınız. Debian’da bunu şu şekilde yaparsınız:

service apache2 restart

Diğer yapılandırma yönergeleri hakkında bilgi edinmek için Apache Modülü mod_deflate’e bir göz atın.

3 Test Aşaması

Sıkıştırmamızı test etmek için, mod_deflate yapılandırmamıza teslim edilen dosyaların sıkıştırma oranını günlüğe kaydeden birkaç yönerge ekliyoruz. mod_deflate yapılandırmanızı açın ve aşağıdaki satırları ekleyin:

DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/apache2/deflate_log deflate

/var/log/apache2 dizinini Apache2’nin günlük dizini ile değiştirdiğinizden emin olun. Bu /var/log/httpd, /var/log/httpd2, vb. olabilir.

Ardından Apache2’yi yeniden başlatın. Debian’da bunu şu şekilde yapın:

service apache2 restart

Artık ne zaman bir dosya istense bu /var/log/apache2/deflate_log dosyasına (ya da hangi dosyaya değiştirdiyseniz oraya) kaydedilecektir. Tipik bir günlük satırı şuna benzer:

"GET /info.php HTTP/1.1" 7621/45430 (16%)

info.php dosyasının istendiğini ve teslim edildiğini görüyorsunuz. Orijinal boyutu 45430 bayttı ve 7621 bayta ya da orijinal boyutunun %16’sına sıkıştırıldı! Bu harika bir sonuçtur ve eğer web siteniz çoğunlukla HTML, metin ve XML dosyalarından oluşuyorsa, mod_deflate size çok fazla trafik kazandıracak ve düşük bant genişliğine sahip kullanıcılar için siteniz çok daha hızlı yüklenecektir.

Testlerinizden sonra artık günlüğe ihtiyacınız yoksa, bölüm 3’teki değişiklikleri geri alabilir ve Apache2’yi yeniden başlatabilirsiniz.

Yandex.Metrica