# Nginx ile tek sunucuda birden fazla web sitesi (server block)

https://kervanhosting.com/bilgi-bankasi/makale/nginx-ile-birden-fazla-web-sitesi-server-block-sanal-host

Tek bir VDS sunucuda birden fazla web sitesi çalıştırmak mümkündür ve çoğu kişinin ilk yaptığı iş budur. Nginx bunu **server block** ile yapar: her alan adı için ayrı bir ayar bloğu yazarsınız ve Nginx gelen isteğin `Host` başlığına bakarak hangi bloğa gideceğine karar verir. Bu sistem Apache'deki "sanal host"un karşılığıdır.

## Önce: DNS

Her alan adının A kaydı sunucunun IP adresini göstermeli. Nasıl yapıldığı: [alan adını sunucuya yönlendirme](https://kervanhosting.com/bilgi-bankasi/makale/alan-adimi-sunucuma-sitemde-nasil-yonlendiririm).

## Her site için bir dosya

Ubuntu ve Debian'da ayarlar `/etc/nginx/sites-available/` içinde yazılır, etkinleştirmek için `sites-enabled/` klasörüne bağlantı verilir. İki site örneği:

```
# /etc/nginx/sites-available/ornek.com
server {
    listen 80;
    server_name ornek.com www.ornek.com;
    root /var/www/ornek.com/public;
    index index.html;
    location / { try_files $uri $uri/ =404; }
}

# /etc/nginx/sites-available/blog.ornek.com
server {
    listen 80;
    server_name blog.ornek.com;
    root /var/www/blog;
    index index.html;
    location / { try_files $uri $uri/ =404; }
}
```

Klasörleri oluşturun, dosyalara bir deneme sayfası koyun ve ayarları etkinleştirin:

```
sudo mkdir -p /var/www/ornek.com/public /var/www/blog
echo "ornek.com" | sudo tee /var/www/ornek.com/public/index.html
echo "blog" | sudo tee /var/www/blog/index.html
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/blog.ornek.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

`nginx -t` ayar hatasını yazar; hata yoksa "syntax is ok" der. Önce sınayıp sonra yeniden yüklemek, hatalı bir ayarın çalışan siteleri kapatmasını önler.

## İstek hangi bloğa gidiyor?

Nginx `server_name` eşleşmesine bakar. Hiçbirine uymayan istek (örneğin alan adı olmadan doğrudan IP ile gelen) **varsayılan sunucuya** gider; hiçbir blok işaretlenmediyse dosya sırasına göre ilk olana. Rastgele bir sitenin bu isteklere cevap vermesini önlemek için açık bir varsayılan tanımlayın:

```
server {
    listen 80 default_server;
    server_name _;
    return 444;
}
```

`444` Nginx'e özgü bir koddur: bağlantıyı cevap vermeden kapatır. Böylece botlar IP adresinizi tarayınca sitelerinizden birine düşmez.

## Sık yapılan hatalar

- **Aynı `server_name` iki dosyada:** "conflicting server name" uyarısı verir ve ikincisi yok sayılır. Alan adlarını tek yerde tanımlayın.
- **Yanlış sitenin açılması:** Çoğunlukla A kaydı doğrudur ama `server_name` yanlış yazılmıştır ya da www eksiktir. `server_name` listesinde hem `ornek.com` hem `www.ornek.com` bulunsun.
- **Bağlantıyı unutmak:** `sites-available` içindeki dosya `sites-enabled`'a bağlanmadıkça kullanılmaz.
- **Dosya sahipliği:** Site klasörü `www-data` tarafından okunabilir olmalı: [izinler](https://kervanhosting.com/bilgi-bankasi/makale/wordpress-dosya-izinleri-ve-guncellemede-ftp-bilgisi-soruyor).
- **403 ya da 404:** [403 Forbidden nedenleri](https://kervanhosting.com/bilgi-bankasi/makale/nginx-403-forbidden-hatasi-nedenleri-ve-cozumu).

## https ekleyin

Her alan adı için ayrı sertifika alın: `sudo certbot --nginx -d ornek.com -d www.ornek.com` ve `sudo certbot --nginx -d blog.ornek.com`. Hatalar için [Certbot hataları](https://kervanhosting.com/bilgi-bankasi/makale/certbot-challenge-failed-hatasi-ve-yenileme-sorunlari) makalesine bakın. PHP siteleri için ayar: [WordPress ve PHP kurulumu](https://kervanhosting.com/bilgi-bankasi/makale/wordpress-vds-kurulumu-nginx-php-mariadb-lemp).

## Sık sorulanlar

### Kaç site barındırabilirim?

Teknik sınır yoktur; asıl sınır sunucunun RAM ve işlemcisidir. Her PHP sitesi bellek tüketir, bu yüzden küçük bir sunucuda birkaç site makuldür. Kaynakları izleyin.

### Her siteye ayrı PHP-FPM havuzu gerekir mi?

Gerekmez ama güvenlik için ayrı kullanıcı ve havuz önerilir; bir sitedeki açık diğerlerine geçmesin. Küçük kurulumlarda tek havuz da kullanılır.

### Alt alan adlarını tek blokta toplayabilir miyim?

Evet, `server_name *.ornek.com;` ile joker kullanabilirsiniz, ama joker sertifika DNS doğrulaması ister.

**İlgili makaleler**

- [Linux sunucuya web sitesi (Nginx) nasıl kurulur?](https://kervanhosting.com/bilgi-bankasi/makale/linux-sunucuya-web-sitesi-nginx-nasil-kurulur)
- [Nginx'te http'den https'ye ve www yönlendirmesi (301) nasıl yapılır?](https://kervanhosting.com/bilgi-bankasi/makale/nginx-http-https-ve-www-yonlendirme-ayarlari)
- [Nginx 502 Bad Gateway hatası: nedenleri ve çözümü](https://kervanhosting.com/bilgi-bankasi/makale/nginx-502-bad-gateway-hatasi-nedenleri-ve-cozumu)

*Sorununuz çözülmediyse [destek talebi açın](https://kervanhosting.com/destek-taleplerim). Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.*
