Apache
Apache HTTP Sunucusu (genellikle kısaca "Apache" veya RHEL tabanlı sistemlerde "httpd" olarak anılır), dünyanın en yaygın kullanılan açık kaynaklı web sunucusu yazılımlarından biridir. Apache Software Foundation tarafından geliştirilir ve Apache Lisansı altında dağıtılır. HTTP ve HTTPS protokolleri üzerinden web içeriği sunmak için kullanılır.
Temel Özellikler
Modüler Yapı: Apache'nin işlevselliği, dinamik olarak yüklenebilen modüller aracılığıyla genişletilebilir (örn. SSL/TLS, URL yeniden yazma, proxy, kimlik doğrulama modülleri).
Esnek Yapılandırma: Direktif tabanlı yapılandırma dosyaları (
httpd.conf
,.htaccess
) ile detaylı kontrol imkanı sunar.Sanal Ana Bilgisayarlar (Virtual Hosts): Tek bir sunucu üzerinde birden fazla web sitesini barındırmaya olanak tanır.
Platform Bağımsızlığı: Çeşitli Unix benzeri sistemlerde (Linux, BSD) ve Windows üzerinde çalışabilir.
Geniş Topluluk Desteği: Yaygın kullanımı sayesinde geniş bir kullanıcı topluluğuna ve bol miktarda belgeye sahiptir.
Kurulum (Paket Yöneticisi ile - Önerilen)
Apache'yi kaynak koddan derlemek yerine, dağıtımınızın paket yöneticisini kullanmak şiddetle tavsiye edilir. Bu, kurulumu basitleştirir, güncellemeleri kolaylaştırır ve sistemle uyumluluğu sağlar.
RHEL Tabanlı (CentOS Stream, Rocky, AlmaLinux, Fedora): Paket adı genellikle
httpd
'dir. SSL modülü (mod_ssl
) ayrı kurulabilir.sudo dnf install httpd mod_ssl -y
Debian Tabanlı (Debian, Ubuntu, Mint): Paket adı genellikle
apache2
'dir. SSL modülü genellikle varsayılan olarak gelir veyaa2enmod ssl
ile etkinleştirilir.sudo apt update sudo apt install apache2 -y
Servis Yönetimi (systemctl
)
systemctl
)Apache servisi systemd ile yönetilir. Servis adı dağıtıma göre değişir:
RHEL Tabanlı:
httpd.service
Debian Tabanlı:
apache2.service
# Servisi başlatma
sudo systemctl start httpd # veya apache2
# Servisi durdurma
sudo systemctl stop httpd # veya apache2
# Servisi yeniden başlatma
sudo systemctl restart httpd # veya apache2
# Yapılandırmayı yeniden yükleme (daha hızlı)
sudo systemctl reload httpd # veya apache2
# Servisin durumunu kontrol etme
sudo systemctl status httpd # veya apache2
# Sistem başlangıcında otomatik çalışmasını sağlama
sudo systemctl enable httpd # veya apache2
# Sistem başlangıcında otomatik çalışmasını engelleme
sudo systemctl disable httpd # veya apache2
Yapılandırma Dosyaları ve Yapısı
Apache'nin yapılandırma dosyalarının konumu ve organizasyonu dağıtım aileleri arasında farklılık gösterir:
1. RHEL Tabanlı Sistemler (/etc/httpd/
)
Ana Yapılandırma:
/etc/httpd/conf/httpd.conf
Modül Yapılandırmaları:
/etc/httpd/conf.modules.d/
Ek Yapılandırmalar/Sanal Ana Bilgisayarlar:
/etc/httpd/conf.d/
Genellikle sanal ana bilgisayar (Virtual Host) tanımları bu dizine
.conf
uzantılı dosyalar halinde eklenir (örn./etc/httpd/conf.d/vhost-example.com.conf
).httpd.conf
dosyasının sonunda genellikleIncludeOptional conf.d/*.conf
satırı bulunur.
2. Debian Tabanlı Sistemler (/etc/apache2/
)
Ana Yapılandırma:
/etc/apache2/apache2.conf
Portlar:
/etc/apache2/ports.conf
Modüller:
Mevcut Modüller:
/etc/apache2/mods-available/
Etkin Modüller:
/etc/apache2/mods-enabled/
(buradakilermods-available
'a sembolik linklerdir)Etkinleştirme/Devre Dışı Bırakma:
a2enmod <modül_adı>
,a2dismod <modül_adı>
Site Yapılandırmaları (Sanal Ana Bilgisayarlar):
Mevcut Siteler:
/etc/apache2/sites-available/
(örn.example.com.conf
)Etkin Siteler:
/etc/apache2/sites-enabled/
(buradakilersites-available
'a sembolik linklerdir)Etkinleştirme/Devre Dışı Bırakma:
a2ensite <site_dosya_adı>
,a2dissite <site_dosya_adı>
Ek Yapılandırma Parçaları:
Mevcut Yapılandırmalar:
/etc/apache2/conf-available/
Etkin Yapılandırmalar:
/etc/apache2/conf-enabled/
Etkinleştirme/Devre Dışı Bırakma:
a2enconf <conf_dosya_adı>
,a2disconf <conf_dosya_adı>
Debian tabanlı sistemlerdeki bu yapı, yapılandırmayı daha modüler hale getirir ve siteleri/modülleri kolayca etkinleştirip devre dışı bırakmayı sağlar.
Temel Sanal Ana Bilgisayar (Virtual Host) Yapılandırması (Apache 2.4+)
Aşağıda, example.com
alan adı için basit bir sanal ana bilgisayar tanımı örneği verilmiştir (Apache 2.4 ve sonrası sözdizimi ile).
RHEL Tabanlı (/etc/httpd/conf.d/example.com.conf
):
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com # İsteğe bağlı ek alan adları
DocumentRoot /var/www/example.com/html # Web sitesi dosyalarının konumu
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
<Directory "/var/www/example.com/html">
AllowOverride None # .htaccess kullanımını kontrol eder
Require all granted # Apache 2.4+ erişim kontrolü
</Directory>
</VirtualHost>
Debian Tabanlı (/etc/apache2/sites-available/example.com.conf
):
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
<Directory "/var/www/example.com/html">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
: Port 80'e gelen tüm IP adreslerindeki istekler için sanal ana bilgisayarı tanımlar. HTTPS için<VirtualHost *:443>
kullanılır.ServerName
: Sanal ana bilgisayarın birincil alan adı.ServerAlias
: İsteğe bağlı ek alan adları.DocumentRoot
: Bu siteye ait web dosyalarının bulunduğu kök dizin.ErrorLog
,CustomLog
: Bu siteye özel log dosyaları.<Directory ...>
: Belirtilen dizin için erişim izinleri ve seçenekleri tanımlar.AllowOverride None
:.htaccess
dosyalarının direktifleri geçersiz kılmasına izin verilmez (daha güvenli ve performanslı).Require all granted
: Apache 2.4'te dizine erişime izin verir. EskiOrder allow,deny
veAllow from all
direktiflerinin yerini almıştır.
Debian tabanlı sistemlerde, bu dosyayı oluşturduktan sonra siteyi etkinleştirmek gerekir:
sudo a2ensite example.com.conf
sudo systemctl reload apache2
Sunucu Durumu ve Bilgisi (mod_status, mod_info)
Apache'nin çalışma durumunu (aktif bağlantılar, yük vb.) izlemek için mod_status
, yapılandırma ve modül bilgilerini görmek için mod_info
modülleri kullanılabilir. Bu modüller genellikle ayrı yapılandırma dosyalarıyla etkinleştirilir ve güvenlik nedeniyle erişimleri kısıtlanmalıdır.
Örnek Yapılandırma (Debian: /etc/apache2/conf-available/server-status.conf
):
<IfModule mod_status.c>
<Location /server-status>
SetHandler server-status
Require local # Sadece localhost'tan erişime izin ver
# Require ip 192.168.1.0/24 # Belirli bir IP bloğuna izin ver
</Location>
ExtendedStatus On # Daha detaylı bilgi göster
</IfModule>
Etkinleştirmek için:
sudo a2enconf server-status
sudo a2enmod status # Gerekliyse modülü de etkinleştir
sudo systemctl reload apache2
Ardından http://localhost/server-status
adresinden erişilebilir. mod_info
için de benzer bir yapılandırma (<Location /server-info>
) yapılır.
HTTPS/TLS (SSL)
Güvenli web siteleri için HTTPS (HTTP over TLS/SSL) kullanmak zorunludur. Apache'de HTTPS'i etkinleştirmek için mod_ssl
modülünün aktif olması, 443 portunun dinlenmesi ve bir SSL sertifikasının (genellikle Let's Encrypt ile ücretsiz alınabilir) yapılandırılması gerekir. Sanal ana bilgisayar tanımı <VirtualHost *:443>
bloğu içinde yapılır ve SSLEngine on
, SSLCertificateFile
, SSLCertificateKeyFile
gibi direktifler eklenir.
Apache, esnekliği ve geniş modül ekosistemi ile güçlü bir web sunucusudur. Alternatifi olarak Nginx, özellikle yüksek trafikli sitelerde ve ters proxy olarak popülerlik kazanmıştır.
Last updated