VDS Üzerinde Web Sitesi Yayınlama: Nginx ve SSL Rehberi

BalHost
9 dk
5 görüntüleme
VDS Üzerinde Web Sitesi Yayınlama: Nginx ve SSL Rehberi

VDS üzerinde web sitesi yayınlama, sanal sunucu (VDS) kaynaklarını bir web sunucusuna atayıp alan adını bu sunucuya yönlendirme sürecidir. Bu süreç; işletim sistemi hazırlığı, Nginx kurulumu, sanal konak tanımı, SSL sertifikası ve doğrulama adımlarından oluşur. Yazı boyunca Ubuntu tabanlı bir VDS'te Nginx ile yayına alma işlemini adım adım, komutlarıyla ve olası hataların çözümüyle ele alıyoruz.

Başlamadan Önce Neler Gerekli?

Yayına alma işlemine geçmeden önce üç şeyin hazır olması gerekir: erişilebilir bir VDS, sunucuya işaret eden bir alan adı ve SSH erişimi. Bu üçü tamamlanmadan atılan adımlar genellikle yarım kalır ve hata ayıklama süresi uzar. Ek olarak, sitenin hangi yazılım yığınıyla çalışacağını önceden belirlemek, sonraki adımlarda gereksiz kurulum yapmanızı engeller.

Gereksinim listesi şöyle:

  • VDS: Ubuntu veya Debian kurulu, root ya da sudo yetkili bir kullanıcı hesabı. BalHost'un Intel Xeon Platinum 8168 işlemcili VDS paketleri NVMe SSD disklerle gelir; sipariş sonrası kurulum otomatik yapılır.
  • Alan adı: Kayıtlı ve DNS paneli erişiminiz olan bir alan adı.
  • DNS kaydı: Alan adının A kaydı sunucunun genel IP adresine yönlendirilmiş olmalı.
  • SSH istemcisi: Terminal, PuTTY veya benzeri bir araç.
  • Temel bilgi: sudo, dosya düzenleme ve servis yönetimi komutlarına aşinalık.

İşletim sistemi seçimi de bir karar noktasıdır. Linux dağıtımları Nginx ile daha az kaynak tüketirken, Windows tabanlı bir kurulum tercih edenler için Windows sanal sunucu seçenekleri de mevcuttur. Kaynak planlaması yaparken sitenin beklenen trafiğini ve veritabanı yükünü hesaba katmak gerekir; bu konuda vps kiralama rehberi karar vermeyi kolaylaştırır. Sitenin kaynak ihtiyacı zamanla değişebileceği için, başlangıçta ölçülü bir paket seçip kullanım verilerini izlemek, gereksiz maliyetten kaçınmanın en pratik yoludur.

VDS Üzerinde Web Sitesi Yayınlama Adımları

Aşağıdaki adımlar, Ubuntu 22.04 veya 24.04 kurulu bir VDS varsayımıyla yazılmıştır. Komutların çoğu sudo gerektirir; root olarak çalışıyorsanız sudo önekini kaldırabilirsiniz. Adımları sırayla uygulamak, bir sonraki aşamada hangi bileşenin eksik kaldığını tespit etmeyi kolaylaştırır.

1. Sunucuya SSH ile bağlanın ve sistemi güncelleyin

Önce sunucuya bağlanın, ardından paket listelerini yenileyip mevcut paketleri güncelleyin. Güncel olmayan paketler, Nginx kurulumunda bağımlılık hatası çıkarabilir. Bu adım genellikle birkaç dakika sürer ve sunucunun ilk açılışında bir kez yapılması yeterlidir.

ssh kullanici@SUNUCU_IP
sudo apt update && sudo apt upgrade -y

Güncelleme tamamlandıktan sonra sunucunun saat dilimini ve ana makine adını kontrol etmek, log kayıtlarını okumayı kolaylaştırır. Bu adım zorunlu değildir ama ilerleyen aşamalarda hata ayıklamayı hızlandırır. Özellikle birden fazla sunucu yönetiyorsanız, tutarlı bir ana makine adlandırması karışıklığı önler.

2. Nginx'i kurun ve servisi etkinleştirin

Nginx, düşük bellek kullanımı ve eşzamanlı bağlantılarda iyi performansı nedeniyle yaygın tercih edilen bir web sunucusudur. Kurulum tek komutla tamamlanır ve servis, sistem açılışında otomatik başlayacak şekilde etkinleştirilir.

sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo systemctl status nginx

Kurulum sonrası tarayıcıdan http://SUNUCU_IP adresine gittiğinizde Nginx'in varsayılan karşılama sayfasını görmelisiniz. Bu sayfa görünmüyorsa güvenlik duvarı 80 numaralı bağlantı noktasını engelliyor olabilir.

sudo ufw allow 'Nginx Full'

Nginx mi Apache mi sorusu sık sorulur. Apache, .htaccess dosyaları ve modül tabanlı yapılandırmasıyla paylaşımlı hosting alışkanlığı olanlar için tanıdıktır; Nginx ise statik dosya sunumunda ve ters vekil (reverse proxy) görevinde daha az kaynak tüketir. PHP çalıştıran sitelerde Nginx genellikle PHP-FPM ile birlikte kullanılır. Hangi sunucunun seçileceği, sitenin trafik profiline ve kullandığınız çatıya göre değişir.

3. Site dosyalarını yerleştirin ve dizin izinlerini ayarlayın

Web kök dizinini oluşturup dosyalarınızı buraya yükleyin. Örnek olarak /var/www/ornek dizinini kullanıyoruz.

sudo mkdir -p /var/www/ornek
sudo chown -R $USER:$USER /var/www/ornek
sudo chmod -R 755 /var/www/ornek

Dosyaları yüklemek için scp veya rsync kullanabilirsiniz:

rsync -av ./site-dosyalari/ kullanici@SUNUCU_IP:/var/www/ornek/

Sık yapılan hata: Web kök dizinini chmod 777 yapmak. Bu ayar dosyaları herkese yazılabilir hâle getirir ve güvenlik açığı oluşturur. Doğru yaklaşım, dizinler için 755, dosyalar için 644 izinlerini kullanmak ve sahipliği web sunucusu kullanıcısına vermektir. Bu hata, ilerleyen dönemde fark edilmesi zor sorunlara yol açabilir.

4. Nginx sunucu bloğunu (sanal konak) oluşturun

Sunucu bloğu, alan adını belirli bir dizine bağlayan yapılandırma dosyasıdır. /etc/nginx/sites-available/ altında yeni bir dosya oluşturun.

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

Dosya içeriği şu şekilde olmalı:

