1. Anasayfa
  2. Blog
  3. SEO Kılavuzları

Yüksek Performans İçin Apache Web Sunucu Optimizasyonu

Yüksek Performans İçin Apache Web Sunucu Optimizasyonu

Apache HTTP Server (httpd), hâlâ dünya çapında milyonlarca web sitesinin omurgasını oluşturan güçlü ve açık kaynaklı bir web sunucusudur. Ancak performansı artırmak ve yüksek trafikli ortamlarda verimliliği sürdürebilmek için doğru yapılandırmak gerekir. Bu rehberde, S-sunucunuzun daha hızlı, daha verimli ve daha güvenilir çalışmasını sağlamak için apache sunucu optimizasyonunun nasıl yapılacağını adım adım öğreneceksiniz.

Apache sunucunuzun neden yavaş çalıştığını anlamadan optimizasyon yapmaya çalışmak, karanlıkta ok atmaya benzer. Öncelikle sorunun kaynağını tespit etmeniz gerekiyor. Peki Apache sunucuları genellikle neden yavaşlar?

  • Bellek Yönetimi Sorunları- Apache, varsayılan ayarlarıyla her istek için yeni bir süreç (process) oluşturur. Eğer sunucunuzda yeterli RAM yoksa veya bellek limitleri düşükse, sistem swap alanını kullanmaya başlar ve her şey yavaşlar.
  • Aşırı Yüklenmiş Bağlantılar– Çok fazla eşzamanlı bağlantı, Apache’nin nefes almasını engeller. MaxClients ve ServerLimit gibi parametreler yanlış ayarlandığında sunucu tam kapasite çalışsa bile istekleri işleyemez.
  • Disk I/O Darboğazları– Her istek için disk okuma/yazma işlemleri yapılıyorsa, özellikle mekanik hard diskler bu süreci yavaşlatır. Log dosyaları, oturum verileri ve dinamik içerik üretimi disk performansını doğrudan etkiler.
  • Gereksiz Modüller– Apache kurulumunda varsayılan olarak gelen onlarca modül var. Bunların çoğunu muhtemelen hiç kullanmıyorsunuz ama her biri bellek ve işlemci gücü tüketiyor. Kullanmadığınız her modül ekstra yük demektir.

Bu sorunların çoğu birbirine bağlı. Örneğin, gereksiz modüller bellek kullanımını artırır, bu da disk swap’ına yol açar ve sonuçta tüm sistem yavaşlar. Şimdi bu sorunları nasıl çözeceğinize geçelim. Her optimizasyon adımını uygularken, değişiklikleri yavaş yavaş yapın ve her adımda sunucunuzun performansını ölçün. Böylece hangi değişikliklerin gerçekten fark yarattığını görebilirsiniz.

1. Doğru MPM Modülünü Seçimi

Apache’nin performans optimizasyonunda ilk ve en kritik adımlardan biri doğru Multi-Processing Module (MPM) seçimidir. MPM, Apache’nin istekleri nasıl işleyeceğini belirleyen temel mimaridir. Üç ana seçenek var ve her birinin güçlü ve zayıf yönleri bulunuyor.

  • Prefork MPM– En eski ve en kararlı seçenek. Her istek için ayrı bir süreç oluşturur ve bu süreçler birbirinden tamamen izole çalışır. Bu MPM modülü, küçük ve orta ölçekli web siteleri için ideal bir tercihtir; sade, güvenilir ve kolayca kullanılabilir bir yapıya sahiptir. Ancak, tek iş parçacıklı tasarımı, yüksek trafikli web siteleri için verimlilik kaybına yol açabilir. Prefork MPM, yalnızca web sitesi kodunun Event veya Worker gibi daha verimli MPM’lerle uyumsuz olduğu özel senaryolarda kullanılmalıdır.
  • Worker MPM- İşlem gereksinimlerini karşılamak için iş parçacıklarını kullanan daha sofistike bir MPM modülüdür. Bu özellik, yüksek trafikli web siteleri için büyük bir verimlilik artışı sağlar, ancak aynı zamanda daha karmaşık bir yapılandırma söz konusu olabilir. MPM Worker, özellikle Apache tarafından işlenen trafiğin büyük bir kısmının HTTPS protokolü tarafından şifrelendiği durumlarda büyük bir fayda sağlar.
  • Event MPM– En modern ve performanslı seçenek. Worker’ın geliştirilmiş versiyonu, uzun süreli bağlantıları (keep-alive) çok daha verimli yönetir. Apache 2.4+ kullanıyorsanız ve yüksek trafikli modern web uygulamalarınız varsa kullanabilirsiniz. En düşük kaynak kullanımı ile en yüksek performansı sunar.

