CentOS 8 Üzerine Apache Web Sunucusu Kurulumu
Apache HTTP Sunucusu, dünya genelinde en yaygın kullanılan açık kaynaklı web sunucularından biridir. Esnek yapısı, güçlü özellikleri ve geniş topluluk desteği sayesinde milyonlarca web sitesine güç vermektedir. CentOS 8 ise, kararlılığı, güvenliği ve kurumsal kullanıma uygunluğu ile bilinen popüler bir Linux dağıtımıdır. Bu makalede, CentOS 8 işletim sistemi üzerine Apache web sunucusunun nasıl kurulacağını, temel yapılandırmalarını ve sık karşılaşılan sorunlara çözümleri adım adım ele alacağız. Amacımız, başlangıç seviyesinden ileri seviyeye kadar tüm kullanıcıların Apache’yi CentOS 8 ortamında başarıyla kurup yapılandırmasına yardımcı olmaktır.
Giriş
İnternet dünyasının temel taşlarından biri olan web sunucuları, kullanıcıların web tarayıcıları aracılığıyla talep ettiği web sayfalarını, resimleri, videoları ve diğer içerikleri sunmakla görevlidir. Bu sunucular arasında Apache HTTP Sunucusu, açık kaynak kodlu olması, modüler yapısı ve platform bağımsız çalışabilmesi gibi özellikleriyle öne çıkar. Özellikle Linux tabanlı sunucu sistemlerinde tercih edilen Apache, dinamik içerik sunumu, sanal host yönetimi ve güvenlik özellikleriyle her türlü web projesine uyum sağlayabilir.
CentOS 8, Red Hat Enterprise Linux (RHEL) tabanlı, topluluk destekli bir işletim sistemi olup, özellikle sunucu ortamlarında güvenilirliği ve uzun vadeli desteği nedeniyle sıkça tercih edilir. Bu kombinasyon, stabil ve güçlü bir web altyapısı kurmak isteyenler için ideal bir çözümdür. Bu makalede, CentOS 8’in paket yöneticisi olan DNF’yi kullanarak Apache’yi kuracak, güvenlik duvarı ayarlarını yapılandıracak, temel yapılandırmaları yapacak ve bir web sitesini yayına alacağız. Ayrıca, SSL/TLS ile güvenli bağlantı sağlamayı ve SELinux gibi önemli güvenlik bileşenlerini de ele alacağız.
Ön Gereksinimler
Apache kurulumuna başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olmalısınız:
* CentOS 8 İşletim Sistemi: Kurulumu yapacağınız, temiz bir CentOS 8 sunucusu (fiziksel, sanal makine veya VPS) hazır olmalıdır.
* Sudo Yetkileri: Kurulum ve yapılandırma işlemleri için sudo yetkilerine sahip, root olmayan bir kullanıcı hesabına ihtiyacınız olacaktır. Güvenlik açısından root kullanıcısı ile doğrudan işlem yapmak yerine sudo kullanılması önerilir.
* SSH Erişimi: Sunucuya SSH üzerinden bağlanabilmeniz gerekmektedir. Çoğu sunucu sağlayıcı bu erişimi varsayılan olarak sunar.
* Temel Ağ Bilgisi: Sunucunun IP adresini ve temel ağ yapılandırmalarını bilmek faydalı olacaktır.
Sistem Güncellemesi
Herhangi bir yazılım kurulumuna başlamadan önce sistemin güncel olması, olası uyumluluk sorunlarını gidermek ve en son güvenlik yamalarını almak açısından kritik öneme sahiptir. CentOS 8’de DNF paket yöneticisi ile sisteminizi güncelleyebilirsiniz:
sudo dnf update -y
Bu komut, sisteminizdeki tüm yüklü paketleri en son sürümlerine güncelleyecektir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı verilmesini sağlar. Güncelleme işlemi tamamlandıktan sonra, bazı durumlarda çekirdek (kernel) güncellemeleri nedeniyle sunucuyu yeniden başlatmanız gerekebilir:
sudo reboot
Yeniden başlatma sonrası SSH ile sunucunuza tekrar bağlanabilirsiniz.
Apache Web Sunucusunu Kurma
CentOS 8’de Apache HTTP Sunucusu paketi httpd olarak adlandırılır. Kurulum işlemi oldukça basittir ve DNF paket yöneticisi aracılığıyla gerçekleştirilir:
sudo dnf install httpd -y
Bu komut, httpd paketini ve onunla birlikte gelen tüm bağımlılıkları sisteminize kuracaktır. Kurulum tamamlandığında, Apache’nin temel dosyaları ve yapılandırmaları /etc/httpd dizinine yerleştirilecektir. Web sitenizin içeriği için varsayılan kök dizin ise /var/www/html olacaktır.
Apache Servisini Başlatma ve Etkinleştirme
Apache paketini kurduktan sonra, web sunucusunu başlatmanız ve sistemin her açılışında otomatik olarak başlamasını sağlamanız gerekir. Bu işlemleri systemctl komutu ile yapabiliriz:
sudo systemctl start httpd
Bu komut, Apache servisini hemen başlatır. Servisin durumunu kontrol etmek için:
sudo systemctl status httpd
Çıktıda Active: active (running) ifadesini görmelisiniz. Bu, Apache’nin başarıyla çalıştığı anlamına gelir.
Apache’nin sunucu her yeniden başlatıldığında otomatik olarak başlamasını sağlamak için aşağıdaki komutu kullanın:
sudo systemctl enable httpd
Bu komut, Apache servisi için bir başlangıç kancası (symlink) oluşturur ve sistemin önyükleme sırasında httpd servisini başlatmasını sağlar.
Güvenlik Duvarı Ayarlarını Yapılandırma
CentOS 8, varsayılan olarak firewalld adlı dinamik bir güvenlik duvarı hizmeti kullanır. Apache’nin dışarıdan erişilebilir olması için, web trafiği için kullanılan portları (HTTP için 80, HTTPS için 443) güvenlik duvarında açmanız gerekir.
Öncelikle, güvenlik duvarının çalıştığından emin olun:
sudo systemctl status firewalld
Eğer çalışmıyorsa başlatın ve etkinleştirin:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Şimdi, HTTP ve HTTPS hizmetleri için portları açalım. firewalld önceden tanımlanmış hizmetleri destekler, bu da işimizi kolaylaştırır:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
--permanent bayrağı, bu kuralların güvenlik duvarı yeniden başlatıldığında da kalıcı olmasını sağlar. Değişikliklerin etkili olması için güvenlik duvarını yeniden yüklememiz gerekir:
sudo firewall-cmd --reload
Artık Apache, dış ağdan gelen HTTP ve HTTPS isteklerine yanıt verebilecektir.
Apache Kurulumunu Doğrulama
Apache’nin doğru bir şekilde kurulup çalışıp çalışmadığını kontrol etmenin en kolay yolu, bir web tarayıcısı kullanarak sunucunuzun IP adresine veya alan adına gitmektir.
Sunucunuzun genel IP adresini bilmiyorsanız, aşağıdaki komutlardan birini kullanarak öğrenebilirsiniz:
ip a s
veya harici bir servis kullanarak:
curl -4 ifconfig.me
Tarayıcınızda http://your_server_ip adresini açtığınızda, “CentOS Apache Test Page” başlıklı varsayılan bir Apache test sayfası görmelisiniz. Bu sayfa, Apache’nin başarıyla kurulduğunu ve çalıştığını gösterir.
Temel Apache Yapılandırması
Apache’nin esnekliği, kapsamlı yapılandırma seçeneklerinden gelir. Yapılandırma dosyaları, Apache’nin nasıl davranacağını, hangi portları dinleyeceğini, hangi dizinlerden içerik sunacağını ve daha fazlasını belirler.
Yapılandırma Dosyaları
Apache’nin ana yapılandırma dosyası /etc/httpd/conf/httpd.conf konumundadır. Ancak, daha modüler ve yönetilebilir bir yapı için, çoğu zaman ek yapılandırmalar /etc/httpd/conf.d/ dizinindeki .conf uzantılı dosyalarda yapılır. Bu dizindeki tüm .conf dosyaları Apache tarafından otomatik olarak yüklenir.
* /etc/httpd/conf/httpd.conf: Ana yapılandırma dosyası.
* /etc/httpd/conf.d/: Ek yapılandırma dosyalarını içeren dizin.
* /etc/httpd/conf.modules.d/: Modül yükleme yapılandırmalarını içeren dizin.
* /var/www/html: Varsayılan belge kökü (web sitesi dosyalarının bulunduğu dizin).
* /var/log/httpd/: Erişim ve hata günlüklerinin tutulduğu dizin.
ServerName Ayarı
httpd.conf dosyasında ServerName yönergesi genellikle yorum satırı (hash # ile başlar) olarak gelir. Bu yönergeyi yapılandırmak, Apache’nin başlatılırken veya yeniden yüklenirken DNS çözümleme hataları vermesini engeller ve sunucunun kendisini hangi alan adı veya IP adresiyle tanıtacağını belirtir.
httpd.conf dosyasını bir metin düzenleyici ile açın (örneğin vi veya nano):
sudo vi /etc/httpd/conf/httpd.conf
Dosya içinde ServerName satırını bulun ve yorum satırını kaldırarak sunucunuzun IP adresini veya alan adını ekleyin:
#ServerName www.example.com:80
ServerName your_server_ip_or_domain:80
Değişiklikleri kaydettikten sonra Apache’yi yeniden başlatın:
sudo systemctl restart httpd
Virtual Host (Sanal Sunucu) Oluşturma
Bir sunucuda birden fazla web sitesi barındırmak istiyorsanız, Virtual Host (Sanal Sunucu) yapılandırmalarını kullanmanız gerekir. Her Virtual Host, kendi belge köküne, günlük dosyalarına ve alan adına sahip ayrı bir web sitesini temsil eder.
Yeni bir Virtual Host dosyası oluşturmak için /etc/httpd/conf.d/ dizinini kullanacağız. Örneğin, example.com adında bir web sitesi için example.com.conf adında bir dosya oluşturalım:
sudo vi /etc/httpd/conf.d/example.com.conf
Dosyanın içine aşağıdaki içeriği ekleyin:
ServerAdmin webmaster@example.com
DocumentRoot /var/www/example.com/html
ServerName example.com
ServerAlias www.example.com
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
Bu yapılandırmada:
* ServerAdmin: Web sitesi yöneticisinin e-posta adresi.
* DocumentRoot: Web sitesinin dosyalarının bulunduğu dizin.
* ServerName: Web sitesinin ana alan adı.
* ServerAlias: Web sitesinin alternatif alan adları (örneğin, www versiyonu).
* ErrorLog ve CustomLog: Hata ve erişim günlüklerinin kaydedileceği dosyalar.
* bloğu: Belirtilen dizine erişim ve davranış kurallarını tanımlar.
* Options Indexes FollowSymLinks: Dizin listeleme ve sembolik bağlantıları takip etme izinleri.
* AllowOverride All: .htaccess dosyalarının kullanılmasına izin verir.
* Require all granted: Tüm isteklere izin verir.
Şimdi, DocumentRoot olarak belirttiğimiz dizini ve bir test HTML dosyasını oluşturalım:
sudo mkdir -p /var/www/example.com/html
echo "Merhaba example.com " | sudo tee /var/www/example.com/html/index.html
Apache’nin web dizinlerine erişebilmesi için doğru dosya izinlerini ve sahipliklerini ayarlamamız gerekir. Apache varsayılan olarak apache kullanıcısı ve grubu altında çalışır:
sudo chown -R apache:apache /var/www/example.com
sudo chmod -R 755 /var/www/example.com
SELinux Yapılandırması: CentOS’un güvenlik katmanı olan SELinux, Apache’nin yeni oluşturulan dizinlere erişmesini engelleyebilir. Bu durumu düzeltmek için, yeni web dizininin SELinux bağlamını httpd_sys_content_t olarak ayarlamamız gerekir:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
sudo restorecon -Rv /var/www/example.com
Bu komutlar, /var/www/example.com dizini ve altındaki tüm dosyalar için doğru SELinux bağlamını atar.
Tüm bu değişikliklerden sonra, Apache yapılandırma dosyalarının sözdizimini test etmek ve ardından servisi yeniden başlatmak önemlidir:
sudo apachectl configtest
Eğer çıktı Syntax OK ise, her şey yolunda demektir. Şimdi Apache’yi yeniden başlatın:
sudo systemctl restart httpd
Artık example.com (veya www.example.com) alan adını tarayıcınızda açtığınızda, oluşturduğunuz “example.com çalışıyor!” sayfasını görmelisiniz. (Bu alan adının DNS kayıtlarını sunucunuzun IP adresine yönlendirmeniz gerektiğini unutmayın.)
Apache ile SSL/TLS Kullanımı (HTTPS)
Günümüzde web siteleri için SSL/TLS (HTTPS) kullanımı bir zorunluluk haline gelmiştir. HTTPS, tarayıcı ile sunucu arasındaki iletişimi şifreleyerek veri güvenliğini sağlar, SEO açısından da önemlidir ve birçok modern tarayıcı HTTP sitelerini “güvensiz” olarak işaretler.
CentOS 8’de Apache ile HTTPS kullanmak için mod_ssl modülünü kurmamız gerekir:
sudo dnf install mod_ssl -y
Bu modül, SSL/TLS sertifikalarını yönetmek ve HTTPS bağlantılarını kurmak için gereken bileşenleri sağlar. Kurulumdan sonra Apache’yi yeniden başlatmanız gerekmez, ancak yapılandırma dosyalarıyla çalışırken her zaman yeniden başlatmak iyi bir alışkanlıktır.
HTTPS yapılandırması için bir SSL sertifikasına ihtiyacınız olacaktır. Bu sertifikayı Let’s Encrypt gibi ücretsiz bir sertifika sağlayıcısından alabilir veya kendi imzalı (self-signed) bir sertifika oluşturabilirsiniz.
Let’s Encrypt ile SSL
Let’s Encrypt, ücretsiz, otomatik ve açık bir Sertifika Yetkilisidir (CA). certbot aracı, Let’s Encrypt sertifikalarını Apache ile entegre etmek için en kolay yoldur.
Öncelikle epel-release deposunu etkinleştirmemiz ve ardından certbot ve Apache eklentisini kurmamız gerekiyor:
sudo dnf install epel-release -y
sudo dnf install certbot python3-certbot-apache -y
Kurulumdan sonra, alan adınız için bir sertifika almak üzere certbot‘u çalıştırın:
sudo certbot --apache
certbot, alan adlarınızı otomatik olarak algılamaya çalışacak ve size hangi alan adları için sertifika almak istediğinizi soracaktır. Ayrıca bir e-posta adresi girmeniz ve hizmet şartlarını kabul etmeniz istenecektir. Kurulum sırasında, HTTP trafiğini HTTPS’e yönlendirmek isteyip istemediğiniz de sorulacaktır; genellikle bu seçeneği kabul etmek iyi bir uygulamadır.
certbot işlemi tamamlandığında, sertifikalarınız otomatik olarak Apache yapılandırmanıza eklenecek ve HTTPS üzerinden sitenize erişilebilir olacaktır.
Let’s Encrypt sertifikaları 90 gün geçerlidir. certbot paketi, sertifikaları otomatik olarak yenilemek için bir cron işi veya systemd zamanlayıcısı da kurar. Yenileme işleminin düzgün çalıştığından emin olmak için bir kuru çalıştırma (dry-run) yapabilirsiniz:
sudo certbot renew --dry-run
Kendi İmzalı Sertifika (Self-Signed)
Geliştirme veya test ortamları için kendi imzalı bir sertifika oluşturabilirsiniz. Bu sertifikalar tarayıcılar tarafından güvenilir olarak kabul edilmez ve bir uyarı mesajı gösterir, ancak şifrelenmiş bir bağlantı sağlar.
Kendi imzalı bir sertifika oluşturmak için openssl kullanabiliriz:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/certs/apache-selfsigned.crt
Bu komut sizden bazı bilgiler (ülke, şehir, organizasyon vb.) isteyecektir. Common Name alanına sunucunuzun IP adresini veya alan adını girin.
Sertifika ve anahtar dosyalarını oluşturduktan sonra, Apache’nin ssl.conf dosyasını düzenleyerek bu sertifikaları kullanmasını sağlayın:
sudo vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile ve SSLCertificateKeyFile yönergelerini oluşturduğunuz sertifika ve anahtar dosyalarının yollarıyla güncelleyin:
SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
Değişiklikleri kaydedin ve Apache’yi yeniden başlatın:
sudo systemctl restart httpd
Artık tarayıcınızdan https://your_server_ip_or_domain adresine gittiğinizde, bir güvenlik uyarısı ile birlikte sitenize HTTPS üzerinden erişebileceksiniz.
Apache Yönetimi İçin Temel Komutlar
Apache servisini yönetmek için systemctl komutunu kullanırız:
* Başlatma: sudo systemctl start httpd
* Durdurma: sudo systemctl stop httpd
* Yeniden Başlatma: sudo systemctl restart httpd (Servisi durdurur ve tekrar başlatır.)
* Yeniden Yükleme: sudo systemctl reload httpd (Servisi durdurmadan yapılandırma değişikliklerini uygular. Kesinti süresi olmadan değişiklik yapmak için idealdir.)
* Durumu Kontrol Etme: sudo systemctl status httpd
* Sistem Başlangıcında Etkinleştirme: sudo systemctl enable httpd
* Sistem Başlangıcında Devre Dışı Bırakma: sudo systemctl disable httpd
Ayrıca, Apache yapılandırma dosyalarındaki sözdizimi hatalarını kontrol etmek için apachectl komutunu kullanabilirsiniz:
sudo apachectl configtest
Bu komut, Apache’yi yeniden başlatmadan önce olası yapılandırma hatalarını tespit etmenize yardımcı olur.
Sık Karşılaşılan Sorunlar ve Çözümleri
Apache kurulumu ve yapılandırması sırasında bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bunlardan bazıları ve çözümleri:
Firewall Engeli
Sorun: Apache çalışıyor gibi görünüyor, ancak web tarayıcısından erişilemiyor.
Çözüm: Güvenlik duvarınızın HTTP (80) ve HTTPS (443) portlarını açtığından emin olun.
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
SELinux Engeli
Sorun: Web sitesi “Forbidden” hatası veriyor veya oluşturduğunuz dizinlere erişilemiyor.
Çözüm: SELinux’un Apache’nin web dizinlerine erişimini engellemesi yaygın bir durumdur. Web içeriğinizin bulunduğu dizinler için doğru SELinux bağlamını ayarladığınızdan emin olun:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
sudo restorecon -Rv /var/www/example.com
Eğer hala sorun yaşıyorsanız, SELinux’u geçici olarak devre dışı bırakıp sorunun SELinux’tan kaynaklanıp kaynaklanmadığını kontrol edebilirsiniz: sudo setenforce 0. Sorun çözülürse, kalıcı bir çözüm için bağlamları doğru ayarlamanız veya SELinux kurallarını değiştirmeniz gerekir. Güvenlik açısından SELinux’u kalıcı olarak devre dışı bırakmak önerilmez.
Yapılandırma Hatası
Sorun: Apache servisi başlatılamıyor veya configtest hatası veriyor.
Çözüm: Yapılandırma dosyalarınızda bir sözdizimi hatası olabilir. sudo apachectl configtest komutunu kullanarak hatayı tespit edin. Genellikle hata mesajında hangi dosyanın ve satırın sorunlu olduğu belirtilir. Hata günlüklerini (/var/log/httpd/error_log) kontrol etmek de sorunun kaynağını anlamanıza yardımcı olabilir.
Servis Başlatılamıyor
Sorun: sudo systemctl start httpd komutu başarısız oluyor.
Çözüm: Daha detaylı hata mesajları için sudo systemctl status httpd veya sudo journalctl -xe | grep httpd komutlarını kullanın. Genellikle port çakışması (başka bir servisin 80 veya 443 portunu kullanması) veya yapılandırma dosyasındaki ciddi bir hata bu duruma neden olabilir.
Erişim İzinleri
Sorun: Web sitesi “403 Forbidden” hatası veriyor veya dosyalara erişemiyor.
Çözüm: Web dizinlerinizin ve dosyalarınızın Apache kullanıcısı (apache) tarafından okunabilir olduğundan emin olun.
sudo chown -R apache:apache /var/www/your_website
sudo chmod -R 755 /var/www/your_website
Ayrıca bloklarında Require all granted yönergesinin doğru ayarlandığından emin olun.
Sonuç
Bu makalede, CentOS 8 işletim sistemi üzerine Apache web sunucusunun nasıl kurulacağını, temel yapılandırmalarını ve yaygın sorunlara çözümleri ayrıntılı bir şekilde ele aldık. Apache’nin kurulumu ve ilk yapılandırması oldukça basit olsa da, güvenlik duvarı ayarları, SELinux politikaları ve sanal host yapılandırmaları gibi adımlar dikkat gerektirir.
Artık CentOS 8 sunucunuzda çalışan bir Apache web sunucunuz var. Bu temel kurulumun üzerine PHP, MySQL/MariaDB gibi ek bileşenleri kurarak dinamik web uygulamaları barındırabilir veya WordPress gibi popüler içerik yönetim sistemlerini çalıştırabilirsiniz. Apache’nin modüler yapısı ve geniş yapılandırma seçenekleri sayesinde, ihtiyaçlarınıza göre sunucunuzu daha da optimize edebilir ve güvenlik önlemlerini artırabilirsiniz. Güvenliğiniz için her zaman sisteminizi ve yazılımlarınızı güncel tutmayı, güçlü parolalar kullanmayı ve düzenli yedeklemeler yapmayı unutmayın.