Apache Nedir?
Apache HTTP Sunucusu (genellikle Apache olarak anılır), açık kaynak kodlu, platformdan bağımsız, yaygın olarak kullanılan bir web sunucusudur. Apache, web sitelerinin ve web uygulamalarının internet üzerinden erişilebilir olmasını sağlar. Bir istemci (örneğin, bir web tarayıcısı) bir web sayfasını talep ettiğinde, Apache sunucusu bu talebi işler ve istenen içeriği istemciye gönderir. Apache, modüler bir yapıya sahiptir, bu da çeşitli işlevsellikleri eklemek veya çıkarmak için modüllerin kullanılmasını sağlar. Bu modüler yapı, Apache'yi son derece esnek ve özelleştirilebilir hale getirir.
- Açık Kaynak: Apache, ücretsiz olarak kullanılabilir ve geliştirilebilir.
- Platform Bağımsız: Windows, Linux, macOS gibi farklı işletim sistemlerinde çalışabilir.
- Modüler Yapı: Farklı işlevler için modüller eklenebilir veya çıkarılabilir. Örneğin, SSL/TLS şifrelemesi için mod_ssl, yeniden yazma kuralları için mod_rewrite kullanılabilir.
- Güvenilir ve Kararlı: Uzun yıllardır kullanılan ve sürekli geliştirilen bir web sunucusudur.
- Geniş Topluluk Desteği: Geniş bir kullanıcı ve geliştirici topluluğuna sahiptir, bu da sorun giderme ve destek alma konusunda avantaj sağlar.
Apache'nin Çalışma Prensibi Nasıldır?
Apache, istemci-sunucu modeline göre çalışır. İşte temel adımlar:
- İstemci Talebi: Bir kullanıcı web tarayıcısına bir web sitesinin adresini (URL) girer. Bu, bir HTTP isteği oluşturur.
- Sunucu Talebi Alma: Apache sunucusu, gelen HTTP isteğini dinler ve alır.
- İsteği İşleme: Apache, isteği işler. Bu, istenen dosyanın (örneğin, bir HTML dosyası, bir resim veya bir komut dosyası) bulunmasını ve işlenmesini içerir.
- Yanıt Oluşturma: Apache, isteğe karşılık gelen bir HTTP yanıtı oluşturur. Bu yanıt, istenen içeriği (örneğin, HTML kodu, resim verisi) ve HTTP başlıklarını içerir.
- Yanıt Gönderme: Apache, HTTP yanıtını istemciye geri gönderir.
- İstemci Görüntüleme: Web tarayıcısı, HTTP yanıtını alır ve içeriği kullanıcıya görüntüler.
Örnek Senaryo:
Bir kullanıcı "www.example.com" adresini ziyaret eder. Bu, kullanıcının tarayıcısının Apache sunucusuna bir HTTP GET isteği göndermesine neden olur. Apache sunucusu, bu isteği alır ve "index.html" dosyasını (veya yapılandırılmış varsayılan dosyayı) bulur. Apache, bu dosyanın içeriğini bir HTTP yanıtı olarak tarayıcıya geri gönderir. Tarayıcı, HTML kodunu yorumlar ve web sayfasını kullanıcıya görüntüler.
Apache Kurulumu Nasıl Yapılır?
Apache kurulumu, işletim sistemine göre değişiklik gösterir. İşte en yaygın işletim sistemlerinde kurulum adımları:
Linux (Debian/Ubuntu)
sudo apt update
sudo apt install apache2
sudo systemctl start apache2
sudo systemctl enable apache2
Bu komutlar sırasıyla şunları yapar:
- sudo apt update: Paket listesini günceller.
- sudo apt install apache2: Apache2 paketini kurar.
- sudo systemctl start apache2: Apache2 servisini başlatır.
- sudo systemctl enable apache2: Apache2'nin sistem başlangıcında otomatik olarak başlamasını sağlar.
Linux (CentOS/RHEL)
sudo yum update
sudo yum install httpd
sudo systemctl start httpd
sudo systemctl enable httpd
Bu komutlar sırasıyla şunları yapar:
- sudo yum update: Paket listesini günceller.
- sudo yum install httpd: HTTPD paketini kurar (Apache'nin CentOS/RHEL'deki adı).
- sudo systemctl start httpd: HTTPD servisini başlatır.
- sudo systemctl enable httpd: HTTPD'nin sistem başlangıcında otomatik olarak başlamasını sağlar.
Windows
Windows'ta Apache kurulumu genellikle XAMPP, WAMP veya EasyPHP gibi bir paket kullanılarak yapılır. Bu paketler, Apache, MySQL (veya MariaDB) ve PHP'yi tek bir kurulumla kurmanızı sağlar.
- XAMPP İndirme: Apache Friends web sitesinden XAMPP'ı indirin.
- Kurulum: İndirdiğiniz kurulum dosyasını çalıştırın ve talimatları izleyin. Kurulum sırasında Apache, MySQL ve PHP'yi seçtiğinizden emin olun.
- XAMPP Kontrol Paneli: Kurulum tamamlandıktan sonra XAMPP Kontrol Panelini açın.
- Apache'yi Başlatma: XAMPP Kontrol Panelinde Apache'nin yanındaki "Start" düğmesine tıklayarak Apache'yi başlatın.
Kurulum Sonrası Kontrol:
Kurulumun başarılı olup olmadığını kontrol etmek için bir web tarayıcısında "http://localhost" veya "http://127.0.0.1" adresini ziyaret edin. Apache'nin varsayılan karşılama sayfasını görmelisiniz.
Apache Yapılandırma Dosyaları Nelerdir ve Nasıl Düzenlenir?
Apache'nin temel yapılandırma dosyası "httpd.conf" (veya bazı dağıtımlarda "apache2.conf")'dir. Bu dosya, Apache'nin davranışını kontrol eden direktifleri içerir. Bu dosyayı düzenleyerek sanal ana bilgisayarları (virtual hosts) tanımlayabilir, güvenlik ayarlarını yapılandırabilir ve diğer çeşitli ayarları değiştirebilirsiniz.
Dosya Konumları:
- Linux (Debian/Ubuntu): /etc/apache2/apache2.conf
- Linux (CentOS/RHEL): /etc/httpd/conf/httpd.conf
- Windows (XAMPP): C:\xampp\apache\conf\httpd.conf (varsayılan kurulum dizini varsayılarak)
Önemli Direktifler:
- Listen: Apache'nin dinleyeceği portu belirtir (varsayılan olarak 80).
- DocumentRoot: Web sitelerinin dosyalarının bulunduğu ana dizini belirtir.
- ServerName: Sunucunun adını belirtir.
- Directory: Belirli dizinler için erişim haklarını ve diğer ayarları tanımlar.
- VirtualHost: Birden fazla web sitesini tek bir sunucuda barındırmak için kullanılır.
Örnek: Temel Bir Sanal Ana Bilgisayar Yapılandırması
Aşağıdaki örnek, "example.com" adlı bir sanal ana bilgisayarın nasıl yapılandırılacağını gösterir. Bu yapılandırmayı "httpd.conf" dosyasına (veya ayrı bir sanal ana bilgisayar yapılandırma dosyasına) ekleyebilirsiniz.
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/example.com-error.log
CustomLog /var/log/apache2/example.com-access.log combined
</VirtualHost>
Bu yapılandırmada:
- ServerName: Sanal ana bilgisayarın adını ("example.com") belirtir.
- DocumentRoot: Web sitesinin dosyalarının bulunduğu dizini ("/var/www/example.com") belirtir.
- Directory: Dizin için erişim haklarını ve diğer ayarları tanımlar.
- Options Indexes FollowSymLinks: Dizin içeriğinin listelenmesine ve sembolik bağlantıların takip edilmesine izin verir.
- AllowOverride All: .htaccess dosyalarının kullanımına izin verir.
- Require all granted: Herkese erişim izni verir.
- ErrorLog: Hata günlüklerinin kaydedileceği dosyayı belirtir.
- CustomLog: Erişim günlüklerinin kaydedileceği dosyayı belirtir.
Apache'yi Yeniden Başlatma:
Yapılandırma dosyalarını değiştirdikten sonra, değişikliklerin geçerli olması için Apache'yi yeniden başlatmanız gerekir.
sudo systemctl restart apache2 (Debian/Ubuntu)
sudo systemctl restart httpd (CentOS/RHEL)
Apache Modülleri Nelerdir ve Nasıl Etkinleştirilir/Devre Dışı Bırakılır?
Apache modülleri, Apache'nin temel işlevselliğini genişleten eklentilerdir. Örneğin, SSL/TLS şifrelemesi için mod_ssl, URL yeniden yazma için mod_rewrite ve sıkıştırma için mod_deflate gibi modüller mevcuttur.
Yaygın Modüller:
- mod_ssl: SSL/TLS şifrelemesi sağlar.
- mod_rewrite: URL yeniden yazma kurallarını tanımlamanıza olanak tanır.
- mod_deflate: HTTP yanıtlarını sıkıştırarak bant genişliğini azaltır.
- mod_expires: Tarayıcı önbelleklemesini kontrol etmenizi sağlar.
- mod_headers: HTTP başlıklarını değiştirmenize olanak tanır.
- mod_auth_basic: Temel kimlik doğrulama sağlar.
Modülleri Etkinleştirme/Devre Dışı Bırakma (Debian/Ubuntu):
sudo a2enmod modül_adı (Etkinleştirme)
sudo a2dismod modül_adı (Devre Dışı Bırakma)
sudo systemctl restart apache2 (Değişiklikleri Uygulama)
Örnek: mod_rewrite'ı Etkinleştirme
sudo a2enmod rewrite
sudo systemctl restart apache2
Modülleri Etkinleştirme/Devre Dışı Bırakma (CentOS/RHEL):
CentOS/RHEL'de modüller genellikle ".conf" dosyalarıyla etkinleştirilir. Bu dosyalar "/etc/httpd/conf.modules.d/" dizininde bulunur.
Bir modülü etkinleştirmek için, ilgili ".conf" dosyasının var olduğundan ve doğru şekilde yapılandırıldığından emin olun. Bir modülü devre dışı bırakmak için, ".conf" dosyasını kaldırabilir veya yeniden adlandırabilirsiniz.
Örnek: mod_rewrite'ı Etkinleştirme (CentOS/RHEL)
mod_rewrite zaten etkinleştirilmiş olabilir. Değilse, "/etc/httpd/conf.modules.d/00-base.conf" dosyasında aşağıdaki satırın yorum satırı olmadığından emin olun:
LoadModule rewrite_module modules/mod_rewrite.so
Gerekirse, Apache'yi yeniden başlatın:
sudo systemctl restart httpd
Apache Güvenliği Nasıl Sağlanır?
Apache'nin güvenliğini sağlamak, web sitenizin ve sunucunuzun kötü amaçlı saldırılara karşı korunması için önemlidir. İşte bazı temel güvenlik önlemleri:
- Güncel Tutma: Apache'yi ve tüm modüllerini en son sürümlere güncel tutun. Güvenlik açıkları genellikle eski sürümlerde bulunur.
- Gereksiz Modülleri Devre Dışı Bırakma: Kullanmadığınız modülleri devre dışı bırakarak saldırı yüzeyini azaltın.
- Dizin Listelemeyi Engelleme: Dizin listelemeyi devre dışı bırakarak, kullanıcıların sunucunuzdaki dosyalara göz atmasını engelleyin. "Options -Indexes" direktifini kullanarak bu özelliği devre dışı bırakabilirsiniz.
- .htaccess Dosyalarını Korumak: .htaccess dosyalarının içeriğine erişimi engelleyin. Bu dosyalar, sunucu yapılandırmasını değiştirmek için kullanılabilir.
- Güçlü Parolalar Kullanma: Sunucuya erişim için güçlü parolalar kullanın.
- Güvenlik Duvarı Kullanma: Sunucunuzu bir güvenlik duvarı (firewall) ile koruyun.
- SSL/TLS Şifrelemesi Kullanma: Web sitenizi SSL/TLS ile şifreleyerek, kullanıcıların verilerinin güvenli bir şekilde iletilmesini sağlayın.
- Düzenli Yedekleme: Verilerinizi düzenli olarak yedekleyin.
- Logları İzleme: Apache günlüklerini düzenli olarak izleyerek, anormal aktiviteleri tespit edin.
Örnek: Dizin Listelemeyi Engelleme
Aşağıdaki örnek, bir dizin için dizin listelemeyi nasıl devre dışı bırakacağınızı gösterir:
<Directory /var/www/example.com>
Options -Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Bu yapılandırmada, "Options -Indexes" direktifi dizin listelemeyi devre dışı bırakır. Bir kullanıcı bu dizine erişmeye çalıştığında, bir "403 Forbidden" hatası alacaktır.
Örnek: SSL/TLS Şifrelemesi Kullanma
SSL/TLS şifrelemesi kullanmak için, bir SSL sertifikası edinmeniz ve Apache'yi bu sertifikayı kullanacak şekilde yapılandırmanız gerekir. Bu genellikle mod_ssl modülünü etkinleştirmeyi ve sanal ana bilgisayar yapılandırmasında SSL ile ilgili direktifleri ayarlamayı içerir.
Apache ve Performans Optimizasyonu
Apache'nin performansını optimize etmek, web sitenizin hızlı ve verimli bir şekilde çalışmasını sağlamak için önemlidir. İşte bazı performans optimizasyonu ipuçları:
- KeepAlive'ı Yapılandırma: KeepAlive, istemcilerin birden fazla HTTP isteğini tek bir TCP bağlantısı üzerinden yapmasına olanak tanır. Bu, bağlantı kurma ve kapatma maliyetini azaltarak performansı artırabilir. Ancak, çok yüksek bir KeepAlive değeri sunucu kaynaklarını tüketebilir. Dengeli bir değer seçmek önemlidir.
- MPM'yi (Multi-Processing Module) Optimize Etme: Apache, farklı MPM'ler kullanabilir. MPM, Apache'nin çoklu işlem yapısını kontrol eder. "prefork", "worker" ve "event" gibi farklı MPM'ler mevcuttur. Hangi MPM'nin en iyi performansı sağlayacağı, sunucunuzun donanımına ve web sitenizin trafik modeline bağlıdır.
- Önbellekleme Kullanma: Apache'de önbellekleme kullanarak, sık erişilen içerikleri bellekte saklayabilir ve sunucu yükünü azaltabilirsiniz. mod_cache ve mod_expires gibi modüller önbellekleme için kullanılabilir.
- Sıkıştırma Kullanma: mod_deflate modülünü kullanarak HTTP yanıtlarını sıkıştırarak bant genişliğini azaltabilir ve sayfa yükleme sürelerini kısaltabilirsiniz.
- CDN (İçerik Dağıtım Ağı) Kullanma: CDN, web sitenizin statik içeriklerini (örneğin, resimler, CSS dosyaları, JavaScript dosyaları) farklı coğrafi konumlardaki sunucularda saklar. Bir kullanıcı web sitenizi ziyaret ettiğinde, içerik kullanıcının konumuna en yakın CDN sunucusundan sunulur. Bu, sayfa yükleme sürelerini önemli ölçüde azaltabilir.
- Gereksiz Modülleri Devre Dışı Bırakma: Kullanmadığınız modülleri devre dışı bırakarak sunucu kaynaklarını boşaltın.
- Günlükleri Optimize Etme: Günlüklerin boyutunu ve sıklığını optimize edin. Çok fazla günlük yazmak, sunucu performansını olumsuz etkileyebilir.
MPM Karşılaştırması:
MPM | Açıklama | Avantajları | Dezavantajları |
---|---|---|---|
prefork | Her bağlantı için ayrı bir işlem oluşturur. | Kararlı, modüllerle uyumlu. | Yüksek bellek tüketimi. |
worker | Her işlem birden fazla iş parçacığı (thread) kullanır. | Daha düşük bellek tüketimi, daha iyi performans. | Modüllerle uyumluluk sorunları olabilir. |
event | Worker MPM'ye benzer, ancak KeepAlive bağlantılarını daha verimli bir şekilde yönetir. | En iyi performans, düşük bellek tüketimi. | Modüllerle uyumluluk sorunları olabilir. |
Örnek: KeepAlive Yapılandırması
Aşağıdaki örnek, "httpd.conf" dosyasında KeepAlive ayarlarının nasıl yapılandırılacağını gösterir:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Bu yapılandırmada:
- KeepAlive On: KeepAlive özelliğini etkinleştirir.
- MaxKeepAliveRequests 100: Bir bağlantı üzerinden yapılabilecek maksimum istek sayısını 100 olarak ayarlar.
- KeepAliveTimeout 5: Bir isteğin tamamlanması için beklenecek süreyi 5 saniye olarak ayarlar.
Apache Log Dosyaları Nelerdir ve Nasıl İncelenir?
Apache, sunucu aktivitesini kaydeden çeşitli günlük dosyaları oluşturur. Bu günlük dosyaları, sorun giderme, güvenlik analizi ve performans izleme için değerli bilgiler sağlar.
Temel Günlük Dosyaları:
- Erişim Günlüğü (Access Log): Sunucuya yapılan tüm istekleri kaydeder. İstek tarihi, saati, istemci IP adresi, istenen dosya, HTTP durumu kodu ve gönderilen veri miktarı gibi bilgileri içerir.
- Hata Günlüğü (Error Log): Sunucuda oluşan hataları kaydeder. Hata mesajları, uyarılar ve diğer önemli olaylar bu günlükte bulunur.
Dosya Konumları:
- Linux (Debian/Ubuntu): /var/log/apache2/access.log ve /var/log/apache2/error.log
- Linux (CentOS/RHEL): /var/log/httpd/access_log ve /var/log/httpd/error_log
- Windows (XAMPP): C:\xampp\apache\logs\access.log ve C:\xampp\apache\logs\error.log (varsayılan kurulum dizini varsayılarak)
Günlükleri İnceleme:
Günlükleri incelemek için metin düzenleyicileri (örneğin, nano, vim, Notepad++) veya özel günlük analiz araçları kullanabilirsiniz.
Linux'ta Günlükleri İzleme (Gerçek Zamanlı):
tail -f /var/log/apache2/access.log (Erişim Günlüğü)
tail -f /var/log/apache2/error.log (Hata Günlüğü)
Bu komutlar, günlük dosyalarının son satırlarını gerçek zamanlı olarak görüntüler. Yeni istekler veya hatalar oluştuğunda, bunlar anında ekrana yazdırılır.
Örnek: Erişim Günlüğü Girişi
192.168.1.10 - - [10/Oct/2023:14:30:00 +0000] "GET /index.html HTTP/1.1" 200 1234
Bu günlük girişi şunları gösterir:
- 192.168.1.10: İsteği yapan istemcinin IP adresi.
- [10/Oct/2023:14:30:00 +0000]: İsteğin tarihi ve saati.
- "GET /index.html HTTP/1.1": Yapılan HTTP isteği (GET metodu, istenen dosya "/index.html", HTTP sürümü 1.1).
- 200: HTTP durum kodu (200, isteğin başarılı olduğunu gösterir).
- 1234: Gönderilen veri miktarı (byte olarak).
Örnek: Hata Günlüğü Girişi
[Mon Oct 10 14:30:00.123456 2023] [core:error] [pid 12345:tid 67890] [client 192.168.1.10:12345] AH01276: Cannot serve directory /var/www/example.com/: No matching DirectoryIndex (index.html,index.php) found, and server-generated directory index forbidden by Options directive
Bu günlük girişi şunları gösterir:
- [Mon Oct 10 14:30:00.123456 2023]: Hatanın tarihi ve saati.
- [core:error]: Hatanın türü (çekirdek hatası).
- [pid 12345:tid 67890]: Hatanın oluştuğu işlemin ve iş parçacığının kimliği.
- [client 192.168.1.10:12345]: Hatanın oluşmasına neden olan istemcinin IP adresi ve portu.
- AH01276: Hata kodu.
- Cannot serve directory...: Hatanın açıklaması (dizin içeriği sunulamıyor çünkü DirectoryIndex bulunamadı ve dizin listeleme devre dışı bırakıldı).
Günlük Analizi Araçları:
Günlükleri daha verimli bir şekilde analiz etmek için özel araçlar kullanabilirsiniz. Bazı popüler günlük analiz araçları şunlardır:
- GoAccess: Gerçek zamanlı web günlüğü analizcisi.
- AWStats: Gelişmiş web istatistikleri aracı.
- Logwatch: Günlük dosyalarını özetleyen ve raporlar oluşturan bir araç.
Gerçek Hayattan Örnekler ve Vaka Çalışmaları
Örnek 1: Yüksek Trafikli Bir E-Ticaret Sitesi
Bir e-ticaret sitesi, yoğun trafik dönemlerinde (örneğin, Black Friday) performans sorunları yaşıyordu. Sunucu yükü artıyor, sayfa yükleme süreleri uzuyordu ve bazı kullanıcılar siteye erişmekte zorlanıyordu.
Çözüm:
- CDN Kullanımı: Statik içerikler (resimler, CSS dosyaları, JavaScript dosyaları) bir CDN'e taşındı.
- Önbellekleme: Apache'de önbellekleme etkinleştirildi.
- KeepAlive Optimizasyonu: KeepAlive ayarları, sunucu kaynaklarını tüketmeden performansı artıracak şekilde optimize edildi.
- Veritabanı Optimizasyonu: Veritabanı sorguları optimize edildi ve veritabanı sunucusunun performansı artırıldı.
Sonuç:
Bu optimizasyonlar sayesinde, e-ticaret sitesinin performansı önemli ölçüde arttı. Sayfa yükleme süreleri kısaldı, sunucu yükü azaldı ve kullanıcı deneyimi iyileşti.
Örnek 2: Güvenlik Açığı Nedeniyle Saldırıya Uğrayan Bir Web Sitesi
Bir web sitesi, eski bir Apache sürümü kullandığı için bir güvenlik açığı nedeniyle saldırıya uğradı. Saldırganlar, sunucuya erişerek web sitesinin içeriğini değiştirdiler ve hassas verileri ele geçirdiler.
Çözüm:
- Apache Güncellemesi: Apache en son sürüme güncellendi.
- Gereksiz Modüllerin Devre Dışı Bırakılması: Kullanılmayan modüller devre dışı bırakıldı.
- Güvenlik Duvarı Yapılandırması: Sunucu bir güvenlik duvarı ile korundu.
- Düzenli Yedekleme: Verilerin düzenli olarak yedeklenmesi sağlandı.
Sonuç:
Bu güvenlik önlemleri sayesinde, web sitesi gelecekteki saldırılara karşı daha iyi korundu. Saldırganların sunucuya erişmesi engellendi ve verilerin güvenliği sağlandı.
Özellik | Apache | Nginx |
---|---|---|
Mimari | İşlem tabanlı veya iş parçacığı tabanlı | Olay odaklı |
Performans | Yüksek trafikli statik içerik sunumunda Nginx'e göre daha az verimli | Yüksek trafikli statik içerik sunumunda daha verimli |
Yapılandırma | .htaccess dosyaları ile esnek | .htaccess dosyaları desteklemez, merkezi yapılandırma gerektirir |
Modüller | Geniş modül yelpazesi | Daha az modül, ancak temel işlevler için yeterli |
Kullanım Alanları | Dinamik web siteleri, kurumsal uygulamalar | Statik içerik sunumu, ters proxy, yük dengeleme |