Hangi MPM modülünü seçmeniz gerektiği konusunda kararsızsanız, başlangıçta genellikle tercih edilen Prefork modülü ile başlamanızı tavsiye ederiz. Bu modül, basitliği ve uyumluluğuyla öne çıkar ve birçok web sitesi için ideal bir seçenektir. Ancak, web sitenizin yoğun trafiğe maruz kaldığını fark ederseniz, Worker veya Event modüllerine geçmeyi düşünebilirsiniz. MPM modülü seçerken göz önünde bulundurmanız gereken bazı ek faktörler şunlardır:

  • Web sitenizin türü: Web sitenizin ne tür içerikler barındırdığı önemlidir. Statik bir web sitesi, dinamik bir web sitesine göre daha az işlem gücüne ihtiyaç duyar, bu nedenle Prefork modülü bu tür siteler için uygundur. Ancak, dinamik bir web sitesi veya çok sayıda kullanıcı etkileşimi içeren bir platform kullanıyorsanız, daha fazla performans sunabilen Worker veya Event modüllerini düşünmelisiniz.
  • Trafik miktarı: Eğer yoğun bir trafik bekliyorsanız, Worker veya Event gibi daha yüksek performans sunabilen MPM modüllerini seçmeli ve yapılandırmalısınız.
  • İşletim sistemi: Kullandığınız işletim sistemi, MPM modülü seçiminizi etkileyebilir. Bazı MPM modülleri yalnızca belirli işletim sistemlerinde kullanılabilir, bu nedenle işletim sisteminizi göz önünde bulundurmalısınız.

# MPM Değiştirme ve Yapılandırma

  • Hangi MPM’in aktif olduğunu öğrenmek için şu komutu kullanın:
apachectl -V | grep MPM
  • MPM’i değiştirmek için (Ubuntu/Debian sistemlerde):
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2
  • Event MPM için örnek bir yapılandırma (httpd.conf veya apache2.conf içine ekleyin):
<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

📌 Bu ayarları sunucunuzun kaynaklarına göre ayarlamanız gerekiyor. Örneğin, 2GB RAM’e sahip bir sunucuda MaxRequestWorkers değerini 150-200 arasında tutmak mantıklı olur. Her worker yaklaşık 5-10MB bellek tüketir, bu yüzden basit bir matematik yaparak ideal değerleri bulabilirsiniz.

2. Modül Temizliği: Gereksiz Yükleri Kaldırın

Apache kurulduğunda onlarca modül otomatik olarak yüklenir. Bu modüllerin çoğunu muhtemelen hiç kullanmıyorsunuz ama her biri Apache başlatıldığında belleğe yükleniyor ve kaynak tüketiyor. Gereksiz modülleri devre dışı bırakmak en basit ve en etkili optimizasyon yöntemlerinden biridir.

  • Öncelikle hangi modüllerin yüklü olduğunu kontrol edin:
apache2ctl -M  # veya apachectl -M

Bu komut size şu anda aktif olan tüm modülleri listeleyecek. Listeye baktığınızda muhtemelen tanımadığınız birçok modül göreceksiniz. Şimdi, hangi modülleri kaldırabileceğinizi görelim:

  • Güvenle Kaldırabilecekleriniz:
    • mod_autoindex: Dizin listeleme. Güvenlik riski ve gereksiz.
    • mod_status: Sunucu durum sayfası. Canlı sistemde kapalı olmalı.
    • mod_userdir: Kullanıcı dizinleri (~user). Modern sitelerde kullanılmaz.
    • mod_negotiation: İçerik pazarlığı. Çoğu site için gereksiz.
    • mod_setenvif: Ortam değişkenleri. Nadiren kullanılır.
  • Dikkatli Kaldırılmalı:
    • mod_deflate veya mod_gzip: Sıkıştırma modülleri. Bunlar performans için kritik, KALDIRMAYIN.
    • mod_expires: Tarayıcı önbellekleme. Muhtemelen kullanıyorsunuz.
    • mod_headers: HTTP başlıkları için gerekli. Genelde bırakın.
    • mod_rewrite: URL yönlendirme. Çoğu site kullanır.
  • Özel Durumlar:
    • mod_php: Eğer PHP-FPM kullanıyorsanız kaldırın.
    • mod_ssl: HTTPS kullanıyorsanız gerekli, kullanmıyorsanız kaldırın.
    • mod_proxy: Reverse proxy yapıyorsanız gerekli.
    • mod_cgi: CGI scriptleri çalıştırıyorsanız gerekli.

