Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Linux Yönetim

Ubuntu’da Nginx’te Sanal Konakları Nasıl Yapılandırılır

Nginx’te sanal konakları yapılandırmak, birden fazla web sitesini tek bir sunucuda barındırmanın en güçlü tekniklerinden biridir; her biri kendi alan adı, kök dizini ve bağımsız yapılandırmaya sahiptir. Nginx bunu sunucu blokları aracılığıyla işler — her alan için web sunucusunun isteklere nasıl yanıt vereceğini tanımlayan esnek, hafif yapılandırma birimleri.

Kişisel bir portföy yönetip yönetmediğiniz, istemci web sitelerini çalıştırıyor olun veya çok kiracılı bir uygulamayı ölçeklendiriyor olun, bu kılavuz Ubuntu’da Nginx sanal konakları ayarlamak için eksiksiz, üretime hazır bir izlenecek yol sağlar. Dizin yapısı, sunucu bloğu yapılandırması, siteleri etkinleştirme, SSL/HTTPS kurulumu ve sorun giderme konularını ele alacağız — sıfırdan tamamen işlevsel bir çok siteli Nginx sunucusuna kadar ihtiyacınız olan her şey.

> Bunu takip etmek için güvenilir bir Ubuntu sunucusu arıyor musunuz? AlexHost’un VPS Hosting planları size tam kök erişimi, SSD depolaması ve anında dağıtımı verir — bu tam kullanım durumu için mükemmeldir.

Ön Koşullar

Başlamadan önce, aşağıdaki koşulların karşılandığından emin olun:

Sunucunuza Nginx Yüklü

Nginx henüz yüklü değilse, Ubuntu sunucunuzda aşağıdaki komutları çalıştırın:

sudo apt update
sudo apt install nginx

Yüklemeyi doğrulayın ve hizmetin çalıştığını kontrol edin:

sudo systemctl status nginx

Çıktıda active (running) görmelisiniz. Görmüyorsanız, manuel olarak başlatın:

sudo systemctl start nginx
sudo systemctl enable nginx

Sunucunuza İşaret Eden Alan Adları

Her sanal host, sunucunuzun genel IP adresine çözümlenen bir alan adı gerektirir. DNS ayarlarınızda sunucunun IP adresine işaret eden A kayıtları oluşturmanız gerekir.

> Alan adına mı ihtiyacınız var? AlexHost Alan Adı Kaydı aracılığıyla kaydınızı yapın ve DNS kayıtlarını doğrudan kontrol panelinizden yönetin.

Yerel test amaçları için, /etc/hosts dosyasını düzenleyerek DNS’yi tamamen atlayabilirsiniz (Adım 7’de ele alınmıştır).

Gerekli İzinler

Ubuntu sunucunuzda dizin oluşturmak, yapılandırma dosyalarını düzenlemek ve Nginx hizmetini yönetmek için sudo ayrıcalıklarına ihtiyacınız vardır.

Adım 1: Her Web Sitesi için Dizinleri Ayarlayın

Sunucunuzda barındırılan her web sitesinin web dosyalarını depolamak için kendi izole dizini olmalıdır. Bu ayrım projelerinizi organize tutar ve yapılandırma çatışmalarını önler.

Bu kılavuzda iki örnek alan adını yapılandıracağız: example1.com ve example2.com. Bunları tüm kılavuz boyunca gerçek alan adlarınızla değiştirin.

Web Root Dizinlerini Oluşturun

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html

-p bayrağı gerektiğinde tüm ara dizinleri oluşturur.

Doğru Sahipliği Atayın

Bu dizinlerin sahipliğini Nginx’in çalıştığı sistem kullanıcısı olan www-data öğesine verin:

sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/html

Bu, Nginx’in bu dizinlerden dosya sunmak için gerekli okuma izinlerine sahip olmasını sağlar.

Dizin İzinlerini Ayarlayın

sudo chmod -R 755 /var/www

755 izni, sahibinin tam okuma/yazma/yürütme erişimine sahip olduğu anlamına gelirken, gruplar ve diğer kullanıcılar okuma ve yürütme erişimine sahiptir — herkese açık sunulan web içeriği için uygun.

