Nginx ile Sunucu Blokları (Virtual Host) Yönetimi: Tek Sunucuda Birden Fazla Siteyi Yönetmek 
Selam sistemciler!
Bugün, özellikle hosting dünyasına yeni adım atan veya kendi sunucusunda birden fazla web sitesi barındırmak isteyen arkadaşlar için altın değerinde bir konuyu ele alıyoruz: Nginx Sunucu Blokları (Server Blocks). Apache'deki "Virtual Host" kavramının Nginx'teki karşılığı diyebiliriz. Tek bir sunucu makinesi üzerinde, farklı alan adlarını (domain) veya alt alan adlarını (subdomain) birbirinden tamamen bağımsız, ayrı web siteleri olarak yönetmenin yolunu öğreneceğiz. Hem de performanstan ödün vermeden! 
Neden Sunucu Blokları Kullanmalıyım?
Hazırlık Aşaması: Temel Nginx Kurulumu
Eğer sunucunuzda Nginx yüklü değilse, önce onu kuralım. Ben örneklerimi Ubuntu 22.04 LTS üzerinden göstereceğim.
Kurulum tamamlandıktan sonra, Nginx'in çalıştığından emin olalım:
Tarayıcınızdan sunucunuzun IP adresini yazdığınızda "Welcome to nginx!" sayfasını görüyorsanız, hazırsınız demektir.
Sunucu Bloklarının Anatomisi: Dosya ve Dizin Yapısı
Nginx'te sunucu blokları için iki önemli dizin vardır:
İlk Sunucu Bloğumuzu Oluşturalım: örnek1.com
1. Öncelikle, yeni bir konfigürasyon dosyası oluşturalım. Dosya adını genelde site adıyla aynı veririz.
2. Aşağıdaki temel yapılandırmayı dosyanın içine yapıştırın. (Kendi alan adınızı ve dosya yolunuzu yazmayı unutmayın!)
Burada ne yaptık?
3. Şimdi web sitesi dosyalarımız için bir dizin oluşturalım ve içine basit bir test sayfası koyalım.
`index.html` dosyasının içine şunu yazın:
4. Dosya izinlerini düzgün ayarlayalım (genellikle `www-data` kullanıcısı Nginx'i çalıştırır).
5. Artık bu konfigürasyonu aktif hale getirelim. `sites-available`'dan `sites-enabled`'a bir sembolik link oluşturacağız.
İkinci Bir Sunucu Bloğu Daha Ekleyelim: örnek2.com
Aynı adımları, farklı değerlerle tekrarlayalım.
1. İkinci site için konfigürasyon dosyası:
2. Dizin ve test sayfası:
3. İzinleri ayarla ve link oluştur:
Sihirli An: Nginx'i Test Edip Yeniden Başlatalım
Yapılandırmada bir sözdizimi hatası olup olmadığını her zaman kontrol edin. Bu çok önemli bir alışkanlıktır!
Eğer çıktı "nginx: configuration file /etc/nginx/nginx.conf test is successful" şeklindeyse, sorun yok demektir. Şimdi Nginx'i yeniden başlatalım ki yeni ayarlarımız etkin olsun.
Test Zamanı!
Şimdi, eğer `ornek1.com` ve `ornek2.com` alan adlarını gerçekten sunucunuzun IP'sine yönlendirdiyseniz (DNS A kaydı ile), tarayıcıdan her birini açtığınızda kendi özel içeriğini göreceksiniz.
Yerel bilgisayarınızda test etmek için (DNS ayarlamadıysanız), `hosts` dosyanızı düzenleyebilirsiniz. Linux/macOS'ta `/etc/hosts`, Windows'ta `C:\Windows\System32\drivers\etc\hosts` dosyasını yönetici olarak açın ve şu satırı ekleyin (SUNUCU_IP_ADRESİ'ni kendi IP'nizle değiştirin):
Artık tarayıcınıza `
` yazdığınızda birinci, `
` yazdığınızda ikinci sitemiz açılacak!
İleri Seviye İpuçları ve Sorun Giderme
İşte bu kadar! Artık tek bir sunucunuzu, onlarca farklı web sitesini barındırabilecek güçlü bir platforma dönüştürebilirsiniz.
Peki siz sunucu bloklarınızı yönetirken en çok hangi zorluklarla karşılaşıyorsunuz? Veya farklı projeler için özel olarak eklediğiniz havalı Nginx direktifleri var mı? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!
Selam sistemciler!
Neden Sunucu Blokları Kullanmalıyım?
- Maliyet Etkinliği: Ayrı ayrı VPS'ler veya sunucular kiralamak yerine, tek bir güçlü sunucuda tüm projelerinizi çalıştırabilirsiniz.
- Kaynak Verimliliği: CPU, RAM ve disk alanı gibi kaynaklarınızı, ihtiyaca göre siteler arasında paylaştırabilirsiniz.
- Merkezi Yönetim: Tüm sitelerinizin loglarını, SSL sertifikalarını ve güvenlik ayarlarını tek bir yerden yönetmek çok daha kolaydır.
- Esneklik: Her site için farklı PHP sürümleri, farklı web uygulaması kök dizinleri veya özel güvenlik kuralları tanımlayabilirsiniz.
Hazırlık Aşaması: Temel Nginx Kurulumu
Eğer sunucunuzda Nginx yüklü değilse, önce onu kuralım. Ben örneklerimi Ubuntu 22.04 LTS üzerinden göstereceğim.
Bash:
sudo apt update
sudo apt install nginx -y
Kurulum tamamlandıktan sonra, Nginx'in çalıştığından emin olalım:
Bash:
sudo systemctl start nginx
sudo systemctl enable nginx
Tarayıcınızdan sunucunuzun IP adresini yazdığınızda "Welcome to nginx!" sayfasını görüyorsanız, hazırsınız demektir.
Sunucu Bloklarının Anatomisi: Dosya ve Dizin Yapısı
Nginx'te sunucu blokları için iki önemli dizin vardır:
- /etc/nginx/sites-available: Bu dizinde, oluşturduğunuz tüm site konfigürasyon dosyaları durur. Bunlar "hazır" ama "aktif olmayan" yapılandırmalardır.
- /etc/nginx/sites-enabled: Bu dizinde ise, sites-available dizininden sembolik link (kısayol) ile bağlanmış, aktif olan site konfigürasyonları bulunur. Nginx sadece buradaki dosyaları okur.
İlk Sunucu Bloğumuzu Oluşturalım: örnek1.com
1. Öncelikle, yeni bir konfigürasyon dosyası oluşturalım. Dosya adını genelde site adıyla aynı veririz.
Bash:
sudo nano /etc/nginx/sites-available/ornek1.com
2. Aşağıdaki temel yapılandırmayı dosyanın içine yapıştırın. (Kendi alan adınızı ve dosya yolunuzu yazmayı unutmayın!)
NGINX:
server {
listen 80;
listen [::]:80; # IPv6 desteği
server_name ornek1.com www.ornek1.com;
root /var/www/ornek1.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# Log dosyalarını siteye özel tutalım
access_log /var/log/nginx/ornek1.com_access.log;
error_log /var/log/nginx/ornek1.com_error.log;
}
Burada ne yaptık?
- listen 80: Sunucunun 80 portunu (HTTP) dinlemesini söyledik.
- server_name: Bu sunucu bloğunun hangi alan adları için geçerli olacağını belirledik.
- root: Web sitesinin dosyalarının sunucudaki fiziksel yolunu tanımladık.
- index: Ana dizinde açılacak varsayılan dosya adlarını belirledik.
3. Şimdi web sitesi dosyalarımız için bir dizin oluşturalım ve içine basit bir test sayfası koyalım.
Bash:
sudo mkdir -p /var/www/ornek1.com/html
sudo nano /var/www/ornek1.com/html/index.html
`index.html` dosyasının içine şunu yazın:
HTML:
<!DOCTYPE html>
<html>
<head>
<title>ornek1.com - Çalışıyor!</title>
</head>
<body>
<h1>Selam! ornek1.com başarıyla yayında. 🎉</h1>
</body>
</html>
4. Dosya izinlerini düzgün ayarlayalım (genellikle `www-data` kullanıcısı Nginx'i çalıştırır).
Bash:
sudo chown -R www-data:www-data /var/www/ornek1.com
sudo chmod -R 755 /var/www/ornek1.com
5. Artık bu konfigürasyonu aktif hale getirelim. `sites-available`'dan `sites-enabled`'a bir sembolik link oluşturacağız.
Bash:
sudo ln -s /etc/nginx/sites-available/ornek1.com /etc/nginx/sites-enabled/
İkinci Bir Sunucu Bloğu Daha Ekleyelim: örnek2.com
Aynı adımları, farklı değerlerle tekrarlayalım.
1. İkinci site için konfigürasyon dosyası:
Bash:
sudo nano /etc/nginx/sites-available/ornek2.com
NGINX:
server {
listen 80;
listen [::]:80;
server_name ornek2.com www.ornek2.com;
root /var/www/ornek2.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/ornek2.com_access.log;
error_log /var/log/nginx/ornek2.com_error.log;
}
2. Dizin ve test sayfası:
Bash:
sudo mkdir -p /var/www/ornek2.com/html
sudo nano /var/www/ornek2.com/html/index.html
HTML:
<!DOCTYPE html>
<html>
<head>
<title>ornek2.com - İkinci Sitemiz!</title>
</head>
<body>
<h1>Bu da ornek2.com! Tek sunucu, iki farklı site. 🚀</h1>
</body>
</html>
3. İzinleri ayarla ve link oluştur:
Bash:
sudo chown -R www-data:www-data /var/www/ornek2.com
sudo chmod -R 755 /var/www/ornek2.com
sudo ln -s /etc/nginx/sites-available/ornek2.com /etc/nginx/sites-enabled/
Sihirli An: Nginx'i Test Edip Yeniden Başlatalım
Yapılandırmada bir sözdizimi hatası olup olmadığını her zaman kontrol edin. Bu çok önemli bir alışkanlıktır!
Bash:
sudo nginx -t
Eğer çıktı "nginx: configuration file /etc/nginx/nginx.conf test is successful" şeklindeyse, sorun yok demektir. Şimdi Nginx'i yeniden başlatalım ki yeni ayarlarımız etkin olsun.
Bash:
sudo systemctl reload nginx
# veya
sudo systemctl restart nginx
Test Zamanı!
Şimdi, eğer `ornek1.com` ve `ornek2.com` alan adlarını gerçekten sunucunuzun IP'sine yönlendirdiyseniz (DNS A kaydı ile), tarayıcıdan her birini açtığınızda kendi özel içeriğini göreceksiniz.
Yerel bilgisayarınızda test etmek için (DNS ayarlamadıysanız), `hosts` dosyanızı düzenleyebilirsiniz. Linux/macOS'ta `/etc/hosts`, Windows'ta `C:\Windows\System32\drivers\etc\hosts` dosyasını yönetici olarak açın ve şu satırı ekleyin (SUNUCU_IP_ADRESİ'ni kendi IP'nizle değiştirin):
Kod:
SUNUCU_IP_ADRESİ ornek1.com
SUNUCU_IP_ADRESİ ornek2.com
Artık tarayıcınıza `
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
İleri Seviye İpuçları ve Sorun Giderme
- Varsayılan Sunucu Bloğu: `sites-enabled` dizinindeki dosyalar alfabetik sırayla okunur. IP adresiyle veya tanımlanmamış bir alan adıyla gelen istekleri engellemek için bir `default` sunucu bloğu oluşturabilirsiniz. Bu bloğun `server_name` kısmına `_` (alt çizgi) koyun ve `listen` direktifinden sonra `default_server` ekleyin. İçine de 444 gibi bir hata sayfası veya yönlendirme koyabilirsiniz.
- PHP Desteği Eklemek: Eğer siteniz PHP (örneğin WordPress) kullanacaksa, `location ~ \.php$` bloğunu eklemeniz ve PHP-FPM servisi ile iletişimi yapılandırmanız gerekir.
- SSL/TLS Eklemek (HTTPS): Let's Encrypt ile ücretsiz SSL sertifikası alıp, sunucu bloğunuzu 443 portunu dinleyecek ve sertifika yolunu gösterecek şekilde güncellemelisiniz.
- En Sık Karşılaşılan Hata: `nginx -t` testi başarısız olursa, genellikle konfigürasyon dosyasında unutulmuş bir noktalı virgül (`;`) veya yanlış yazılmış bir direktif vardır. Hata mesajı satır numarasını söyler, kontrol edin.
- Bir Siteyi Geçici Olarak Devre Dışı Bırakmak: `sites-enabled` dizinindeki sembolik linki silmek yeterlidir. Dosya `sites-available`'da durmaya devam eder.
Bash:sudo rm /etc/nginx/sites-enabled/ornek1.com sudo nginx -t sudo systemctl reload nginx
İşte bu kadar! Artık tek bir sunucunuzu, onlarca farklı web sitesini barındırabilecek güçlü bir platforma dönüştürebilirsiniz.
Peki siz sunucu bloklarınızı yönetirken en çok hangi zorluklarla karşılaşıyorsunuz? Veya farklı projeler için özel olarak eklediğiniz havalı Nginx direktifleri var mı? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!