# Modülleri devre dışı bırakma

  • Ubuntu/Debian sistemlerde:
sudo a2dismod autoindex
sudo a2dismod status
sudo a2dismod userdir
sudo systemctl restart apache2
  • RedHat/CentOS sistemlerde httpd.conf dosyasını düzenleyin ve ilgili LoadModule satırlarını yoruma alın (#):
#LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule status_module modules/mod_status.so

Her modülü devre dışı bıraktıktan sonra sitenizin düzgün çalışıp çalışmadığını kontrol edin. Bazı uygulamalar belirli modüllere bağımlı olabilir. Eğer bir şey bozulursa, ilgili modülü tekrar etkinleştirmeniz yeterli. Gereksiz 10-15 modülü kaldırdığınızda Apache’nin başlangıç süresi %20-30 azalabilir ve her istek için 50-100MB daha az bellek kullanılabilir. Özellikle düşük kaynaklı sunucularda bu fark çok belirgindir.

3. KeepAlive Ayarları

KeepAlive, bir tarayıcı ile sunucunuz arasındaki TCP bağlantısının birden fazla HTTP isteği için açık tutulmasını sağlar. Bu, her yeni istek için bağlantı kurma (TCP handshake) maliyetini ortadan kaldırır. Ancak yanlış yapılandırılırsa kaynakları gereksiz yere tüketen bir soruna dönüşebilir.

Bir web sayfası yüklenirken tarayıcı genellikle onlarca kaynak indirir: HTML, CSS, JavaScript, görseller vs. KeepAlive olmadan her kaynak için yeni bir TCP bağlantısı kurulur. Bu, özellikle yüksek gecikme (latency) olan bağlantılarda sayfa yükleme süresini ciddi şekilde artırır. KeepAlive etkinken, tarayıcı aynı bağlantı üzerinden tüm kaynakları indirebilir. Bu durum sayfa yükleme süresini %50’ye kadar azaltır. Ancak, her açık bağlantı bir Apache worker’ı meşgul eder. Eğer çok fazla KeepAlive bağlantısı varsa, yeni istekleri işleyecek worker kalmayabilir.

Optimal KeepAlive Ayarları:

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3

# Bu ayarlar sayfa yükleme süresini azaltırken sunucu yükünü dengelemeye yardımcı olur.
  • KeepAlive On: Özelliği etkinleştirir. Modern web siteleri için mutlaka açık olmalı.
  • MaxKeepAliveRequests 100: Bir bağlantı üzerinden maksimum 100 istek yapılabilir. Çoğu sayfa için yeterli.
  • KeepAliveTimeout 5: Bağlantı 5 saniye boşta kalırsa kapatılır. Varsayılan 15 saniye çok uzun ve kaynakları boşa harcar.

Sitenizin trafiğine göre bu ayarları ayarlamanız gerekiyor. İşte farklı senaryolar:

  • Düşük Trafik- Günde birkaç bin ziyaretçi:
    • KeepAliveTimeout 10
    • MaxKeepAliveRequests 100
  • Orta Trafik- Günde 10-50K ziyaretçi:
    • KeepAliveTimeout 5
    • MaxKeepAliveRequests 100
  • Yüksek Trafik- Günde 50K+ ziyaretçi:
    • KeepAliveTimeout 2
    • MaxKeepAliveRequests 50

Bu ayarları httpd.conf veya apache2.conf dosyasında bulabilirsiniz. Değişiklikleri yaptıktan sonra yapılandırmayı test edin ve Apache’yi yeniden başlatın:

sudo apachectl configtest
sudo systemctl restart apache2

📌 Eğer sitenizin önünde bir CDN (Cloudflare, AWS CloudFront gibi) veya yük dengeleyici varsa, KeepAlive ayarlarınız daha az kritik hale gelir. Çünkü bu servislerin kendi bağlantı yönetimi var. Bu durumda daha kısa timeout değerleri kullanabilirsiniz.

4. Önbellekleme Stratejileri

Önbellekleme, Apache optimizasyonunun en güçlü silahıdır. Doğru yapılandırıldığında, sunucu yükünü %80’e kadar azaltabilir ve sayfa yükleme sürelerini birkaç saniyeden milisaniyelere indirebilir. İki tür önbellekleme var: sunucu tarafı (mod_cache) ve istemci tarafı (tarayıcı önbelleği).

# Tarayıcı Önbelleği: İlk ve En Kolay Adım

Tarayıcı önbelleği, statik dosyaların (görseller, CSS, JavaScript) kullanıcının bilgisayarında saklanmasını sağlar. Yani aynı kullanıcı sitenize tekrar geldiğinde bu dosyalar tekrar indirilmez.

  • mod_expires ve mod_headers modüllerini etkinleştirin:
sudo a2enmod expires
sudo a2enmod headers
sudo systemctl restart apache2
  • Sonra şu ayarları .htaccess veya Apache yapılandırma dosyasına ekleyin:
<IfModule mod_expires.c>
    ExpiresActive On
    
    # Görseller - 1 yıl
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/webp "access plus 1 year"
    
    # CSS ve JavaScript - 1 ay
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    
    # Fontlar - 1 yıl
    ExpiresByType font/woff2 "access plus 1 year"
    ExpiresByType font/woff "access plus 1 year"
    ExpiresByType application/font-woff "access plus 1 year"
    
    # HTML - 1 saat (dinamik içerik)
    ExpiresByType text/html "access plus 1 hour"
    
    # Favicon - 1 yıl
    ExpiresByType image/x-icon "access plus 1 year"
</IfModule>

<IfModule mod_headers.c>
    # Cache-Control başlıkları ekle
    <FilesMatch "\.(jpg|jpeg|png|gif|webp|css|js|woff2?|ttf|svg)$">
        Header set Cache-Control "public, max-age=31536000"
    </FilesMatch>
</IfModule>

# Sunucu Tarafı Önbellekleme: Mod_cache

Mod_cache, Apache’nin dinamik içeriği önbelleğe almasını sağlar. Bu özellikle PHP, Python veya diğer dinamik dillerde çalışan uygulamalar için kritik. Aynı içeriği her seferinde yeniden üretmek yerine, hazır versiyonu sunabilirsiniz.

  • Gerekli modülleri etkinleştirin:
sudo a2enmod cache
sudo a2enmod cache_disk  # veya cache_socache
sudo systemctl restart apache2
  • Disk bazlı önbellekleme yapılandırması:
<IfModule mod_cache_disk.c>
    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheEnable disk /
    
    # Önbellek ayarları
    CacheDirLevels 2
    CacheDirLength 1
    CacheMaxFileSize 1000000
    CacheMinFileSize 1
    
    # Önbellek süresi (saniye cinsinden)
    CacheDefaultExpire 3600
    CacheMaxExpire 86400
    
    # Hangi içerikler önbelleğe alınsın
    CacheIgnoreHeaders Set-Cookie
    CacheIgnoreCacheControl On
</IfModule>
  • Önbellek dizinini oluşturun ve izinleri ayarlayın:
sudo mkdir -p /var/cache/apache2/mod_cache_disk
sudo chown -R www-data:www-data /var/cache/apache2/mod_cache_disk
sudo chmod 755 /var/cache/apache2/mod_cache_disk

📌 WordPress, Drupal gibi CMS kullanıyorsanız, uygulama seviyesinde de önbellekleme yapın. W3 Total Cache veya WP Super Cache gibi önbellek eklentileri, Apache’nin mod_cache’i ile birlikte çalışarak çok daha iyi sonuçlar verir. İki katmanlı önbellekleme stratejisi, hem Apache hem de uygulama seviyesinde, maksimum performansı garantiler.

5. Mod_deflate ile Bant Genişliği Optimizasyonu

Web sitenizin dosyaları ne kadar büyükse, kullanıcılara ulaşması o kadar uzun sürer. Sıkıştırma, bu dosyaların boyutunu küçülterek hem bant genişliğinden tasarruf sağlar hem de sayfa yükleme sürelerini dramatik şekilde azaltır. Apache’de mod_deflate modülü bu işi yapar ve yapılandırması oldukça basittir.

  • Önce modülün yüklü ve aktif olduğundan emin olun:
sudo a2enmod deflate
sudo systemctl restart apache2
  • Sonra şu yapılandırmayı ekleyin (httpd.conf, apache2.conf veya .htaccess):
<IfModule mod_deflate.c>
    # Sıkıştırılacak dosya türleri
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/json
    AddOutputFilterByType DEFLATE font/ttf
    AddOutputFilterByType DEFLATE font/otf
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
  • Tipik bir web sayfasında sıkıştırma oranları şöyle:
    • HTML: %70-80 küçülme
    • CSS: %60-70 küçülme
    • JavaScript: %50-60 küçülme
    • JSON/XML: %70-90 küçülme
    • Bu durum, 1MB’lık bir HTML dosyasının 200-300KB’a düşmesi demektir. Mobil kullanıcılar için bu fark oldukça önemli.
  • Bazı tarayıcılar veya dosya türleri için özel durumlar oluşturmanız gerekebilir:
<IfModule mod_deflate.c>
    # Eski tarayıcılar için sıkıştırmayı devre dışı bırak
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    
    # Proxy'ler için uygun başlıkları gönder
    Header append Vary User-Agent env=!dont-vary
    
    # Zaten sıkıştırılmış dosyaları tekrar sıkıştırma
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|gz|rar|bz2|7z|mp3|mp4|mov|avi|wmv)$ no-gzip dont-vary
    
    # Sıkıştırma seviyesi (1-9 arası, 6 önerilen)
    DeflateCompressionLevel 6
