Tek bir sunucu üzerinde birden fazla web sitesi barındırmak, maliyetleri düşürmek ve kaynakları verimli kullanmak isteyenler için hayati bir ihtiyaçtır. Peki, bu karmaşık görünen işlemi Ubuntu sunucunuzda Apache Sanal Sunucular (Virtual Hosts) kullanarak nasıl kolayca başarabilirsiniz? Bu kapsamlı rehber, sıfırdan başlayarak kendi sanal sunucularınızı kurmanız ve yönetmeniz için adım adım yol gösterecek, böylece web projelerinizi tek bir güçlü altyapıda sorunsuz bir şekilde barındırabileceksiniz.
Apache Sanal Sunucular Nedir ve Neden Kullanmalıyız?
Günümüzde birçok işletme ve geliştirici, birden fazla web sitesini yönetmek durumundadır. Her web sitesi için ayrı bir fiziksel sunucu satın almak hem maliyetli hem de kaynak israfına yol açan bir çözümdür. İşte tam bu noktada Apache Sanal Sunucular (Virtual Hosts) devreye girer. Sanal sunucular, tek bir fiziksel sunucu üzerinde birden fazla alan adını (domain) veya web sitesini barındırmanıza olanak tanıyan bir Apache özelliğidir. Bu sayede, aynı IP adresi ve port numarası üzerinden farklı web sitelerine hizmet verebilirsiniz. Bu yetenek, sunucu yönetimi ve maliyet etkinliği açısından oldukça önemlidir.
Peki, neden sanal sunucuları kullanmalıyız? Öncelikle, maliyet tasarrufu sağlar. Her web sitesi için ayrı bir sunucu kiralamak veya satın almak yerine, mevcut sunucunuzun kaynaklarını birden fazla projeye dağıtabilirsiniz. Bu, özellikle küçük ve orta ölçekli işletmeler veya kişisel projeler için büyük bir avantajdır. İkinci olarak, kaynak verimliliği artar. Sunucunuzun CPU, RAM ve disk gibi kaynakları, sanal sunucular aracılığıyla daha etkin bir şekilde kullanılır. Boşta duran kaynaklar yerine, bu kaynaklar farklı web sitelerinin ihtiyaçlarını karşılamak üzere tahsis edilebilir.
Üçüncü bir neden olarak, kolay yönetim ve ölçeklenebilirlik ön plana çıkar. Her web sitesi için ayrı bir yapılandırma dosyası oluşturarak, her birinin ayarlarını bağımsız bir şekilde yönetebilirsiniz. Bir sitenin ayarlarında yapılan değişiklikler diğerlerini etkilemez. Ayrıca, yeni bir web sitesi eklemek istediğinizde, mevcut sunucunuza kolayca yeni bir sanal sunucu yapılandırması ekleyerek ölçeklenebilir bir çözüm sunar. Örneğin, bir e-ticaret siteniz, bir blogunuz ve bir kurumsal web siteniz olduğunu varsayalım. Bu üç farklı siteyi tek bir güçlü Ubuntu sunucusu üzerinde, her birine özel ayarlar ve dizin kökleri ile barındırabilirsiniz. Bu, hem geliştirme hem de bakım süreçlerini büyük ölçüde basitleştirir.
Sanal sunucuların iki ana türü vardır: İsim Tabanlı (Name-based) Sanal Sunucular ve IP Tabanlı (IP-based) Sanal Sunucular. İsim tabanlı sanal sunucular, aynı IP adresini ve portu kullanarak farklı alan adlarına hizmet verir. Bu, günümüzde en yaygın kullanılan yöntemdir çünkü her web sitesi için ayrı bir IP adresine ihtiyaç duymazsınız. Apache, gelen isteğin hangi alan adına ait olduğunu HTTP başlıklarından okuyarak ilgili web sitesine yönlendirme yapar. IP tabanlı sanal sunucular ise her web sitesi için ayrı bir IP adresi gerektirir, bu da daha az esnek ve maliyetli bir çözümdür. Dolayısıyla, bu rehberde genellikle isim tabanlı sanal sunuculara odaklanacağız. Bu temel anlayışla, artık sunucumuzu hazırlama adımlarına geçebiliriz.
Ubuntu Sunucusunu Hazırlama: İlk Adımlar Nelerdir?
Apache sanal sunucularını kurmaya başlamadan önce, Ubuntu sunucunuzun temel gereksinimleri karşıladığından ve Apache web sunucusunun kurulu olduğundan emin olmalıyız. Bu bölüm, sunucunuzu sıfırdan hazırlamanız için gerekli olan adımları içermektedir. Öncelikle, sunucunuzda Apache web sunucusunun kurulu olması şarttır. Eğer kurulu değilse, aşağıdaki komutları kullanarak kolayca kurabilirsiniz. Bu işlemler için SSH üzerinden sunucunuza erişim sağlamanız gerekmektedir.
sudo apt update
sudo apt install apache2
Bu komutlar, Ubuntu paket listesini günceller ve ardından Apache2 paketini kurar. Kurulum tamamlandıktan sonra, Apache servisinin otomatik olarak başlaması gerekir. Tarayıcınızdan sunucunuzun IP adresini ziyaret ederek Apache’nin varsayılan “It works!” sayfasını görüp görmediğinizi kontrol edebilirsiniz. Eğer görüyorsanız, Apache başarıyla çalışıyor demektir.
Bir diğer önemli adım, güvenlik duvarını yapılandırmaktır. Ubuntu’da varsayılan olarak UFW (Uncomplicated Firewall) güvenlik duvarı bulunur. Web sunucunuzun dışarıdan erişilebilir olması için HTTP (port 80) ve HTTPS (port 443) trafiğine izin vermeniz gerekmektedir. Aşağıdaki komutlar, bu portları UFW üzerinden açacaktır:
sudo ufw app list
sudo ufw allow 'Apache Full'
sudo ufw enable
sudo ufw status
sudo ufw app list komutu, UFW tarafından tanınan uygulama profillerini listeler. “Apache Full” profili, hem HTTP (80) hem de HTTPS (443) trafiğine izin verir. sudo ufw enable komutu güvenlik duvarını etkinleştirir ve sudo ufw status komutu mevcut kuralları gösterir, böylece her şeyin doğru yapılandırıldığından emin olabilirsiniz. Bu adımlar, sunucunuzun güvenliğini sağlarken aynı zamanda web sitelerinizin erişilebilir olmasını garanti eder.
sudo ufw allow 'OpenSSH'. Bu, sunucunuza uzaktan erişiminizi sürdürmek için kritik öneme sahiptir.
Son olarak, sanal sunucularınız için dizin yapısını oluşturmanız gerekmektedir. Apache, varsayılan olarak /var/www/html dizinini kullanır. Ancak, her sanal sunucu için ayrı bir dizin kökü (Document Root) oluşturmak daha iyi bir uygulamadır. Bu, web sitelerinizin dosyalarını düzenli tutmanıza ve güvenliklerini artırmanıza yardımcı olur. Örneğin, example.com adında bir web sitesi için aşağıdaki gibi bir dizin yapısı oluşturabiliriz:
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
mkdir -p komutu, gerekli üst dizinleri de oluşturarak /var/www/example.com/html dizinini yaratır. chown -R $USER:$USER komutu, oluşturulan dizinin sahipliğini mevcut kullanıcınıza verir, böylece dosyaları düzenleme yetkiniz olur. Son olarak, chmod -R 755 komutu, web sunucusunun dosyaları okumasına ve dizinlere erişmesine izin veren standart izinleri ayarlar. Bu, hem güvenlik hem de işlevsellik açısından önemlidir. Bu temel hazırlık adımları tamamlandığında, artık ilk sanal sunucunuzu yapılandırmaya hazırsınız demektir.
İlk Sanal Sunucuyu Oluşturma: Adım Adım Rehber
Sunucumuz hazırlandığına göre, artık ilk Apache sanal sunucumuzu oluşturabiliriz. Bu bölüm, example.com adında bir alan adı için sanal sunucu yapılandırma dosyasını oluşturma, etkinleştirme ve test etme süreçlerini adım adım açıklayacaktır. Bu adımlar, herhangi bir web sitesini Apache üzerinde barındırmak için temel bir şablon görevi görecektir.
Dizin Yapısını Hazırlama ve Test Dosyası Oluşturma
Önceki bölümde oluşturduğumuz dizin yapısını kullanarak, web sitemizin içeriğini barındıracak bir test dosyası oluşturalım. Bu, sanal sunucunun doğru çalışıp çalışmadığını kontrol etmemize yardımcı olacaktır. /var/www/example.com/html dizinine basit bir HTML dosyası ekleyelim:
sudo nano /var/www/example.com/html/index.html
Açılan dosyaya aşağıdaki HTML içeriğini yapıştırın:
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>example.com - İlk Sanal Sunucum</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; background-color: #f4f4f4; }
h1 { color: #333; }
p { color: #666; }
</style>
</head>
<body>
<h1>example.com Sanal Sunucusu Başarıyla Çalışıyor!</h1>
<p>Bu, Ubuntu sunucunuzdaki ilk Apache sanal sunucunuzdur.</p>
</body>
</html>
Dosyayı kaydedip kapatın (CTRL+X, Y, Enter). Bu basit sayfa, sanal sunucumuzun doğru yapılandırıldığında tarayıcımızda görünecek olan içeriktir. Bu adım, yapılandırma sonrası görsel bir geri bildirim almamızı sağlar ve sorun giderme sürecini kolaylaştırır.
Apache Sanal Sunucu Yapılandırma Dosyası Oluşturma
Apache, sanal sunucu yapılandırma dosyalarını genellikle /etc/apache2/sites-available/ dizininde saklar. Her sanal sunucu için bu dizinde ayrı bir dosya oluşturacağız. Genellikle alan adının adını kullanarak bir dosya adı belirlemek iyi bir uygulamadır, örneğin example.com.conf.
sudo nano /etc/apache2/sites-available/example.com.conf
Açılan boş dosyaya aşağıdaki yapılandırma bloğunu yapıştırın. Bu blok, temel bir sanal sunucu için gerekli olan tüm yönergeleri içerir:
<VirtualHost *:80>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/example.com/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Bu yapılandırma bloğundaki önemli yönergeleri açıklayalım:
<VirtualHost *:80>: Bu blok, sanal sunucunun HTTP (port 80) üzerinden gelen isteklere hizmet vereceğini belirtir.*tüm IP adreslerini dinle anlamına gelir.ServerAdmin: Sunucu yöneticisinin e-posta adresi. Hata durumunda iletişim için kullanılır.ServerName: Bu sanal sunucunun yanıt vereceği ana alan adı.ServerAlias: Ana alan adının alternatif adları (örneğin,www.example.com). Bu sayede hemexample.comhem dewww.example.comistekleri bu sanal sunucuya yönlendirilir.DocumentRoot: Web sitesinin dosyalarının bulunduğu dizin kökü. Apache, bu dizinden içerik sunacaktır.ErrorLogveCustomLog: Hata ve erişim günlüklerinin kaydedileceği dosyaları belirtir. Bu günlükler, sorun giderme ve trafik analizi için kritik öneme sahiptir.<Directory /var/www/example.com/html>: Bu blok, belirtilen dizin için özel ayarlar tanımlar.Options Indexes FollowSymLinks: Dizin listeleme (Indexes) ve sembolik bağlantıları takip etme (FollowSymLinks) seçeneklerini etkinleştirir.AllowOverride All:.htaccessdosyalarının kullanımına izin verir. Bu, dizin bazında ek yapılandırma yapmanızı sağlar.Require all granted: Apache 2.4 ve sonrası için, bu dizine tüm erişimlere izin verir.
Yapılandırma dosyasını kaydedip kapatın.
Sanal Sunucuyu Etkinleştirme ve Test Etme
Yapılandırma dosyasını oluşturduktan sonra, Apache’nin bu dosyayı tanıması ve kullanmaya başlaması için etkinleştirmemiz gerekir. Apache, a2ensite (Apache 2 Enable Site) aracı ile bu işlemi kolaylaştırır.
sudo a2ensite example.com.conf
Bu komut, /etc/apache2/sites-available/example.com.conf dosyasından /etc/apache2/sites-enabled/ dizinine sembolik bir bağlantı oluşturur. Apache, etkinleştirilmiş siteleri bu dizinden okur. Varsayılan Apache yapılandırma dosyasını (000-default.conf) devre dışı bırakmak iyi bir uygulamadır, çünkü kendi sanal sunucularınızın çakışmasını önler:
sudo a2dissite 000-default.conf
Yapılandırmada herhangi bir sözdizimi hatası olup olmadığını kontrol etmek için aşağıdaki komutu kullanın:
sudo apache2ctl configtest
Eğer “Syntax OK” çıktısını alırsanız, yapılandırmanız doğru demektir. Herhangi bir hata varsa, Apache hata mesajını gösterecektir ve düzeltmeniz gerekecektir. Son olarak, Apache servisini yeniden başlatarak yeni yapılandırmanın uygulanmasını sağlayın:
sudo systemctl reload apache2
Bu komut, Apache’yi durdurup yeniden başlatmak yerine, yapılandırmayı yeniden yükler ve genellikle daha az kesinti yaratır. Şimdi, yerel bilgisayarınızdaki hosts dosyasını düzenleyerek example.com alan adını sunucunuzun IP adresine yönlendirmeniz gerekmektedir (gerçek bir alan adınız yoksa). Windows’ta C:\Windows\System32\drivers\etc\hosts, Linux/macOS’te /etc/hosts dosyasını açarak aşağıdaki satırı ekleyin:
SUNUCU_IP_ADRESINIZ example.com www.example.com
SUNUCU_IP_ADRESINIZ yerine Ubuntu sunucunuzun IP adresini yazın. Bu sayede, tarayıcınızdan http://example.com adresine gittiğinizde, isteğiniz yerel olarak sunucunuzun IP adresine yönlendirilecek ve Apache’nin sunduğu “example.com Sanal Sunucusu Başarıyla Çalışıyor!” sayfasını göreceksiniz. Bu adımlarla ilk sanal sunucunuz başarıyla kurulmuş ve çalışır duruma gelmiş olacaktır.
Birden Fazla Sanal Sunucu Nasıl Yapılandırılır?
Tek bir sanal sunucu kurmayı başardıktan sonra, aynı prensipleri kullanarak birden fazla web sitesini barındırmak oldukça kolaydır. Bu bölüm, example.org adında ikinci bir web sitesini mevcut sunucumuza nasıl ekleyeceğimizi detaylandıracaktır. Bu süreç, temelde ilk sanal sunucuyu oluşturma adımlarının tekrarından ibarettir, ancak bazı önemli noktalara dikkat etmek gerekmektedir.
İlk olarak, ikinci web sitemiz için gerekli dizin yapısını oluşturalım. Tıpkı example.com için yaptığımız gibi, example.org için de ayrı bir dizin kökü oluşturmak en iyi uygulamadır. Bu, web sitelerinin dosyalarını birbirinden izole tutar ve yönetimi kolaylaştırır.
sudo mkdir -p /var/www/example.org/html
sudo chown -R $USER:$USER /var/www/example.org/html
sudo chmod -R 755 /var/www/example.org
Dizinleri oluşturduktan sonra, bu yeni dizine basit bir index.html dosyası ekleyelim. Bu dosya, example.org sanal sunucusunun doğru çalışıp çalışmadığını test etmemize olanak tanıyacak bir içerik sağlayacaktır.
sudo nano /var/www/example.org/html/index.html
Açılan dosyaya aşağıdaki HTML içeriğini yapıştırın:
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>example.org - İkinci Sanal Sunucum</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; text-align: center; margin-top: 60px; background-color: #e0f2f7; color: #2c3e50; }
h1 { color: #16a085; }
p { color: #34495e; }
</style>
</head>
<body>
<h1>example.org Sanal Sunucusu Başarıyla Çalışıyor!</h1>
<p>Bu, Ubuntu sunucunuzdaki ikinci Apache sanal sunucunuzdur. Harika değil mi?</p>
</body>
</html>
Dosyayı kaydedip kapatın. Bu, tarayıcınızda example.org adresine gittiğinizde görmeyi beklediğiniz içerik olacaktır.
Şimdi sıra, example.org için Apache sanal sunucu yapılandırma dosyasını oluşturmaya geldi. Tıpkı ilk sitemiz için yaptığımız gibi, /etc/apache2/sites-available/ dizininde yeni bir .conf dosyası oluşturacağız:
sudo nano /etc/apache2/sites-available/example.org.conf
Açılan dosyaya aşağıdaki yapılandırma bloğunu yapıştırın. Bu yapılandırma, example.com için kullandığımızla hemen hemen aynıdır, ancak ServerName, ServerAlias ve DocumentRoot yönergeleri example.org‘ye göre güncellenmiştir:
<VirtualHost *:80>
ServerAdmin webmaster@example.org
ServerName example.org
ServerAlias www.example.org
DocumentRoot /var/www/example.org/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/example.org/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Dosyayı kaydedip kapatın. Gördüğünüz gibi, temel yapılandırma mantığı birden fazla site için aynı kalır; sadece alan adı ve dizin kökü bilgileri değişir. Bu, Apache sanal sunucularının ne kadar modüler ve yönetilebilir olduğunu gösterir.
Yeni sanal sunucu yapılandırmasını etkinleştirmek için a2ensite komutunu kullanın:
sudo a2ensite example.org.conf
Yapılandırma dosyasında herhangi bir sözdizimi hatası olup olmadığını kontrol edin:
sudo apache2ctl configtest
Eğer “Syntax OK” çıktısını alırsanız, son olarak Apache servisini yeniden başlatarak değişikliklerin uygulanmasını sağlayın:
sudo systemctl reload apache2
Artık yerel hosts dosyanızı güncelleyerek example.org ve www.example.org‘yi de sunucunuzun IP adresine yönlendirmeniz gerekmektedir:
SUNUCU_IP_ADRESINIZ example.com www.example.com
SUNUCU_IP_ADRESINIZ example.org www.example.org
Tarayıcınızdan http://example.org adresine gittiğinizde, ikinci sanal sunucunuza ait “example.org Sanal Sunucusu Başarıyla Çalışıyor!” sayfasını görmelisiniz. Bu adımlarla, tek bir Ubuntu sunucusu üzerinde birden fazla web sitesini başarıyla barındırabilirsiniz. Her bir web sitesi, kendi dizin kökünden içerik sunacak ve kendi yapılandırma ayarlarıyla çalışacaktır.
SSL/TLS ile Güvenli Sanal Sunucular Kurma: HTTPS Nasıl Etkinleştirilir?
Günümüzde web sitelerinin güvenliği, kullanıcı deneyimi ve SEO açısından kritik öneme sahiptir. HTTPS (Hypertext Transfer Protocol Secure), web siteniz ile ziyaretçileriniz arasındaki iletişimi şifreleyerek veri güvenliğini sağlar. Bu bölümde, Apache sanal sunucularınız için SSL/TLS sertifikalarını nasıl kuracağınızı ve HTTPS’i nasıl etkinleştireceğinizi anlatacağız. Let’s Encrypt ve Certbot, bu süreci otomatikleştiren popüler ve ücretsiz araçlardır.
İlk adım olarak, Certbot’u Ubuntu sunucunuza kurmanız gerekmektedir. Certbot, Let’s Encrypt sertifikalarını otomatik olarak almayı ve Apache yapılandırmanıza entegre etmeyi kolaylaştıran bir istemcidir. Aşağıdaki komutları kullanarak Certbot’u kurabilirsiniz:
sudo apt update
sudo apt install certbot python3-certbot-apache
python3-certbot-apache paketi, Certbot’un Apache ile entegrasyonunu sağlayan eklentiyi içerir. Kurulum tamamlandıktan sonra, Certbot’u kullanarak bir alan adı için SSL sertifikası alabilir ve HTTPS’i etkinleştirebiliriz. Örneğin, example.com için bir sertifika alalım:
sudo certbot --apache -d example.com -d www.example.com
Bu komutu çalıştırdığınızda, Certbot sizden bazı bilgiler isteyecektir:
- Bir e-posta adresi (acil durum bildirimleri ve kayıp anahtarlar için).
- Let’s Encrypt hizmet koşullarını kabul etmeniz.
- E-posta adresinizi Let’s Encrypt ile paylaşma izni (isteğe bağlı).
Bu bilgileri girdikten sonra, Certbot otomatik olarak alan adlarınızın sahipliğini doğrulayacak, sertifikaları indirecek ve Apache yapılandırmanızı güncelleyecektir. Certbot ayrıca sizden HTTP trafiğini HTTPS’e yönlendirmek isteyip istemediğinizi soracaktır. Genellikle “Redirect” (Yönlendir) seçeneğini seçmek en iyisidir, çünkü bu, tüm ziyaretçilerinizin otomatik olarak güvenli HTTPS bağlantısına yönlendirilmesini sağlar.
Sertifika kurulumu tamamlandığında, Certbot size bir başarı mesajı gösterecek ve sertifikanızın geçerlilik süresini belirtecektir. Şimdi tarayıcınızdan https://example.com adresine giderek sitenizin güvenli bir şekilde çalıştığını kontrol edebilirsiniz. Tarayıcınızın adres çubuğunda bir kilit simgesi görmelisiniz, bu da bağlantının güvenli olduğunu gösterir. Certbot, Apache yapılandırma dosyanızı otomatik olarak güncelleyerek /etc/apache2/sites-available/example.com-le-ssl.conf gibi yeni bir SSL yapılandırma dosyası oluşturur ve bu dosyayı etkinleştirir.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/example.com/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>
Bu yeni yapılandırma dosyası, <VirtualHost *:443> bloğu ile HTTPS trafiğine (port 443) hizmet verir ve Let’s Encrypt sertifikalarının yollarını içerir. Certbot ayrıca, HTTP isteklerini HTTPS’e yönlendirmek için orijinal example.com.conf dosyanızı da günceller. Bu, kullanıcıların sitenize her zaman güvenli bir şekilde erişmesini sağlar.
Let’s Encrypt sertifikaları 90 gün geçerlidir. Bu nedenle, sertifikalarınızı düzenli olarak yenilemeniz gerekmektedir. Certbot, bu yenileme işlemini otomatikleştirmenize yardımcı olur. Aşağıdaki komutu kullanarak sertifikalarınızı manuel olarak test edebilirsiniz:
sudo certbot renew --dry-run
Bu komut, sertifikaların yenilenip yenilenemeyeceğini kontrol eder ancak gerçek bir yenileme yapmaz. Certbot, genellikle sisteminizde otomatik bir cron işi veya systemd zamanlayıcısı oluşturarak sertifikaları otomatik olarak yeniler. Bu sayede, sertifikalarınızın süresinin dolması konusunda endişelenmenize gerek kalmaz ve web siteleriniz her zaman güvenli kalır. Birden fazla sanal sunucunuz varsa, her biri için aynı sudo certbot --apache -d alanadiniz.com -d www.alanadiniz.com komutunu tekrarlayarak ayrı ayrı SSL sertifikaları kurabilirsiniz.
Gelişmiş Sanal Sunucu Yapılandırmaları ve Performans İpuçları
Apache sanal sunucularınızı kurup temel işlevselliğini sağladıktan sonra, web sitelerinizin performansını, güvenliğini ve esnekliğini artırmak için bazı ileri düzey yapılandırmalar ve ipuçları uygulayabilirsiniz. Bu bölüm, .htaccess kullanımı, mod_rewrite, performans optimizasyonu ve sorun giderme konularına odaklanacaktır.
.htaccess Kullanımı ve Mod_rewrite
.htaccess dosyaları, Apache’nin dizin bazında yapılandırma yapmasına olanak tanıyan güçlü bir araçtır. Bu dosyalar, sunucu yapılandırma dosyalarına erişimi olmayan kullanıcıların bile belirli dizinler için URL yeniden yazma (mod_rewrite), parola koruması, özel hata sayfaları ve daha fazlasını ayarlamasına izin verir. Daha önce sanal sunucu yapılandırmalarımızda AllowOverride All yönergesini kullanmamızın nedeni budur. Örneğin, bir .htaccess dosyası kullanarak tüm HTTP trafiğini HTTPS’e yönlendirebilirsiniz (Certbot bunu otomatik yapsa da manuel olarak da yapılabilir) veya SEO dostu URL’ler oluşturabilirsiniz.
mod_rewrite, Apache’nin en güçlü modüllerinden biridir ve URL’leri dinamik olarak yeniden yazmak için kullanılır. Bu, özellikle kalıcı bağlantı (permalink) yapıları kullanan CMS’ler (WordPress gibi) için hayati öneme sahiptir. .htaccess dosyanızda mod_rewrite kullanmak için aşağıdaki gibi bir yapılandırma ekleyebilirsiniz:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Bu örnek, WordPress’in kullandığı temel .htaccess kuralına benzer. Gelen istek bir dosya (!-f) veya dizin (!-d) değilse, isteği index.php‘ye yönlendirir. Bu, temiz URL’ler oluşturmanıza ve web sitenizin kullanıcı dostu olmasını sağlamanıza yardımcı olur. mod_rewrite‘ı kullanabilmek için Apache’de etkinleştirmeniz gerekebilir:
sudo a2enmod rewrite
sudo systemctl reload apache2
Performans İçin İpuçları
Web sitelerinizin hızlı yüklenmesi, kullanıcı deneyimi ve arama motoru sıralamaları için çok önemlidir. Apache sanal sunucularınızın performansını artırmak için birkaç ipucu:
- Modüllerin Etkinleştirilmesi/Devre Dışı Bırakılması: Yalnızca ihtiyacınız olan Apache modüllerini etkinleştirin. Gereksiz modüller, sunucu kaynaklarını tüketebilir. Örneğin,
mod_deflate(içerik sıkıştırma) vemod_headers(önbellekleme başlıkları) gibi performans artırıcı modüllerin etkin olduğundan emin olun. - Önbellekleme (Caching):
mod_expiresvemod_headersgibi modülleri kullanarak tarayıcı önbelleklemesini etkinleştirin. Bu, sık erişilen statik dosyaların (resimler, CSS, JS) istemci tarafında önbelleğe alınmasını sağlar ve sonraki sayfa yüklemelerini hızlandırır. - Gzip Sıkıştırma:
mod_deflatemodülü ile web sitenizin metin tabanlı içeriğini (HTML, CSS, JavaScript) sıkıştırarak bant genişliği kullanımını azaltın ve yükleme sürelerini hızlandırın. - KeepAlive Ayarları:
KeepAlive Onayarı, bir istemci ile birden fazla istek için aynı TCP bağlantısını yeniden kullanmaya olanak tanır. Bu, özellikle birçok küçük dosya içeren sitelerde performansı artırabilir. Ancak,KeepAliveTimeoutsüresini çok uzun tutmaktan kaçının, aksi takdirde sunucu kaynakları boşta kalan bağlantılar tarafından tutulabilir. - MPM (Multi-Processing Modules) Seçimi: Apache, farklı MPM’ler (Prefork, Worker, Event) ile gelir. Her birinin farklı avantajları vardır. Genellikle, modern sunucularda
mod_mpm_event, daha iyi performans ve daha az bellek kullanımı sunar, özellikle yüksek eşzamanlı bağlantılar için.
Hata Ayıklama ve Sorun Giderme
Sanal sunucularınızı kurarken veya yönetirken sorunlarla karşılaşmanız kaçınılmazdır. Apache hata günlükleri, sorun giderme için en değerli araçlardır. Sanal sunucu yapılandırmanızda belirttiğiniz ErrorLog ve CustomLog dosyalarını düzenli olarak kontrol edin. Genellikle /var/log/apache2/error.log ve /var/log/apache2/access.log dizinlerinde bulunurlar.
sudo tail -f /var/log/apache2/error.log
Bu komut, hata günlüğünün son satırlarını gerçek zamanlı olarak gösterir. Bir sorunla karşılaştığınızda, bu günlükleri izlemek, hatanın nedenini hızlıca belirlemenize yardımcı olabilir. Ayrıca, sudo apache2ctl configtest komutunu kullanarak herhangi bir yapılandırma değişikliği sonrası sözdizimi hatalarını kontrol etmeyi unutmayın. Bu, Apache’yi yeniden başlatmadan önce olası hataları tespit etmenizi sağlar ve sunucu kesintilerini önler.
sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/example.com.conf.bak
DNS sorunları da web sitelerine erişimde yaygın bir problem kaynağıdır. Alan adınızın doğru IP adresine işaret ettiğinden emin olmak için dig veya nslookup gibi araçları kullanın. Örneğin:
dig example.com
Bu komut, example.com alan adının hangi IP adresine çözüldüğünü gösterir. Eğer bu IP adresi sunucunuzun IP adresiyle eşleşmiyorsa, DNS kayıtlarınızı kontrol etmeniz gerekmektedir. Bu ileri düzey teknikler ve sorun giderme yaklaşımları, Apache sanal sunucularınızı daha sağlam, hızlı ve güvenli hale getirmenize yardımcı olacaktır.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu kapsamlı rehber boyunca, Ubuntu sunucunuzda Apache sanal sunucularını sıfırdan nasıl kuracağınızı, birden fazla web sitesini nasıl barındıracağınızı ve SSL/TLS ile güvenliği nasıl sağlayacağınızı adım adım öğrendiniz. Sanal sunucular, tek bir fiziksel sunucunun kaynaklarını verimli bir şekilde kullanarak birden fazla web projesini yönetmek için güçlü ve maliyet etkin bir çözüm sunar. Dizin yapısını hazırlamaktan yapılandırma dosyalarını oluşturmaya, güvenlik duvarını ayarlamaktan HTTPS’i etkinleştirmeye kadar tüm temel adımları ele aldık. Ayrıca, .htaccess kullanımı, mod_rewrite, performans optimizasyonları ve hata ayıklama ipuçları ile sanal sunucularınızı daha da geliştirebileceğiniz ileri düzey konulara da değindik. Bu bilgilerle donanmış olarak, kendi web projelerinizi güvenle ve etkin bir şekilde barındırabilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. Sanal sunucu yapılandırmamı yaptıktan sonra web siteme neden erişemiyorum?
Bu sorunun birkaç olası nedeni olabilir:
- Apache Yeniden Başlatılmadı: Yapılandırma değişikliklerinden sonra Apache servisini yeniden başlatmayı (
sudo systemctl reload apache2veyasudo systemctl restart apache2) unuttunuz. - Sözdizimi Hatası: Yapılandırma dosyanızda bir sözdizimi hatası var.
sudo apache2ctl configtestkomutunu kullanarak kontrol edin. - Güvenlik Duvarı: HTTP (80) ve/veya HTTPS (443) portları güvenlik duvarınızda (UFW) açık değil.
sudo ufw statusile kontrol edin ve gerekirsesudo ufw allow 'Apache Full'komutuyla izin verin. - DNS/Hosts Dosyası: Alan adınızın (veya yerel
hostsdosyasındaki girdinin) sunucunuzun doğru IP adresine işaret ettiğinden emin olun. - DocumentRoot Hatası:
DocumentRootyönergesinde belirtilen dizin yolu yanlış veya web sitesi dosyaları bu dizinde bulunmuyor.
2. Sanal sunucular için neden .htaccess yerine ana yapılandırma dosyalarını tercih etmeliyim?
.htaccess dosyaları kolaylık ve dizin bazında esneklik sunsa da, performans açısından bazı dezavantajları vardır. Apache, her gelen istekte .htaccess dosyalarını (ve üst dizinlerdeki tüm .htaccess dosyalarını) aramak ve ayrıştırmak zorunda kalır, bu da sunucu yükünü artırır. Performans kritik uygulamalar için, mümkün olduğunca tüm yapılandırmaları doğrudan ana Apache yapılandırma dosyalarında (.conf dosyaları) yapmak genellikle daha verimli bir yaklaşımdır. .htaccess genellikle sadece sunucu yöneticisi erişimi olmayan kullanıcılar veya hızlı, küçük değişiklikler için kullanılır.
3. HTTPS’e geçtikten sonra neden hala bazı sayfalarda güvenlik uyarısı alıyorum?
Bu durum genellikle “karma içerik” (mixed content) uyarısı olarak bilinir. HTTPS üzerinden yüklenen bir sayfada, bazı kaynakların (resimler, CSS dosyaları, JavaScript dosyaları vb.) hala HTTP üzerinden yüklenmeye çalışılması durumunda ortaya çıkar. Tarayıcılar, bu tür karma içeriği güvenlik riski olarak algılar ve bir uyarı gösterir. Bu sorunu çözmek için, web sitenizdeki tüm kaynak URL’lerinin HTTPS (https://) ile başladığından emin olmanız veya göreceli URL’ler (//example.com/resim.jpg) kullanmanız gerekir. WordPress gibi CMS kullanıyorsanız, veritabanındaki eski HTTP URL’lerini HTTPS ile değiştirmeniz gerekebilir.
4. Farklı sanal sunucularım için farklı PHP versiyonları kullanabilir miyim?
Evet, Apache ve PHP-FPM (FastCGI Process Manager) kombinasyonunu kullanarak farklı sanal sunucular için farklı PHP versiyonları kullanabilirsiniz. Bu, özellikle eski uygulamaları desteklerken yeni projeler için güncel PHP versiyonlarını kullanmak isteyen geliştiriciler için oldukça faydalıdır. Bu yapılandırma, her sanal sunucuyu belirli bir PHP-FPM soketine yönlendirerek yapılır. Bu konu, bu rehberin kapsamının ötesinde olsa da, Apache’nin esnekliğinin bir başka göstergesidir ve daha gelişmiş bir yapılandırma gerektirir.
5. Apache sanal sunucularımı yedeklemek için en iyi yöntem nedir?
Apache sanal sunucu yapılandırmalarınızı yedeklemek için en basit yol, /etc/apache2/sites-available/ dizinindeki tüm .conf dosyalarını kopyalamaktır. Ayrıca /etc/apache2/apache2.conf ve /etc/apache2/ports.conf gibi ana yapılandırma dosyalarını da yedeklemeyi unutmayın. Web sitelerinizin içeriği için, DocumentRoot olarak belirttiğiniz /var/www/alanadiniz.com/html dizinlerini düzenli olarak yedeklemelisiniz. Bu yedekleri uzak bir depolama alanında tutmak, veri kaybı riskini en aza indirecektir.