Takip et

Apache HTTP Sunucusu: Kapsamlı Bir Teknik Rehber

Apache HTTP Sunucusu: Kapsamlı Bir Teknik Rehber İnternet dünyasının temel taşlarından biri olan Apache HTTP Sunucusu, web sitelerinin ve uy

Apache HTTP Sunucusu: Kapsamlı Bir Teknik Rehber

İnternet dünyasının temel taşlarından biri olan Apache HTTP Sunucusu, web sitelerinin ve uygulamalarının kullanıcılara ulaşmasını sağlayan açık kaynaklı, güçlü ve esnek bir yazılımdır. Onlarca yıldır sektör standardı olarak kabul edilen Apache, dünya genelindeki web sitelerinin önemli bir yüzdesine güç vermektedir. Bu rehberde, Apache’nin ne olduğunu, nasıl çalıştığını, kurulumunu, temel yapılandırmasını ve pratik kullanım senaryolarını detaylı bir şekilde inceleyeceğiz.

Apache HTTP Sunucusu Nedir?

Apache HTTP Sunucusu (genellikle sadece “Apache” olarak anılır), dünya çapında en çok kullanılan web sunucu yazılımlarından biridir. İlk olarak 1995 yılında geliştirilen ve Apache Yazılım Vakfı (Apache Software Foundation) tarafından sürdürülen bu yazılım, açık kaynak kodlu yapısı sayesinde sürekli olarak geliştirilmekte ve geniş bir topluluk tarafından desteklenmektedir. Apache, bir istemcinin (örneğin bir web tarayıcısı) yaptığı HTTP isteğini alır, istenen kaynakları (HTML sayfaları, resimler, CSS dosyaları, JavaScript dosyaları vb.) bulur ve istemciye geri gönderir.

Temel Özellikleri

  • Modüler Yapı: Apache, çekirdek işlevselliğini modüller aracılığıyla genişletir. Bu, sunucuya yalnızca ihtiyaç duyulan özelliklerin yüklenmesini sağlayarak performansı artırır ve esneklik sunar (örneğin, PHP için mod_php, SSL için mod_ssl, URL yeniden yazma için mod_rewrite).
  • Platformlar Arası Uyumluluk: Linux, Unix, Windows, macOS gibi birçok farklı işletim sistemi üzerinde sorunsuz bir şekilde çalışabilir.
  • Esneklik ve Genişletilebilirlik: Geniş yapılandırma seçenekleri ve modüler yapısı sayesinde, küçük kişisel bloglardan büyük kurumsal uygulamalara kadar çeşitli ihtiyaçlara uyarlanabilir.
  • Sanal Host Desteği: Tek bir fiziksel sunucu üzerinde birden fazla web sitesini (farklı alan adları veya IP adresleri kullanarak) barındırma olanağı sunar.
  • Güvenlik: Sürekli güncellenen güvenlik yamaları ve esnek erişim kontrol mekanizmaları ile güçlü güvenlik özellikleri sunar.
  • Kimlik Doğrulama ve Yetkilendirme: Kullanıcı adı/şifre tabanlı veya sertifika tabanlı kimlik doğrulama gibi çeşitli yöntemlerle erişimi kısıtlama yeteneğine sahiptir.
  • Dinamik İçerik Desteği: CGI, FastCGI, PHP, Python, Perl gibi programlama dilleri için çeşitli modüller aracılığıyla dinamik web içeriği sunabilir.

Apache Nasıl Çalışır?

Apache, temel olarak istemci-sunucu modeline göre çalışır. Bir kullanıcı web tarayıcısına bir URL yazdığında veya bir bağlantıya tıkladığında, tarayıcı (istemci) bu isteği Apache sunucusuna gönderir. Apache, varsayılan olarak HTTP istekleri için 80 numaralı bağlantı noktasını (port) ve HTTPS (güvenli HTTP) istekleri için 443 numaralı bağlantı noktasını dinler.

İstek sunucuya ulaştığında, Apache:

  1. İsteği ayrıştırır ve hangi kaynak dosyasının (HTML, resim vb.) istendiğini belirler.
  2. İstenen dosyayı sunucu dosya sisteminde arar.
  3. Dosya bulunduğunda, gerekli izinleri kontrol eder ve dosyayı istemciye geri gönderir.
  4. Dosya bulunamazsa (404 Not Found hatası) veya başka bir hata oluşursa, ilgili hata kodunu ve mesajını istemciye iletir.