Adım 2: Örnek HTML İçeriği Oluşturun

Her sanal ana bilgisayarın doğru şekilde çalışıp çalışmadığını doğrulamak için, her site için basit bir index.html dosyası oluşturun.

example1.com için

echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.html

example2.com için

echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.html

Bu yer tutucu sayfalar, Nginx’in istekleri her etki alanı için doğru belge köküne yönlendirdiğini doğrulayacaktır.

Adım 3: Sanal Host Yapılandırma Dosyaları Oluşturun

Nginx, site yapılandırma dosyalarını /etc/nginx/sites-available/ içinde depolar. Her dosya bir server block tanımlar — Apache sanal hostunun Nginx eşdeğeri. Etkinleştirilen siteler daha sonra /etc/nginx/sites-enabled/ içine sembolik bağlantı yapılır.

example1.com için Yapılandırma

Yeni bir yapılandırma dosyası oluşturun:

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

Aşağıdaki server block’u ekleyin:

server {
    listen 80;
    listen [::]:80;

    server_name example1.com www.example1.com;

    root /var/www/example1.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example1.com.access.log;
    error_log  /var/log/nginx/example1.com.error.log;

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

Dosyayı kaydedin ve kapatın (Ctrl+X, ardından Y, ardından Enter).

example2.com için Yapılandırma

İkinci bir yapılandırma dosyası oluşturun:

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

Aşağıdaki server block’u ekleyin:

server {
    listen 80;
    listen [::]:80;

    server_name example2.com www.example2.com;

    root /var/www/example2.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example2.com.access.log;
    error_log  /var/log/nginx/example2.com.error.log;

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

Temel Direktifler Açıklandı

DirektifAmaç
listen 80Port 80’de gelen HTTP bağlantılarını dinler
listen [::]:80Port 80’de IPv6 desteğini etkinleştirir
server_nameBu bloğun hangi alan adlarını işlediğini tanımlar
rootBelge kökünü ayarlar — web sitesi dosyalarının depolandığı yer
indexBir dizin istendiğinde sunulacak varsayılan dosyayı belirtir
try_filesİstenen dosyayı sunmaya çalışır; bulunamazsa 404 döndürür
access_log / error_logDaha kolay hata ayıklama için site başına ayrı günlük dosyaları

Adım 4: Virtual Host’ları Etkinleştirin

Nginx, sites-available adresinden sites-enabled adresine sembolik bağlantılar oluşturarak siteleri etkinleştirir. Bu tasarım, yapılandırmaları hazırlamanıza ve hemen etkinleştirmemenize olanak tanır.

sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/

Varsayılan Siteyi Kaldırın (İsteğe Bağlı ancak Önerilir)

Nginx’in varsayılan yer tutucu sayfasının müdahale etmesini önlemek istiyorsanız, bunu devre dışı bırakın:

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

Sembolik bağlantıyı yeniden oluşturarak bunu daha sonra yeniden etkinleştirebilirsiniz.

Adım 5: Nginx Yapılandırmasını Test Edin

Nginx’i yeniden başlatmadan önce, yapılandırma dosyalarınızı sözdizimi hataları açısından her zaman doğrulayın. Yanlış yapılandırılmış bir dosya sunucudaki tüm siteleri kapatabilir.

sudo nginx -t

Başarılı bir test şunu döndürür:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Hata görürseniz, Nginx sorunun oluştuğu dosya ve satır numarasını gösterecektir. İlgili yapılandırma dosyasını gözden geçirin ve devam etmeden önce yazım hatalarını veya eksik noktalı virgülleri düzeltin.

Adım 6: Değişiklikleri Uygulamak için Nginx’i Yeniden Başlatın

Konfigürasyon testi başarılı olduktan sonra, değişikliklerinizi uygulamak için Nginx’i yeniden yükleyin veya yeniden başlatın:

sudo systemctl restart nginx

Alternatif olarak, aktif bağlantıları kesintiye uğratmayan zarif bir yeniden başlatma için reload kullanın:

sudo systemctl reload nginx

Adım 7: Web Sitelerinize Erişin

DNS Zaten Yapılandırılmışsa

Alan adlarınız zaten DNS A kayıtları aracılığıyla sunucunuzun IP adresine işaret ediyorsa, tarayıcınızı açın ve şu adreslere gidin:

  • http://example1.com
  • http://example2.com

Adım 2’de oluşturduğunuz ilgili “Hoş Geldiniz” mesajlarını görmelisiniz.

Yerel Test İçin (DNS Olmadan)

Yerel olarak test ediyorsanız veya DNS henüz yayılmamışsa, yerel makinenizin /etc/hosts dosyasını (Linux/macOS’ta) veya C:WindowsSystem32driversetchosts (Windows’ta) düzenleyerek alan adı çözümlemesini simüle edebilirsiniz.

Dosyayı yükseltilmiş ayrıcalıklarla açın:

sudo nano /etc/hosts

Aşağıdaki satırları ekleyin, YOUR_SERVER_IP yerine gerçek sunucu IP adresinizi yazın:

YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.com

Dosyayı kaydedin ve tarayıcınızda test edin. Gerçek DNS kayıtlarınız canlı olduğunda bu girişleri kaldırmayı unutmayın.

Adım 8: HTTPS’i Let’s Encrypt ile Etkinleştirin (Önerilir)

Web sitelerini düz HTTP üzerinde çalıştırmak artık üretim ortamları için kabul edilebilir değildir. HTTPS, sunucunuz ile ziyaretçileriniz arasındaki trafiği şifreler, SEO sıralamalarını iyileştirir ve modern tarayıcı özellikleri için gereklidir. Let’s Encrypt, ücretsiz, otomatik olarak yenilenebilir SSL/TLS sertifikaları sağlar.

> Premium bir SSL çözümü tercih mi ediyorsunuz? AlexHost, genişletilmiş doğrulama veya joker kapsamına ihtiyaç duyan işletmeler için güvenilir SSL Sertifikaları sunmaktadır.

Certbot’u Yükleyin

sudo apt install certbot python3-certbot-nginx

SSL Sertifikaları Edinin ve Yükleyin

Her etki alanı için Certbot’u çalıştırın. --nginx eklentisi, HTTPS’i etkinleştirmek için Nginx yapılandırmanızı otomatik olarak değiştirir:

sudo certbot --nginx -d example1.com -d www.example1.com
sudo certbot --nginx -d example2.com -d www.example2.com

Etkileşimli istemleri izleyin. Certbot şunları yapacaktır:

  1. Etki alanı sahipliğini HTTP challenge aracılığıyla doğrulayın
  2. Let’s Encrypt’ten imzalı bir sertifika edinin
  3. Nginx sunucu bloğunuzu otomatik olarak 443 numaralı bağlantı noktasında dinlemek için güncelleyin
  4. HTTP’den HTTPS’e yönlendirmeyi yapılandırın

Otomatik Yenilemeyi Doğrulayın

Let’s Encrypt sertifikaları her 90 günde bir sona erer. Certbot, yenilemeleri otomatik olarak işlemek için bir systemd zamanlayıcısı yükler. Bunu şu şekilde test edin:

sudo certbot renew --dry-run

Kuru çalıştırma hatasız tamamlanırsa, sertifikalarınız herhangi bir manuel müdahale olmadan otomatik olarak yenilenir.

Güncellenmiş Sunucu Bloğunuz Neye Benzer Olacak

Certbot çalıştıktan sonra, yapılandırmanız otomatik olarak şuna benzer şekilde güncellenecektir:

server {
    listen 443 ssl;
    server_name example1.com www.example1.com;

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

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

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

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

Yaygın Sorunları Giderme

Dikkatli yapılandırmaya rağmen sorunlar ortaya çıkabilir. İşte en yaygın sorunlar ve bunları çözme yolları:

502 Bad Gateway

Bu genellikle Nginx’in bir arka uç hizmetiyle (örneğin PHP-FPM veya Node.js uygulaması) iletişim kuramadığı anlamına gelir. Arka uç hizmetinin çalıştığını ve yapılandırmanızdaki soket/portu doğru olduğunu doğrulayın.

403 Forbidden

Genellikle bir izin sorunu. www-data öğesinin web kökünü sahiplediğini ve dosya izinlerinin doğru ayarlandığını kontrol edin:

sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com

404 Not Found

Server bloğunuzdaki root yönergesinin doğru dizine işaret ettiğini ve index.html öğesinin bu yolda bulunduğunu doğrulayın.

Yanlış Site Yükleniyor

example1.com ziyaret etmek example2.com içeriğini yüklüyorsa, şunları kontrol edin:

  • Her server_name yönergesinin benzersiz ve doğru olduğu
  • sites-enabled içindeki sembolik bağlantıların geçerli olduğu: ls -la /etc/nginx/sites-enabled/
  • Çakışma varsa varsayılan sitenin devre dışı bırakıldığı

Yapılandırma Değişikliğinden Sonra Nginx Başlatılamıyor

Yeniden başlatmadan önce her zaman sudo nginx -t çalıştırın. Hata çıktısını dikkatlice gözden geçirin — soruna neden olan tam dosya ve satırı gösterecektir.

Günlükleri Kontrol Etme

Site başına günlükler (Adım 3’te yapılandırılan) en iyi hata ayıklama kaynağınızdır:

sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.log

Gelişmiş Hususlar

PHP Uygulamalarını Barındırma

Siteleriniz PHP çalıştırıyorsa (örneğin, WordPress, Laravel), PHP-FPM yüklemeniz ve sunucu bloğunuza bir fastcgi_pass yönergesi eklemeniz gerekir:

location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Kontrol Paneli Kullanma

Nginx sanal hostlarını komut satırı aracılığıyla manuel olarak yönetmek güçlüdür ancak ölçekte zaman alıcıdır. Grafik bir arayüzü tercih ederseniz, AlexHost'ın cPanel ile VPS seçeneğini veya iş akışınıza uygun olanı bulmak için tüm VPS Kontrol Panelleri aralığını keşfetmeyi düşünün.

Tek Bir VPS’nin Ötesine Ölçeklendirme

Trafiğiniz arttıkça, tek bir VPS yeterli olmayabilir. Yüksek trafikli, kaynak yoğun iş yükleri için, garantili kaynaklar, tam donanım izolasyonu ve maksimum performans için Dedicated Servers seçeneğine yükseltmeyi düşünün.

Sonuç

Ubuntu üzerinde Nginx sanal hostlarını başarıyla yapılandırdınız ve sunucunuzun aynı anda birden fazla bağımsız web sitesini barındırmasını sağladınız. İşte gerçekleştirilen işlemlerin özeti:

  • Her etki alanı için izole web kök dizinleri oluşturdunuz ve doğru sahiplik ile izinleri ayarladınız
  • Temiz, üretime hazır sunucu bloğu yapılandırmaları yazdınız ve ayrı erişim ile hata günlükleri ayarladınız
  • Nginx’in sembolik bağlantı tabanlı sites-available / sites-enabled modelini kullanarak sanal hostları etkinleştirdiniz
  • Nginx yapılandırmasını güvenli bir şekilde doğruladınız ve yeniden yüklediniz
  • Her siteyi HTTPS ile güvenli hale getirdiniz ve Certbot aracılığıyla ücretsiz Let’s Encrypt sertifikaları kullandınız

Bu kurulum verimli, ölçeklenebilir ve Nginx en iyi uygulamalarını takip etmektedir. İki site veya yirmi site barındırıyor olsanız da, aynı model geçerlidir — her ek etki alanı için işlemi tekrarlayın.

En iyi sonuçlar için bu yapılandırmayı hızlı ve güvenilir bir barındırma ortamı ile birleştirin. AlexHost’un VPS Hosting planları Linux iş yükleri için optimize edilmiştir, tam kök erişimi sağlar ve 24/7 teknik destek ile desteklenir — size Nginx’i üretimde çalıştırmak için ideal bir temel sunar.