server {
    listen 80;
    listen [::]:80;
    server_name ornek.com www.ornek.com;
    root /var/www/ornek;
    index index.html index.php;

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

Ardından dosyayı etkinleştirip varsayılan yapılandırmayı devre dışı bırakın:

sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

nginx -t komutu yapılandırmayı sözdizimi açısından denetler. Hata çıkarsa reload yapmayın; önce dosyayı düzeltin. Bu alışkanlık, çalışan bir siteyi yapılandırma hatası nedeniyle kesintiye uğratmayı önler.

5. DNS kayıtlarını doğrulayın

Alan adının A kaydı, sunucunun genel IP adresini göstermelidir. DNS yayılımı genellikle dakikalar içinde tamamlanır ancak TTL değerine bağlı olarak daha uzun sürebilir.

dig +short ornek.com

Komut sunucunun IP adresini döndürüyorsa DNS tarafı hazırdır. Farklı bir IP görünüyorsa DNS panelinden A kaydını güncelleyin ve eski kaydın önbellekten temizlenmesini bekleyin. DNS doğrulanmadan SSL adımına geçmek, sertifika doğrulamasında hata almanıza neden olur.

6. Let's Encrypt ile SSL sertifikası kurun

HTTPS, hem arama motorları hem de ziyaretçiler açısından beklenen bir standarttır. Certbot aracı, sertifikayı ücretsiz alır ve Nginx yapılandırmasını otomatik günceller.

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

Certbot, sertifikayı aldıktan sonra 80 numaralı bağlantı noktasından gelen istekleri HTTPS'e yönlendirmek isteyip istemediğinizi sorar. Yönlendirmeyi kabul etmek, HTTP üzerinden gelen trafiğin şifreli kanala taşınmasını sağlar. Sertifika yenileme otomatik zamanlanır; sudo certbot renew --dry-run komutuyla test edebilirsiniz.

7. Veritabanı ve uygulama servislerini yapılandırın

WordPress gibi dinamik bir site yayınlıyorsanız PHP-FPM ve bir veritabanı sunucusu gerekir. MySQL veya MariaDB kurulumu şu şekilde yapılır:

sudo apt install mysql-server php-fpm php-mysql -y
sudo mysql_secure_installation

Nginx yapılandırmasına PHP işleme bloğu eklemeyi unutmayın; aksi hâlde PHP dosyaları indirilir ama çalıştırılmaz. Veritabanı bağlantı sayısını ve sorgu performansını izlemek için yavaş sorgu günlüğünü (slow query log) açmak, ileride ortaya çıkacak performans sorunlarını erken yakalamanızı sağlar. Uygulama ile veritabanı aynı sunucuda çalışıyorsa, bellek kullanımını iki servis arasında dengeli paylaştırmak gerekir.

Yayının Başarılı Olduğunu Nasıl Doğrularsınız?

Doğrulama, yapılandırmanın gerçekten çalıştığını kanıtlayan adımdır. Tarayıcıdan siteyi açmak ilk kontrol olsa da sunucu tarafında birkaç komut daha güvenilir sonuç verir. Bu kontrolleri yayına aldıktan hemen sonra yapmak, sorunun kaynağını daraltmayı kolaylaştırır.

Kontrol listesi:

Kontrol Komut / Yöntem Beklenen Sonuç
Nginx çalışıyor mu? systemctl status nginx active (running)
Yapılandırma geçerli mi? nginx -t syntax is ok
HTTP yanıtı curl -I http://ornek.com 200 veya 301
HTTPS yanıtı curl -I https://ornek.com 200
Sertifika geçerliliği certbot certificates Geçerli tarih aralığı
Hata günlüğü tail -f /var/log/nginx/error.log Beklenmeyen kayıt yok

curl -I komutu yalnızca başlıkları getirir; böylece sayfa içeriğini indirmeden durum kodunu görürsünüz. 301 veya 302 yanıtı, HTTP'den HTTPS'e yönlendirmenin çalıştığını gösterir. 200 dışında bir kod alıyorsanız hata günlüğü doğru yeri işaret eder.

Sık Karşılaşılan Sorunlar ve Çözümleri

Yayına alma sürecinde en sık karşılaşılan üç sorun; 502 Bad Gateway, veritabanı bağlantı hataları ve yanlış dosya izinleridir. Bu sorunların çoğu yapılandırma satırı düzeyinde çözülür ve genellikle kısa sürede giderilir.

Nginx 502 Bad Gateway: Nginx isteği PHP-FPM'e iletir ama arka uç yanıt vermez. Genellikle PHP-FPM servisi durmuştur ya da yanlış soket yolu tanımlanmıştır.

sudo systemctl status php8.3-fpm
sudo systemctl restart php8.3-fpm

Nginx yapılandırmasındaki fastcgi_pass satırındaki soket yolu, PHP-FPM'in dinlediği soketle birebir eşleşmelidir. Sürüm numarasını kendi kurulumunuza göre kontrol edin; farklı bir PHP sürümü kullanıyorsanız servis adı da farklı olacaktır.

Veritabanı bağlantı sınırı: "Too many connections" hatası, eşzamanlı bağlantı sayısının sunucu ayarını aşmasıyla oluşur. MySQL veya MariaDB'de max_connections değerini artırmak geçici çözümdür; kalıcı çözüm, uygulama tarafında bağlantı havuzu (connection pool) kullanmaktır. PostgreSQL'de karşılık gelen ayar max_connections parametresidir ve değişiklik sonrası servisin yeniden başlatılması gerekir.

Yanlış dosya izinleri: Site beyaz sayfa veriyorsa veya 403 döndürüyorsa dosya izinleri ve sahipliği kontrol edilmelidir. Web kök dizini Nginx kullanıcısı tarafından okunabilir olmalı, ancak yazılabilir olmamalıdır. Yüklenen dosyaların sahibi ile Nginx'in çalıştığı kullanıcı farklıysa, okuma izni yine de verilmelidir.

Pratik örnek: Trafiği artan bir blogda sayfalar yavaş açılıyorsa ilk bakılacak yer veritabanı sorgularıdır. Yavaş sorgu günlüğünü açıp indekssiz sorguları tespit etmek, sunucu kaynağını artırmadan önce denenmesi gereken adımdır. Bu tür durumlarda NVMe diskli bir sanal sunucu, disk G/Ç darboğazını azaltarak sorgu sürelerini düşürür. Benzer şekilde, önbellek katmanı eklemek de veritabanına giden tekrarlı istekleri azaltır.

Sonuç

VDS üzerinde web sitesi yayınlama; Nginx kurulumu, sunucu bloğu tanımı, DNS doğrulaması ve SSL sertifikası olmak üzere dört ana adımdan oluşur. Her adımda yapılandırmayı test etmek, sorunları ortaya çıktıkları anda yakalamanızı sağlar. 502 ve veritabanı bağlantı hataları gibi yaygın sorunların çoğu, servis durumu ve yapılandırma satırları kontrol edilerek çözülür.

Sıradaki adım, sitenizin kaynak ihtiyacını doğru planlamaktır. Statik bir site için temel paketler yeterliyken, dinamik uygulamalar ve veritabanı yoğun iş yükleri için daha fazla bellek ve işlemci çekirdeği gerekir. Türkiye (İstanbul) lokasyonunda NVMe SSD diskli VDS kiralama seçeneklerini inceleyerek siteniz için uygun yapılandırmayı belirleyebilirsiniz.

Sık Sorulan Sorular

VDS üzerinde web sitesi yayınlamak için hangi işletim sistemi seçilmeli?

Linux dağıtımları Nginx ile daha az kaynak tüketir ve sunucu yönetimi komut satırından yapılır. ASP.NET veya MSSQL gibi Windows'a bağlı teknolojiler kullanıyorsanız Windows sanal sunucu seçeneği gerekir. Seçim, sitenizin çalıştığı yazılım yığınına göre yapılmalıdır.

Nginx mi Apache mi kullanmalıyım?

Nginx statik dosya sunumunda ve ters vekil görevinde daha az kaynak tüketir; Apache ise .htaccess desteği ve modül yapısıyla tanıdıktır. PHP çalıştıran sitelerde Nginx genellikle PHP-FPM ile birlikte kullanılır. Trafik profiliniz ve mevcut yapılandırma alışkanlıklarınız belirleyici olur.

Nginx 502 Bad Gateway hatası nasıl çözülür?

Bu hata genellikle PHP-FPM servisinin durması veya yanlış soket yolunun tanımlanmasından kaynaklanır. Servis durumunu kontrol edip yeniden başlatın, ardından Nginx yapılandırmasındaki fastcgi_pass satırındaki soket yolunun PHP-FPM ile eşleştiğini doğrulayın. Hata günlüğü kesin nedeni gösterir.

SSL sertifikası kurduktan sonra site neden açılmıyor?

Sertifika kurulumu sonrası site açılmıyorsa DNS kaydının sunucuya yönlendiğini ve 443 numaralı bağlantı noktasının güvenlik duvarında açık olduğunu kontrol edin. Ayrıca nginx -t ile yapılandırmayı test edip sertifika yollarının doğru tanımlandığından emin olun.

Veritabanı bağlantı hatası aldığımda ne yapmalıyım?

"Too many connections" hatası, eşzamanlı bağlantı sayısının sunucu ayarını aşmasıyla oluşur. Kısa vadede max_connections değerini artırabilirsiniz; kalıcı çözüm uygulama tarafında bağlantı havuzu kullanmaktır. Yavaş sorguları tespit etmek için yavaş sorgu günlüğünü etkinleştirmek de faydalı olur.

İlgili Yazılar

Bu konuda hizmet mi arıyorsunuz?

Yazıda anlatılan altyapıyı BalHost sunucularında hazır bulabilirsiniz.