Apache, gelen istekleri işlemek için çeşitli Çoklu İşlem Modülleri (Multi-Processing Modules – MPMs) kullanır. En yaygın olanları prefork (her istek için ayrı bir işlem), worker (iş parçacıkları kullanan işlemler) ve event (daha verimli bağlantı yönetimi) MPM’leridir. Bu MPM’ler, sunucunun eş zamanlı bağlantıları ve kaynak kullanımını nasıl yöneteceğini belirler.

Kurulum ve Temel Yapılandırma

Apache’nin kurulumu ve yapılandırması, kullanılan işletim sistemine göre değişiklik gösterebilir.

Kurulum

Linux (Debian/Ubuntu tabanlı sistemler)

Terminali açın ve aşağıdaki komutları çalıştırın:

sudo apt update
sudo apt install apache2
sudo systemctl start apache2
sudo systemctl enable apache2

Kurulumdan sonra web tarayıcınızdan http://localhost adresine giderek Apache’nin varsayılan karşılama sayfasını görmelisiniz.

Linux (CentOS/RHEL tabanlı sistemler)

sudo yum update
sudo yum install httpd
sudo systemctl start httpd
sudo systemctl enable httpd

CentOS/RHEL sistemlerde Apache servisi httpd olarak adlandırılır.

Windows

Windows için Apache Lounge gibi güvenilir kaynaklardan Apache ikili dosyalarını indirip kurulum talimatlarını takip edebilirsiniz. Genellikle bir ZIP dosyası indirilir, klasöre açılır ve httpd.conf dosyasında gerekli düzenlemeler yapıldıktan sonra servis olarak kaydedilir.

Temel Yapılandırma

Apache’nin ana yapılandırma dosyası Linux sistemlerde genellikle /etc/apache2/apache2.conf (Debian/Ubuntu) veya /etc/httpd/conf/httpd.conf (CentOS/RHEL) konumunda bulunur. Windows’ta ise kurulum dizinindeki conf/httpd.conf içindedir.

Bu dosyada ayarlayabileceğiniz bazı önemli yönergeler (directives) şunlardır:

  • Listen 80: Apache’nin hangi portu dinleyeceğini belirtir.
  • ServerName example.com: Sunucunun alan adını belirler. Sanal hostlar için önemlidir.
  • DocumentRoot "/var/www/html": Web sitenizin kök dizinini belirtir. Tarayıcıdan bir istek geldiğinde Apache bu dizin altında dosya arar.
  • ErrorLog ${APACHE_LOG_DIR}/error.log: Hata günlüklerinin yazılacağı dosyanın yolunu belirtir.
  • CustomLog ${APACHE_LOG_DIR}/access.log combined: Erişim günlüklerinin yazılacağı dosyanın yolunu ve formatını belirtir.
  • ... : Belirli bir dizin için erişim ve yapılandırma ayarlarını yapar.

Örnek bir temel yapılandırma (httpd.conf veya apache2.conf içinde):

# Sunucunun dinleyeceği port
Listen 80

Sunucunun alan adı (gerekliyse)

ServerName www.example.com:80

Ana web sitesinin kök dizini

DocumentRoot "/var/www/html" # Dizin listelemeyi kapat, indeks dosyalarını ara Options -Indexes +FollowSymLinks # .htaccess dosyalarının kullanımına izin ver AllowOverride All # Herkesin erişimine izin ver Require all granted

Hata günlükleri

ErrorLog ${APACHE_LOG_DIR}/error.log

Erişim günlükleri

CustomLog ${APACHE_LOG_DIR}/access.log combined

Yapılandırma dosyasında değişiklik yaptıktan sonra Apache servisini yeniden başlatmayı unutmayın:

sudo systemctl restart apache2 # Debian/Ubuntu
sudo systemctl restart httpd   # CentOS/RHEL

Yapılandırma dosyasının sözdizimini kontrol etmek için:

sudo apachectl configtest

Sanal Hostlar (Virtual Hosts)

Sanal hostlar, tek bir Apache sunucusunda birden fazla web sitesi barındırmanın anahtarıdır. Her sanal host, kendi alan adına, doküman kök dizinine (DocumentRoot), log dosyalarına ve hatta farklı yapılandırma ayarlarına sahip olabilir.

