Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Nginx ile Sunucu Blokları (Virtual Host) Yönetimi: Tek Sunucuda Birden Fazla Siteyi Yönetmek 🌐

devster

Üye
Katılım
14 Mart 2026
Mesajlar
9
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?

  • 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.
` yazdığınızda birinci, `
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
` yazdığınızda ikinci sitemiz açılacak!

İ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! 💬
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri