Apache Sanal Hostları Nedir ve Neden Kullanılır?
Bir web sunucusu, genellikle tek bir IP adresine sahiptir. Ancak günümüz dünyasında, tek bir sunucu üzerinde birden fazla web sitesi barındırmak oldukça yaygın ve ekonomiktir. İşte tam da bu noktada Apache Sanal Hostları (Virtual Hosts) devreye girer. Sanal hostlar, Apache web sunucusunun tek bir fiziksel sunucu, IP adresi veya port üzerinde birden fazla web sitesini (domaini) barındırmasına olanak tanıyan bir özelliktir.
Bu rehberde, Ubuntu 13.10 işletim sistemi üzerinde Apache sanal hostlarını nasıl kuracağınızı ve yapılandıracağınızı adım adım öğreneceksiniz. Sanal hostlar sayesinde her bir web siteniz için ayrı bir doküman kökü (document root), hata günlükleri (error logs) ve erişim günlükleri (access logs) tanımlayabilirsiniz. Bu, kaynakları daha verimli kullanmanızı sağlarken, her sitenin birbirinden bağımsız çalışmasına olanak tanır.
Sanal Host Kullanmanın Avantajları:
- Maliyet Verimliliği: Birden fazla sunucuya veya IP adresine ihtiyaç duymadan birçok web sitesini tek bir makinede barındırabilirsiniz.
- Kaynak Verimliliği: Sunucunun donanım kaynaklarını (CPU, RAM) daha etkin kullanır.
- Kolay Yönetim: Her site için ayrı yapılandırma dosyaları sayesinde yönetimi basitleştirir.
- Esneklik: Her siteye özel ayarlar (PHP sürümü, modüller vb.) tanımlayabilme potansiyeli sunar.
Ön Gereksinimler ve Apache Kurulumu
Bu rehbere başlamadan önce, Ubuntu 13.10 işletim sistemine sahip bir sunucuya veya sanal makineye ve root veya sudo yetkilerine sahip bir kullanıcıya ihtiyacınız olacaktır. Eğer Apache web sunucusu henüz kurulu değilse, aşağıdaki adımları izleyerek kurabilirsiniz.
Sistem Güncellemesi ve Apache Kurulumu
İlk olarak, sisteminizin paket listesini güncelleyelim ve mevcut paketleri yükseltelim:
sudo apt-get update
sudo apt-get upgrade
Şimdi Apache web sunucusunu kuralım:
sudo apt-get install apache2
Kurulum tamamlandıktan sonra, Apache servisinin çalıştığından emin olmak için aşağıdaki komutu kullanabilirsiniz:
sudo service apache2 status
Tarayıcınızda http://localhost veya sunucunuzun IP adresini ziyaret ederek Apache’nin varsayılan hoş geldiniz sayfasını görmeniz gerekir.
Web Sitesi Dizin Yapısı Oluşturma
Her sanal host için ayrı bir dizin yapısı oluşturmak iyi bir pratiktir. Bu, sitelerinizin dosyalarını düzenli tutmanıza yardımcı olur. Genellikle /var/www/ dizini altında her site için özel bir dizin oluşturulur.
Örnek olarak, site1.com ve site2.com adında iki farklı web sitesi barındıracağımızı varsayalım. Bu siteler için dizinleri ve içindeki public_html alt dizinlerini oluşturalım:
sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html
Bu dizinlere Apache’nin erişebilmesi için doğru kullanıcı ve grup izinlerini ayarlamamız gerekir. Apache genellikle www-data kullanıcısı ve grubu altında çalışır:
sudo chown -R www-data:www-data /var/www/site1.com
sudo chown -R www-data:www-data /var/www/site2.com
sudo chmod -R 755 /var/www/site1.com
sudo chmod -R 755 /var/www/site2.com
Şimdi her sitenin public_html dizinine basit birer index.html dosyası oluşturalım. Bu dosyalar, sanal hostların doğru çalışıp çalışmadığını test etmemize yardımcı olacaktır.
site1.com için:
sudo nano /var/www/site1.com/public_html/index.html
İçine aşağıdaki içeriği yapıştırın:
site1.com - Sanal Host Çalışıyor!
site1.com Sanal Host Başarıyla Kuruldu!
Bu sayfa site1.com için Apache sanal hostu tarafından sunulmaktadır.
Kaydedin ve kapatın (Ctrl+O, Enter, Ctrl+X).
Aynı şekilde site2.com için de bir index.html dosyası oluşturalım:
sudo nano /var/www/site2.com/public_html/index.html
İçine aşağıdaki içeriği yapıştırın:
site2.com - Sanal Host Çalışıyor!
site2.com Sanal Host Başarıyla Kuruldu!
Bu sayfa site2.com için Apache sanal hostu tarafından sunulmaktadır.
Kaydedin ve kapatın.
Sanal Host Oluşturma ve Yapılandırma
Apache’de sanal host yapılandırma dosyaları genellikle /etc/apache2/sites-available/ dizininde bulunur. Bu dizinde her bir sanal host için ayrı bir yapılandırma dosyası oluşturacağız. Daha sonra bu dosyaları a2ensite aracıyla etkinleştireceğiz.
site1.com İçin Sanal Host Dosyası Oluşturma
Varsayılan Apache yapılandırma dosyasını kopyalayarak başlayabiliriz. Ubuntu 13.10’da bu dosya genellikle default veya 000-default.conf olarak adlandırılır. Biz default dosyasını kullanacağız.
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site1.com.conf
Şimdi yeni oluşturduğumuz site1.com.conf dosyasını düzenleyelim:
sudo nano /etc/apache2/sites-available/site1.com.conf
Dosyanın içeriğini aşağıdaki gibi güncelleyin (mevcut içeriği silip bunu yapıştırabilirsiniz):
ServerAdmin webmaster@site1.com
ServerName site1.com
ServerAlias www.site1.com
DocumentRoot /var/www/site1.com/public_html
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Kaydedin ve kapatın. Şimdi bu direktiflerin ne anlama geldiğine bakalım:
: Bu blok, sanal host tanımının başlangıcını belirtir. *:80 ifadesi, bu sanal hostun sunucunun tüm IP adresleri üzerindeki 80 numaralı porttan gelen HTTP isteklerini dinleyeceğini gösterir.
* ServerAdmin webmaster@site1.com: Bu, sitenizle ilgili hata mesajlarında görüntülenecek yönetici e-posta adresidir.
* ServerName site1.com: Bu, sanal hostun birincil alan adıdır. Apache, bu alan adına gelen istekleri bu sanal hosta yönlendirecektir.
* ServerAlias www.site1.com: Bu, birincil alan adının alternatif adlarıdır. Örneğin, kullanıcılar www.site1.com yazdığında da bu sanal hosta yönlendirilecektir.
* DocumentRoot /var/www/site1.com/public_html: Bu, web sitesinin dosyalarının bulunduğu kök dizinidir.
* : Bu blok, belirtilen dizin için özel ayarlar tanımlar.
* Options Indexes FollowSymLinks MultiViews: Dizin listeleme, sembolik bağlantıları takip etme gibi seçenekleri etkinleştirir.
* AllowOverride All: .htaccess dosyalarının bu dizinde Apache ayarlarını geçersiz kılmasına izin verir. Bu, WordPress gibi CMS’ler için genellikle gereklidir.
* Order allow,deny ve allow from all: Bu, Apache 2.2 ve önceki sürümlerde erişim kontrolü için kullanılır. Tüm IP adreslerinden erişime izin verir.
* ErrorLog ${APACHE_LOG_DIR}/error.log: Bu sanal hosta ait hata günlüklerinin kaydedileceği dosyayı belirtir.
* CustomLog ${APACHE_LOG_DIR}/access.log combined: Bu sanal hosta ait erişim günlüklerinin kaydedileceği dosyayı ve formatı belirtir.
site2.com İçin Sanal Host Dosyası Oluşturma
Aynı adımları site2.com için de tekrarlayalım:
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/site2.com.conf
sudo nano /etc/apache2/sites-available/site2.com.conf
Dosyanın içeriğini aşağıdaki gibi güncelleyin:
ServerAdmin webmaster@site2.com
ServerName site2.com
ServerAlias www.site2.com
DocumentRoot /var/www/site2.com/public_html
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Kaydedin ve kapatın.
Sanal Hostları Etkinleştirme ve Apache’yi Yeniden Başlatma
Sanal host yapılandırma dosyalarını oluşturduktan sonra, Apache’nin bunları tanıması için etkinleştirmemiz gerekir. Bunun için a2ensite (Apache 2 Enable Site) komutunu kullanırız:
sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf
Bu komutlar, /etc/apache2/sites-enabled/ dizinine yapılandırma dosyalarınıza sembolik bağlantılar oluşturur.
Ayrıca, Apache’nin varsayılan sanal hostunu devre dışı bırakmak iyi bir fikirdir. Bu, herhangi bir alan adı eşleşmediğinde sitelerinizin yanlışlıkla varsayılan içeriği göstermesini engeller:
sudo a2dissite default
Yapılandırma değişikliklerinin etkili olması için Apache servisini yeniden başlatmamız gerekir:
sudo service apache2 restart
Herhangi bir hata olup olmadığını kontrol etmek için:
sudo apache2ctl configtest
Eğer “Syntax OK” çıktısını görürseniz, yapılandırmanızda bir sorun yok demektir.
Sistem Host Dosyasını Düzenleme ve Test Etme
Şu ana kadar oluşturduğumuz site1.com ve site2.com alan adları gerçek alan adları değildir ve DNS sunucularında kayıtlı değillerdir. Bu nedenle, bunları yerel olarak test etmek için bilgisayarınızın hosts dosyasını düzenlemeniz gerekir. Bu dosya, belirli alan adlarını belirli IP adreslerine eşlemenizi sağlar.
Not: Bu adım sadece sanal hostları kendi yerel makinenizden test etmek içindir. Gerçek bir alan adı kullanıyorsanız, DNS kayıtlarınızı sunucunuzun IP adresine yönlendirmeniz gerekecektir.
Yerel makinenizin (Ubuntu sunucusunun kendisi veya testi yapacağınız başka bir Linux/macOS makinesi) hosts dosyasını düzenleyelim:
sudo nano /etc/hosts
Windows kullanıyorsanız, C:\Windows\System32\drivers\etc\hosts yolunda bulunur ve Yönetici olarak açılan bir metin düzenleyici ile düzenlenmelidir.
Dosyanın sonuna aşağıdaki satırları ekleyin (sunucunuzun gerçek IP adresi yerine 127.0.0.1 kullanabiliriz, çünkü testi sunucunun kendisinden yapacağız):
127.0.0.1 site1.com
127.0.0.1 www.site1.com
127.0.0.1 site2.com
127.0.0.1 www.site2.com
Kaydedin ve kapatın.
Şimdi bir web tarayıcısı açın ve aşağıdaki adresleri ziyaret edin:
* http://site1.com
* http://site2.com
Her iki adrese gittiğinizde de ilgili sitenin index.html dosyasındaki içeriği görmeniz gerekir. Eğer farklı içerikler görüyorsanız, sanal host kurulumunuz başarılı bir şekilde tamamlanmıştır!
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Ubuntu 13.10 üzerinde Apache sanal hostlarını nasıl kuracağınızı ve yapılandıracağınızı öğrendiniz. Artık tek bir sunucu üzerinde birden fazla web sitesini güvenli ve verimli bir şekilde barındırabilirsiniz. Sanal hostlar, web geliştiricileri ve sistem yöneticileri için vazgeçilmez bir araçtır ve projelerinizi daha düzenli yönetmenize olanak tanır.
Sıkça Sorulan Sorular (SSS)
Sanal hostum çalışmıyor, ne yapmalıyım?
Birkaç şeyi kontrol etmelisiniz:
- Apache Yapılandırma Sözdizimi:
sudo apache2ctl configtestkomutunu çalıştırarak herhangi bir sözdizimi hatası olup olmadığını kontrol edin. - Sanal Host Etkin mi?:
sudo a2ensite your_site.confkomutuyla sanal hostunuzu etkinleştirdiğinizden emin olun. - Apache Yeniden Başlatıldı mı?: Değişikliklerin etkili olması için
sudo service apache2 restartkomutuyla Apache’yi yeniden başlattığınızdan emin olun. - Dizin İzinleri:
DocumentRootdizininizin ve içerdiği dosyaların Apache’nin (www-data) okuma iznine sahip olduğundan emin olun (sudo chown -R www-data:www-data /var/www/your_site.comvesudo chmod -R 755 /var/www/your_site.com). DocumentRootDoğru mu?: Yapılandırma dosyanızdakiDocumentRootyolunun doğru olduğundan emin olun.ServerNameveServerAliasDoğru mu?: Alan adlarınızın doğru yazıldığından emin olun.- Yerel Host Dosyası (
/etc/hosts): Test ediyorsanız, yerel host dosyanızdaki eşleşmenin doğru olduğundan emin olun.
Neden AllowOverride All kullanmalıyım?
AllowOverride All direktifi, Apache’nin belirli bir dizindeki .htaccess dosyalarını işlemesine izin verir. WordPress, Joomla gibi içerik yönetim sistemleri veya bazı PHP çerçeveleri, URL yeniden yazma (mod_rewrite) kurallarını veya diğer özel yapılandırmaları .htaccess dosyaları aracılığıyla yönetir. Bu direktifi etkinleştirmezseniz, bu tür uygulamalar düzgün çalışmayabilir.
HTTPS (SSL) için sanal host nasıl ayarlanır?
HTTPS için sanal host kurmak, mevcut yapılandırmanıza ek olarak birkaç adım gerektirir:
- SSL modülünü etkinleştirin:
sudo a2enmod ssl - Mevcut sanal host dosyanızı kopyalayarak veya düzenleyerek yeni bir
VirtualHostbloğu oluşturun. Bu blok genellikleşeklinde olur. SSLEngine on,SSLCertificateFileveSSLCertificateKeyFiledirektiflerini ekleyerek SSL sertifika ve anahtar dosyalarınızın yolunu belirtin.- Apache’yi yeniden başlatın.
ServerAlias ne işe yarar?
ServerAlias, birincil ServerName dışında, aynı web sitesine yönlendirilmesini istediğiniz ek alan adlarını veya alt alan adlarını belirtmek için kullanılır. Örneğin, ServerName example.com ve ServerAlias www.example.com subdomain.example.com şeklinde ayarlayarak, bu üç adresin de aynı web sitesini göstermesini sağlayabilirsiniz.
DocumentRoot nedir?
DocumentRoot, Apache’nin bir alan adına gelen istekler için web sitesi dosyalarını aramaya başlayacağı ana dizindir. Tarayıcıda http://yourdomain.com/index.html adresini yazdığınızda, Apache bu dosyayı DocumentRoot dizininin içinde arar. Bu, web sitenizin ana dizinidir.
sudo service apache2 restart ile sudo service apache2 reload arasındaki fark nedir?
sudo service apache2 restart: Apache servisini tamamen durdurur ve sonra tekrar başlatır. Bu işlem sırasında kısa bir kesinti yaşanabilir, mevcut bağlantılar kesilir. Yeni modüllerin etkinleştirilmesi veya önemli yapılandırma değişiklikleri için genellikle yeniden başlatma gereklidir.sudo service apache2 reload: Apache’yi yapılandırma dosyalarını yeniden yüklemesi için bilgilendirir ancak servisi durdurup başlatmaz. Bu, mevcut bağlantıları kesmeden yeni yapılandırmaların uygulanmasını sağlar. Çoğu sanal host değişikliği gibi durumlar içinreloadyeterlidir ve daha az kesintiye neden olur.