Debian/Ubuntu’da sanal host yapılandırma dosyaları genellikle /etc/apache2/sites-available/ dizininde bulunur ve .conf uzantılıdır. Etkinleştirmek için bu dosyaların /etc/apache2/sites-enabled/ dizinine sembolik bir bağlantısı olmalıdır.

Örnek bir sanal host yapılandırması (/etc/apache2/sites-available/example.com.conf):


    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined

    
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    

Bu sanal hostu etkinleştirmek için:

sudo a2ensite example.com.conf
sudo systemctl reload apache2

Bir sanal hostu devre dışı bırakmak için a2dissite komutunu kullanın.

İleri Düzey Konular ve Pratik Kullanım Senaryoları

Modüller

Apache’nin gücü, modüler yapısından gelir. Her modül, sunucuya belirli bir işlevsellik ekler. İşte bazı yaygın modüller ve kullanım alanları:

  • mod_ssl: HTTPS (güvenli HTTP) bağlantıları için SSL/TLS şifrelemesi sağlar.
  • mod_rewrite: URL’leri yeniden yazmak için kullanılır, SEO dostu URL’ler oluşturmaya veya eski URL’leri yenilerine yönlendirmeye yarar.
  • mod_proxy: Apache’yi bir vekil sunucu (proxy server) olarak çalıştırmaya olanak tanır, gelen istekleri başka sunuculara yönlendirebilir.
  • mod_headers: HTTP yanıt başlıklarını manipüle etmek için kullanılır (örneğin, güvenlik başlıkları eklemek).
  • mod_deflate: Giden içeriği sıkıştırarak bant genişliğini ve sayfa yükleme süresini azaltır.

Bir modülü etkinleştirmek veya devre dışı bırakmak için Debian/Ubuntu’da aşağıdaki komutları kullanabilirsiniz:

sudo a2enmod rewrite   # mod_rewrite'ı etkinleştir
sudo a2dismod ssl     # mod_ssl'i devre dışı bırak
sudo systemctl restart apache2

mod_rewrite Örneği:

Aşağıdaki örnek, http://example.com/eski-sayfa.html adresine gelen bir isteği http://example.com/yeni-sayfa.php adresine yönlendirir:


    ServerName example.com
    DocumentRoot /var/www/example.com/public_html

    RewriteEngine On
    RewriteRule ^/eski-sayfa\.html$ /yeni-sayfa.php [R=301,L]

Bu kuralın çalışması için mod_rewrite modülünün etkin olması gerekir.

.htaccess Dosyaları

.htaccess dosyaları, Apache’nin ana yapılandırma dosyasına erişimi olmayan kullanıcıların (örneğin paylaşımlı hosting kullanıcıları) belirli dizinler için Apache yapılandırmasını değiştirmesine olanak tanır. Bu dosyalar, bulundukları dizin ve alt dizinler için geçerlidir.

Yaygın kullanım alanları:

  • URL yeniden yazma (mod_rewrite kuralları)
  • Parola korumalı dizinler oluşturma
  • Özel hata sayfaları belirleme (404 Not Found, 500 Internal Server Error vb.)
  • IP adreslerine göre erişim kontrolü
  • Varsayılan indeks dosyalarını değiştirme

.htaccess dosyalarının çalışabilmesi için ilgili bloğunda AllowOverride All veya en azından ihtiyacınız olan yönergeler için AllowOverride değerinin ayarlanmış olması gerekir.

.htaccess Örneği (301 Yönlendirme):

# eski-sayfa.html adresini yeni-sayfa.php adresine kalıcı olarak yönlendir
Redirect 301 /eski-sayfa.html /yeni-sayfa.php

.htaccess Örneği (Şifre Koruması):

AuthType Basic
AuthName "Kısıtlı Alan"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Bu örneğin çalışması için .htpasswd dosyasını oluşturmanız gerekir:

sudo htpasswd -c /etc/apache2/.htpasswd username