</IfModule>
  • Sıkıştırmanın aktif olup olmadığını kontrol etmek için curl komutu kullanabilirsiniz:
curl -H "Accept-Encoding: gzip,deflate" -I https://siteniz.com
  • Yanıtta Content-Encoding: gzip başlığını görmelisiniz. Ayrıca Chrome DevTools’da Network sekmesine bakarak her dosya için sıkıştırma oranını görebilirsiniz.

📌 Sıkıştırma, özellikle yavaş internet bağlantılarında büyük fark yaratır. Mobil kullanıcıların %60’ı 3G veya daha yavaş bağlantılar kullanıyor ve sıkıştırılmış içerik onlar için sayfa yüklemelerini birkaç saniye hızlandırabilir. Google da sıkıştırma kullanımını bir sıralama faktörü olarak değerlendiriyor.

6. Güvenlik ve Performans

Apache varsayılan olarak her HTTP yanıtında sunucu versiyonu ve yüklü modüller hakkında bilgi verir. Bu bilgiler güvenlik açısından risk oluşturur çünkü saldırganlar bilinen güvenlik açıklarından yararlanabilir. Ayrıca, her yanıtta ekstra bayt göndermek bant genişliği israfıdır. Bu başlıkları gizlemek hem güvenliği artırır hem de performansı iyileştirir.

