Birden çok site için Nginx server block ayarı

Nginx sunucu bloğunu ayarlayarak birden fazla alan adını tek bir sunucuda barındırın. Yapılandırma, yaygın hataların giderilmesi ve performans optimizasyonu için adım adım kılavuz.

5 dk Güncellendi 19 Aug 2026

Nginx Sunucu Bloğuna Neden İhtiyacınız Var?

Bir sunucunuz varsa ve üzerinde farklı alan adlarına sahip birden fazla web sitesi çalıştırmak istiyorsanız, Nginx sunucu bloğu (Server Block) standart ve verimli bir çözümdür. Apache'deki Virtual Host'a eşdeğer olan bu özellik, her alan adı için belge kökü (Document Root), SSL ayarları, yönlendirme kuralları ve erişim kısıtlamaları dahil olmak üzere ayrı bir yapılandırma tanımlamanıza olanak tanır.

Sunucu bloğu kullanmadan Nginx, varsayılan olarak tüm istekleri tek bir dizine yönlendirir. Bu, iki farklı alan adını sunucunuzun IP'sine yönlendirirseniz, her ikisinin de aynı içeriği göstereceği anlamına gelir. Nginx sunucu bloğunu doğru şekilde ayarlayarak sunucu kaynaklarını optimize edebilir ve her siteyi bağımsız olarak yönetebilirsiniz.

Nginx Sunucu Bloğu Ayarlama Ön Koşulları

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • Linux sunucusuna (Ubuntu/Debian veya CentOS/RHEL) root veya sudo yetkisine sahip kullanıcı erişimi
  • Kurulu Nginx (1.18 veya üzeri sürüm önerilir)
  • A kayıtları sunucunuzun IP'sini gösteren iki alan adı (örneğin example.com ve example.org)
  • Web sitesi içeriklerinin ayrı dizinlerde bulunması

Ubuntu'da Nginx'i kurmak için aşağıdaki komutu kullanın:

sudo apt update
sudo apt install nginx -y

CentOS/RHEL'de:

sudo yum install nginx -y

Birden Fazla Site İçin Dizin Yapısı

En iyi uygulama, her alan adı için ayrı bir dizin oluşturmaktır. Bu, dosya ve erişim yönetimini kolaylaştırır. Önerilen yapı şu şekildedir:

/var/www/
├── example.com/
│   ├── html/
│   │   └── index.html
│   └── logs/
└── example.org/
    ├── html/
    │   └── index.html
    └── logs/

Bu yapıyı oluşturmak için aşağıdaki komutları çalıştırın:

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example.com/logs
sudo mkdir -p /var/www/example.org/html
sudo mkdir -p /var/www/example.org/logs

Ardından, sonucu test edebilmek için her dizine basit bir index.html dosyası oluşturun:

echo "<h1>Welcome to Example.com</h1>" | sudo tee /var/www/example.com/html/index.html
echo "<h1>Welcome to Example.org</h1>" | sudo tee /var/www/example.org/html/index.html

Nginx Sunucu Bloğu Dosyalarını Oluşturma

Nginx'te yapılandırma dosyaları genellikle /etc/nginx/sites-available/ dizininde bulunur ve /etc/nginx/sites-enabled/ dizinine sembolik bağlantı ile etkinleştirilir. Bu yöntem, ana dosyayı silmeden siteleri devre dışı bırakmanıza olanak tanır.

İlk Alan Adının Yapılandırılması

example.com için yeni bir dosya oluşturun:

sudo nano /etc/nginx/sites-available/example.com

İçine aşağıdaki içeriği yerleştirin:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    access_log /var/www/example.com/logs/access.log;
    error_log /var/www/example.com/logs/error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Önemli bölümlerin açıklaması:

  • listen 80 – 80 numaralı bağlantı noktasını dinleme (HTTP)
  • server_name – Bu bloğun yanıt verdiği alan adları
  • root – Bu site için belge kök dizini
  • try_files – İstenen dosyanın varlığını kontrol eder ve yoksa 404 döndürür

İkinci Alan Adının Yapılandırılması

Şimdi example.org için ikinci dosyayı oluşturun:

sudo nano /etc/nginx/sites-available/example.org

Gerekli değişikliklerle benzer içerik:

server {
    listen 80;
    listen [::]:80;
    server_name example.org www.example.org;

    root /var/www/example.org/html;
    index index.html index.htm;

    access_log /var/www/example.org/logs/access.log;
    error_log /var/www/example.org/logs/error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Yapılandırmayı Etkinleştirme ve Test Etme

Sunucu bloklarını etkinleştirmek için sembolik bağlantılar oluşturun:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example.org /etc/nginx/sites-enabled/

Değişiklikleri uygulamadan önce her zaman yapılandırmayı test edin:

sudo nginx -t

Her şey doğruysa, çıktı şuna benzer olacaktır:

nginx: configuration file /etc/nginx/nginx.conf test is successful

Ardından Nginx'i yeniden başlatın:

sudo systemctl reload nginx

Şimdi http://example.com ve http://example.org adreslerini ziyaret ettiğinizde her sitenin farklı içeriğini görmelisiniz.

Yaygın Hata: Varsayılan Sunucu Bloğu Çakışması

Yaygın sorunlardan biri, Nginx'in varsayılan dosyasıyla çakışmadır. /etc/nginx/sites-enabled/default dosyası genellikle catch-all olarak çalışır ve isteklerinizi yanlış dizine yönlendirebilir.

Çözüm: Varsayılan siteyi kullanmak istemiyorsanız, devre dışı bırakın:

sudo rm /etc/nginx/sites-enabled/default

Ardından tekrar test edin ve yeniden başlatın.

Let's Encrypt ile SSL Ekleme

Sitelerin güvenliği için mutlaka SSL'i etkinleştirin. certbot aracı bunu otomatik olarak yapar:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

İkinci alan adı için:

sudo certbot --nginx -d example.org -d www.example.org

certbot, SSL ayarlarını otomatik olarak sunucu bloğu dosyasına ekler ve HTTP'den HTTPS'e yönlendirmeyi etkinleştirir. Çalıştırdıktan sonra example.com yapılandırma dosyası şuna benzer:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Birden Fazla Site İçin Performans Optimizasyonu

Bir sunucuda birden fazla site olduğunda kaynak yönetimi kritiktir. Birkaç pratik ipucu:

gzip Etkinleştirme

Yanıtları sıkıştırmak, kullanılan bant genişliğini azaltır. /etc/nginx/nginx.conf dosyasında bu ayarların bulunduğundan emin olun:

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml+rss;

Statik Dosyalar İçin Önbellek Ayarlama

Her sunucu bloğu için tarayıcı önbelleğini etkinleştirebilirsiniz:

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

Kötüye Kullanımı Önlemek İçin Hız Sınırlama

Sitelerden biri yoğun trafik veya brute-force saldırıları alıyorsa, hız sınırı ekleyin:

limit_req_zone $binary_remote_addr zone=sitelimit:10m rate=5r/s;

server {
    # ... diğer ayarlar
    location /login {
        limit_req zone=sitelimit burst=10 nodelay;
    }
}

Yaygın Sorunların Giderilmesi

Siteler düzgün çalışmıyorsa, şu adımları kontrol edin:

  1. DNS Kontrolü: Alan adlarının sunucu IP'sini gösterdiğinden emin olun: dig example.com +short
  2. Güvenlik Duvarı Kontrolü: 80 ve 443 numaralı bağlantı noktalarının açık olduğundan emin olun: sudo ufw status
  3. Günlük Kontrolü: Hata dosyalarını inceleyin: sudo tail -f /var/log/nginx/error.log
  4. curl ile Test: Başlıkları kontrol edin: curl -I http://example.com

Bir diğer yaygın hata, server_name'de www önekini unutmaktır. Kullanıcı www ile girerse ve siz bunu tanımlamadıysanız, varsayılan siteye yönlendirilir. Her zaman her iki sürümü de ekleyin veya www'den www olmayana 301 yönlendirmesi ayarlayın.

Özet

Birden fazla site için Nginx sunucu bloğu ayarlamak, her sunucu yöneticisi için gerekli bir beceridir. Bu yöntemle, bağımsız yapılandırma, ayrı günlükler ve farklı güvenlik ayarlarıyla tek bir sunucuda birden fazla alan adını yönetebilirsiniz. Bu, yalnızca maliyetleri düşürmekle kalmaz, aynı zamanda altyapı yönetiminde yüksek esneklik sağlar.

Birden fazla siteyi barındırmak için ölçeklenebilir bir altyapı arıyorsanız, ServerNet'in kolay yönetim ve yükseltilebilir kaynaklar sunan bulut sunucuları uygun bir seçim olabilir. Nginx sunucu bloğunu doğru yapılandırarak sunucunuzun kapasitesinden en iyi şekilde yararlanacaksınız.

Bu sayfa yardımcı oldu mu?