Güvenlik En İyi Uygulamaları

  • Güncel Tutun: Apache ve işletim sisteminizi düzenli olarak güncelleyerek bilinen güvenlik açıklarından korunun.
  • Gereksiz Modülleri Devre Dışı Bırakın: Kullanmadığınız modülleri a2dismod ile devre dışı bırakın. Bu, potansiyel saldırı yüzeyini azaltır.
  • Dizin Listelemeyi Kapatın: Options -Indexes yönergesini kullanarak kullanıcıların dizin içeriklerini listelemesini engelleyin.
  • .htaccess Kısıtlamaları: AllowOverride yönergesini yalnızca gerçekten ihtiyaç duyulan yerlerde ve minimum düzeyde kullanın. Performans ve güvenlik açısından ana yapılandırma dosyasını tercih edin.
  • SSL/TLS Kullanın: mod_ssl ile tüm hassas web siteleri için HTTPS kullanın. Ücretsiz Let’s Encrypt sertifikaları bu konuda büyük kolaylık sağlar.
  • Erişim Kontrolü: Hassas dizinlere veya yönetim panellerine IP adresi kısıtlamaları uygulayın (Require ip 192.168.1.0/24).
  • Sunucu İmzalarını Gizleyin: ServerSignature Off ve ServerTokens Prod yönergeleriyle Apache sürüm bilgilerini gizleyerek potansiyel saldırganlara bilgi vermeyi engelleyin.
  • Günlükleri İzleyin: Erişim ve hata günlüklerini düzenli olarak kontrol ederek anormal aktiviteleri veya saldırı girişimlerini tespit edin.

Sonuç ve Sıkça Sorulan Sorular

Apache HTTP Sunucusu, web dünyasının bel kemiği olmaya devam eden, güvenilir, esnek ve güçlü bir platformdur. Açık kaynak kodlu yapısı, geniş modül desteği ve aktif topluluğu sayesinde, web geliştiricileri ve sistem yöneticileri için vazgeçilmez bir araçtır. Doğru yapılandırma ve güvenlik uygulamalarıyla, Apache ile yüksek performanslı ve güvenli web ortamları oluşturmak mümkündür.

Sıkça Sorulan Sorular (SSS)

Apache mi, Nginx mi? Hangisini Kullanmalıyım?

Hem Apache hem de Nginx popüler web sunucularıdır, ancak farklı mimarilere sahiptirler. Apache, zengin modül desteği ve .htaccess gibi dizin bazlı yapılandırma yeteneği ile esneklik sunar. Nginx ise daha çok yüksek performanslı statik içerik sunumu ve ters proxy (reverse proxy) olarak öne çıkar, daha az kaynak tüketir. Genel bir kural olarak, dinamik içerik yoğun sitelerde (WordPress gibi) Apache, yüksek trafikli statik sitelerde veya yük dengeleyici olarak Nginx tercih edilebilir. Çoğu zaman ikisi birlikte (Nginx ön uçta proxy, Apache arka uçta uygulama sunucusu olarak) kullanılır.

Apache neden bu kadar popüler?

Apache’nin popülerliğinin arkasında birkaç temel neden yatmaktadır: uzun geçmişi ve olgunluğu, açık kaynak kodlu ve ücretsiz olması, geniş platform desteği, zengin modül ekosistemi, kapsamlı dokümantasyonu ve büyük, aktif bir topluluk desteği.

Apache ile neler yapabilirim?

Apache ile statik HTML web sitelerinden, PHP, Python, Perl gibi dillerle yazılmış dinamik web uygulamalarına (WordPress, Joomla, Drupal gibi CMS’ler dahil) kadar her türlü web içeriğini barındırabilirsiniz. Ayrıca bir ters proxy, yük dengeleyici veya sanal host sunucusu olarak da görev yapabilir.

Apache ücretli mi?

Hayır, Apache HTTP Sunucusu Apache Yazılım Vakfı tarafından geliştirilen açık kaynaklı bir yazılımdır ve tamamen ücretsizdir. Kullanımı, dağıtımı ve değiştirilmesi için herhangi bir lisans ücreti talep edilmez.

.htaccess dosyaları performansı etkiler mi?

Evet, .htaccess dosyaları Apache’nin her istekte ilgili dizin ve üst dizinlerde bu dosyaları aramasını gerektirdiği için performansı bir miktar etkileyebilir. Mümkün olduğunca, bu tür yapılandırmaları ana Apache yapılandırma dosyasına (httpd.conf veya sanal host dosyaları) taşımak daha iyi performans sağlayacaktır. Ancak küçük ve orta ölçekli siteler için bu etki genellikle göz ardı edilebilir düzeydedir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.