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 nginxYü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 nginxSunucunuza İş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/htmlBu, 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/www755 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.htmlexample2.com için
echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.htmlBu 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.comAş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.comAş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ı
| Direktif | Amaç |
|---|---|
listen 80 | Port 80’de gelen HTTP bağlantılarını dinler |
listen [::]:80 | Port 80’de IPv6 desteğini etkinleştirir |
server_name | Bu bloğun hangi alan adlarını işlediğini tanımlar |
root | Belge kökünü ayarlar — web sitesi dosyalarının depolandığı yer |
index | Bir dizin istendiğinde sunulacak varsayılan dosyayı belirtir |
try_files | İstenen dosyayı sunmaya çalışır; bulunamazsa 404 döndürür |
access_log / error_log | Daha 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/defaultSembolik 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 -tBaş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 successfulHata 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 nginxAlternatif olarak, aktif bağlantıları kesintiye uğratmayan zarif bir yeniden başlatma için reload kullanın:
sudo systemctl reload nginxAdı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.comhttp://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/hostsAş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.comDosyayı 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-nginxSSL 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.comsudo certbot --nginx -d example2.com -d www.example2.comEtkileşimli istemleri izleyin. Certbot şunları yapacaktır:
- Etki alanı sahipliğini HTTP challenge aracılığıyla doğrulayın
- Let’s Encrypt’ten imzalı bir sertifika edinin
- Nginx sunucu bloğunuzu otomatik olarak 443 numaralı bağlantı noktasında dinlemek için güncelleyin
- 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-runKuru ç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.com404 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_nameyönergesinin benzersiz ve doğru olduğu sites-enablediç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.logGeliş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-enabledmodelini 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.
tasarruf edin