# Server Başlığını Gizleme

  • Varsayılan olarak Apache şöyle bir başlık gönderir:
Server: Apache/2.4.41 (Ubuntu) OpenSSL/1.1.1f
  • Bu başlık saldırganlar için altın değerinde bilgi. Bu nedenle httpd.conf veya apache2.conf dosyasına şunu ekleyin:
ServerTokens Prod
ServerSignature Off
  • Artık sadece şu başlık gönderilir:
Server: Apache

# X-Powered-By Başlığını Kaldırma

  • PHP ve diğer scriptler genellikle şöyle bir başlık ekler:
X-Powered-By: PHP/7.4.3
  • Bunu kaldırmak için php.ini dosyasında:
expose_php = Off
  • Veya .htaccess ile:
Header unset X-Powered-By

# ETag Başlıklarını Optimize Etme

  • ETag başlıkları önbellekleme için kullanılır ama varsayılan ayarlar gereksiz bilgi içerir. Daha verimli hale getirmek için:
FileETag MTime Size
  • Bu başlık, sadece değişiklik zamanı ve dosya boyutunu kullanır, inode bilgisini hariç tutar.

# Güvenlik Başlıkları Ekleme

  • Gereksiz başlıkları gizlerken, güvenlik artıran başlıklar da ekleyebilirsiniz. mod_headers modülü aktif olmalı:
<IfModule mod_headers.c>
    # XSS koruması
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Frame-Options "SAMEORIGIN"
    
    # Referrer politikası
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    
    # HTTPS zorlama (sadece SSL aktifse)
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    
    # İzin verilen kaynakları tanımla (CSP)
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';"
</IfModule>
  • Bu başlıklar, XSS saldırıları, clickjacking ve diğer yaygın web güvenlik tehditlerinden korur. Ayrıca Google tarafından da pozitif bir sinyal olarak değerlendirilir.

# Performans Testi

Başlıkları optimize ettikten sonra, her HTTP yanıtı ortalama 100-200 bayt daha küçük olur. Bu küçük bir rakam gibi görünse de, milyonlarca istek için toplamda gigabaytlarca bant genişliği tasarrufu demektir.

  • Test etmek için curl ile yanıt başlıklarını kontrol edin:
curl -I https://siteniz.com
  • Gereksiz başlıkların gitmediğinden ve güvenlik başlıklarının eklendiğinden emin olun. Ayrıca, securityheaders.com gibi online araçlar kullanarak sitenizin güvenlik skorunu görebilirsiniz.

7. Log Yönetimi: Disk I/O’yu Azaltın

Apache, varsayılan olarak her HTTP isteği için access log ve hata kayıtları için error log yazar. Yüksek trafikli sitelerde bu loglar saniyede binlerce satır oluşturabilir ve ciddi disk I/O darboğazlarına yol açabilir. Log yönetimini optimize etmek, özellikle mekanik hard disklerde performansı önemli ölçüde artırır.

# Log Seviyesini Ayarlama

  • Apache’nin ne kadar ayrıntılı log tutacağını LogLevel direktifi ile belirlersiniz. Varsayılan “warn” seviyesi çoğu durum için fazlasıyla detaylıdır. Canlı sistemlerde daha düşük bir seviye kullanmalısınız:
# httpd.conf veya apache2.conf içinde
LogLevel error

# Veya modül bazında farklı seviyeler
LogLevel warn ssl:error
  • LogLevel seviyeleri: debug, info, notice, warn, error, crit, alert, emerg. “error” seviyesi, sadece gerçek hataları kaydeder ve günlük log boyutunu %70-80 azaltabilir.
LogLevel seviyeleri
LogLevel seviyeleri

# Access Log Optimizasyonu

Access log, her HTTP isteğini kaydeder. Yüksek trafikli sitelerde bu dosya günde gigabaytlarca büyüyebilir. İşte optimizasyon stratejileri:

  • Gereksiz İstekleri Filtreleme: Görseller, CSS, JavaScript gibi statik dosyaları loglamayı durdurun:
SetEnvIf Request_URI "\.(gif|jpg|jpeg|png|css|js|ico|woff2?)$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog
  • Bot trafiğini filtreleme:
SetEnvIf User-Agent "bot|crawler|spider" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog
  • Conditional Logging: Sadece hataları logla (4xx ve 5xx durum kodları):
SetEnvIf Request_Status ^[45] log_errors
CustomLog /var/log/apache2/access.log combined env=log_errors
  • Ya da access log’u tamamen kapat (önerilmez ama acil durumlarda):
CustomLog /dev/null combined

# Log Rotation: Disk Dolmasını Önleme

  • Log dosyaları sürekli büyür ve zamanla diski doldurur. Logrotate kullanarak otomatik döngü ayarlayın. /etc/logrotate.d/apache2 dosyasını düzenleyin:
/var/log/apache2/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/apache2 reload > /dev/null
    endscript
}
  • Bu yapılandırma her gün log dosyalarını döndürür, son 14 günü saklar, eski logları sıkıştırır ve boş dosyaları atlar.

# Alternatif: Syslog veya Merkezi Loglama

  • Çok yüksek trafikli sistemlerde, logları doğrudan diske yazmak yerine syslog’a veya merkezi bir loglama sistemine göndermek daha verimlidir:
# Syslog'a gönder
ErrorLog syslog:local7

# Uzak sunucuya gönder
CustomLog "| /usr/bin/logger -t apache -p local7.info" combined
  • Bu yaklaşım, disk I/O’yu tamamen ortadan kaldırır ve log analizini merkezileştirir. ELK Stack (Elasticsearch, Logstash, Kibana) veya Graylog gibi sistemlerle entegre edebilirsiniz.

📌 Logları tamamen kapatmak caziptir ama önerilmez. Güvenlik olaylarını, hataları ve performans sorunlarını tespit etmek için loglara ihtiyacınız var. Bunun yerine, yukarıdaki teknikleri kullanarak log hacmini optimize edin.

8. İzleme ve Sürekli İyileştirme

Apache optimizasyonu tek seferlik bir iş değil, sürekli bir süreçtir. Sunucunuzun performansını düzenli olarak izlemeli ve değişen trafik paternlerine göre ayarları güncellemelisiniz. İşte bu süreci yönetmek için pratik stratejiler:

# Performans İzleme Araçları

  • Apache mod_status: Gerçek zamanlı sunucu durumunu görüntüler. Etkinleştirmek için:
<Location "/server-status">
    SetHandler server-status
    Require ip 127.0.0.1
</Location>

# http://siteniz.com/server-status adresinden erişin. Aktif bağlantıları, worker durumunu ve sistem kaynaklarını gösterir.
  • Apache Benchmark (ab): Yük testi yapmak için kullanılır
ab -n 1000 -c 10 https://siteniz.com/

# Bu komut 10 eşzamanlı kullanıcı ile 1000 istek gönderir ve yanıt sürelerini raporlar. Optimizasyon öncesi ve sonrası karşılaştırma için ideal.
  • Htop ve Glances: Sistem kaynaklarını izler. CPU, RAM, disk I/O kullanımını gerçek zamanlı gösterir
sudo apt install htop glances
htop  # veya glances

# Apache worker'larının kaynak kullanımını detaylı görebilirsiniz.

# Temel Performans Metrikleri

Başarıyı ölçmek için bu metrikleri takip edin:

  • Ortalama Yanıt Süresi– İdeal olarak 200ms altında olmalı. 500ms’nin üzeri yavaş kabul edilir.
  • Başarı Oranı– 5xx hatalarının oranı %1’in altında tutulmalı. %99+ başarı oranı hedefleyin.
  • Saniye Başına İstek– Sunucunuzun ne kadar istek işleyebildiğini gösterir. Sürekli izleyin ve maksimize edin.
  • CPU Kullanımı– Ortalama CPU kullanımı %70’in altında olmalı. Zirve saatlerde bile %90’ı geçmemeye çalışın.

# Sürekli İyileştirme Döngüsü

Optimizasyon sürecini şu döngü ile yönetin:

  • Analiz– Mevcut performansı ölçün, darboğazları tespit edin
  • Planlama– Hangi optimizasyonların öncelikli olduğunu belirleyin
  • Uygulama– Değişiklikleri test ortamında deneyin, sonra canlıya alın
  • İzleme– Sonuçları ölçün, beklenmedik sorunları tespit edin

Apache performansının optimizasyonu genellikle karmaşık ve çok yönlü bir süreçtir, ancak web sunucunuzun yüksek trafik seviyelerini işleyebilmesini ve iyi bir kullanıcı deneyimi sunabilmesini sağlamak için gereklidir. Bu rehberde paylaştığımız teknikleri uygulayarak Apache sunucunuzun performansını önemli ölçüde artırabilirsiniz. Her sitenin ihtiyaçları farklıdır, bu yüzden hangi optimizasyonların sizin için en etkili olduğunu denemeler yaparak bulacaksınız.

Editör Notu: İçeriğimiz okuyucu desteğiyle finanse edilmektedir. Bu, bağlantılarımızdan bazılarına tıkladığınızda komisyon kazanabileceğimiz anlamına gelir.

Burada sadece teorik bilgiler değil, gerçek deneyimlere dayanan pratik çözümler var. Burada yol arkadaşı olacağız. Karmaşık konuları birlikte çözecek, teknik detayları birlikte aşacağız...

Yazarın Profili