LIONFIN
VPS & Sunucu

Ubuntu Nginx Kurulumu: Server Block, UFW ve Log Ayarları

6 dk okuma Güncelleme: 1 görüntülenme
Ubuntu Nginx Kurulumu: Server Block, UFW ve Log Ayarları

Ubuntu Nginx kurulumu, Nginx web sunucusunu Ubuntu’nun resmî depolarından apt ile yükleyip her alan adı için ayrı bir server block (sanal sunucu) dosyası tanımlama işlemidir. Root erişimli bir VPS sunucu üzerinde süreç birkaç dakika sürer; sonunda statik bir siteyi yayınlayabilen, PHP-FPM ya da Node.js uygulamalarının önünde reverse proxy olarak çalışmaya hazır bir web sunucunuz olur.

Komutlar Ubuntu 24.04 LTS için yazılmıştır; Debian 12 ve 13’te paket adı ve dizin yapısı aynıdır, yalnızca UFW’nin ayrıca kurulması gerekir. LIONFIN VPS’lerinde işletim sistemini sipariş sırasında kendiniz seçersiniz. Başlamadan önce sudo yetkili bir kullanıcı açıp sistemi güncellediğinizden emin olun; bu hazırlık VPS ilk kurulum adımları rehberinde anlatılıyor. Örneklerde alan adı ornek.com, sunucu IP’si 203.0.113.10 olarak geçer.

Kısa cevap

Ubuntu Nginx kurulumu için önce sudo apt update ve sudo apt install nginx komutları çalıştırılır, ardından UFW’de Nginx Full profiline izin verilerek 80 ve 443 portları açılır. Her site için /etc/nginx/sites-available/ altında bir server block dosyası yazılır ve sites-enabled klasörüne sembolik bağlantıyla etkinleştirilir. Değişiklikler sudo nginx -t ile sınanır, sudo systemctl reload nginx ile kesintisiz uygulanır.

Nginx nedir, Ubuntu sunucuda neden tercih edilir?

Nginx, bağlantıları az sayıda işçi (worker) süreçle olay güdümlü biçimde karşılayan açık kaynaklı bir web sunucusu ve reverse proxy yazılımıdır. Her ziyaretçi için ayrı süreç açmadığından eşzamanlı bağlantı sayısı arttığında bellek kullanımı öngörülebilir kalır.

  • Statik içerik: Görsel, CSS ve JavaScript dosyalarını doğrudan diskten, düşük kaynakla sunar.
  • Reverse proxy: PHP-FPM, Node.js, Python ya da Docker uygulamalarının önünde TLS bağlantısını sonlandırır ve istekleri arka uca iletir.
  • Merkezî yapılandırma: Apache’deki .htaccess dosyaları yoktur; tüm kurallar server block dosyalarında durur. Bu, her istekte dizin taranmasını önler ama paylaşımlı hostingden gelen kuralların Nginx sözdizimine çevrilmesini gerektirir; farklar için .htaccess kullanımı rehberine bakabilirsiniz.

Ubuntu deposundaki Nginx sürümü, LTS desteği boyunca güvenlik yamalarıyla güncellenir. Daha yeni bir ana sürüm gerekiyorsa nginx.org’un resmî paket deposu kullanılabilir; o paket sites-available düzeni yerine conf.d klasörünü kullandığı için bu rehberdeki yollar değişir.

Ubuntu Nginx kurulumu nasıl yapılır?

Kurulum dört adımdır; paket, servisi kurulumla birlikte başlatır ve açılışta otomatik başlayacak şekilde etkinleştirir.

  1. Paket listesini güncelleyip Nginx’i kurun:
    sudo apt update
    sudo apt install nginx
  2. Servisin durumunu kontrol edin; ilk komutun çıktısında active (running), ikincisinde enabled görmelisiniz:
    systemctl status nginx --no-pager
    systemctl is-enabled nginx
  3. Kurulan sürümü nginx -v ile not edin.
  4. Sunucunun içinden test edin: curl -I localhost komutu HTTP/1.1 200 OK ve Server: nginx ile başlayan satırları döndürmelidir. Ardından tarayıcıda 203.0.113.10 adresini açın; “Welcome to nginx!” sayfası gelmiyorsa engel büyük olasılıkla güvenlik duvarındadır.

Sunucuda daha önce Apache kurulduysa 80 portu dolu olduğu için Nginx başlamaz. sudo systemctl disable --now apache2 ile Apache’yi durdurun ya da iki sunucudan birini farklı bir porta taşıyın.

UFW’de Nginx için hangi portlar açılmalı?

Web trafiği için 80 (HTTP) ve 443 (HTTPS) portları açılmalı, SSH erişiminiz de kural listesinde kalmalıdır. Ubuntu’nun Nginx paketi UFW’ye üç uygulama profili ekler:

ProfilAçtığı portNe zaman kullanılır
Nginx HTTP80/tcpSertifika henüz yokken, geçici olarak
Nginx HTTPS443/tcpYalnızca şifreli trafik kabul edilecekse
Nginx Full80/tcp ve 443/tcpÇoğu site için önerilen seçenek
sudo ufw app list
sudo ufw allow OpenSSH
sudo ufw allow "Nginx Full"
sudo ufw enable
sudo ufw status verbose

Profiller listede görünmüyorsa aynı izni port numarasıyla verebilirsiniz: sudo ufw allow 80/tcp ve sudo ufw allow 443/tcp. HTTPS’e geçtikten sonra da 80 portunu kapatmayın; Let’s Encrypt’in HTTP doğrulaması ve HTTPS’e yönlendirme bu porta ihtiyaç duyar. Kural yönetiminin ayrıntıları UFW firewall kurulumu rehberindedir.

Dikkat: UFW’yi etkinleştirmeden önce OpenSSH profiline (ya da değiştirdiğiniz SSH portuna) izin vermezseniz sunucuyla bağlantınız kesilir.

Server block nedir, nasıl oluşturulur?

Server block, Nginx’e belirli bir alan adına gelen isteğin hangi klasörden ya da hangi arka uçtan yanıtlanacağını söyleyen yapılandırma bloğudur; Apache’deki virtual host’un karşılığıdır. Her site için ayrı dosya açmak yönetimi kolaylaştırır.

  1. Web kökünü oluşturun ve bir test sayfası koyun:
    sudo mkdir -p /var/www/ornek.com/html
    sudo chown -R $USER:$USER /var/www/ornek.com/html
    echo "ornek.com çalışıyor" > /var/www/ornek.com/html/index.html
  2. sudo nano /etc/nginx/sites-available/ornek.com ile dosyayı açıp şu bloğu yazın:
    server {
        listen 80;
        listen [::]:80;
        server_name ornek.com www.ornek.com;
    
        root /var/www/ornek.com/html;
        index index.html index.htm;
    
        access_log /var/log/nginx/ornek.com.access.log;
        error_log /var/log/nginx/ornek.com.error.log;
    
        location / {
            try_files $uri $uri/ =404;
        }
    }
  3. Siteyi etkinleştirin, sözdizimini sınayın ve yeniden yükleyin:
    sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl reload nginx

Alan adının A kayıtları (ornek.com ve www) sunucu IP’sini göstermiyorsa yapılandırma doğru olsa da site açılmaz. Statik dosyalarda klasörün sizin kullanıcınıza ait olması yeterlidir; Nginx işçileri dosyaları www-data kullanıcısıyla okur. PHP çalıştıracaksanız sonraki adım LEMP stack kurulumu; ücretsiz Let’s Encrypt ya da kurumsal doğrulamalı bir SSL sertifikası ile HTTPS’e geçiş HTTP → HTTPS yönlendirme rehberinde anlatılıyor.

Nginx yapılandırma dosyaları nerede bulunur?

Ubuntu paketinde tüm yapılandırma /etc/nginx/ altında toplanır; ana dosya diğerlerini include yönergesiyle çağırır.

Yolİçerik
/etc/nginx/nginx.confAna dosya: işçi süreç ayarları ve tüm sitelere uygulanan http bloğu
/etc/nginx/sites-available/Etkin olsun olmasın tüm site dosyaları
/etc/nginx/sites-enabled/Nginx’in gerçekten okuduğu sembolik bağlantılar
/etc/nginx/conf.d/.conf uzantılı genel ek ayarlar
/etc/nginx/snippets/Tekrar kullanılan parçalar, ör. fastcgi-php.conf
/var/www/Web kök dizinleri
/var/log/nginx/Erişim ve hata kayıtları

Bir siteyi geçici olarak kapatmak için dosyasını silmeniz gerekmez; sites-enabled içindeki bağlantıyı kaldırıp Nginx’i yeniden yüklemeniz yeterlidir. Okunan tüm dosyaların birleşik hâlini görmek için sudo nginx -T komutunu kullanın; bir ayarın hangi dosyadan geldiğini bulmanın en hızlı yoludur.

Varsayılan site nasıl kapatılır?

Ubuntu, kurulumla birlikte /etc/nginx/sites-enabled/default bağlantısını etkin bırakır. Bu blok default_server olarak işaretli olduğundan IP adresiyle ya da tanımsız bir alan adıyla gelen istekleri “Welcome to nginx!” sayfasıyla karşılar. Kendi siteniz hazır olduğunda bağlantıyı kaldırın:

sudo unlink /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx

Varsayılan blok kalkınca Nginx, eşleşmeyen istekleri o port için okuduğu ilk server block’a verir; yani sunucuya yönlendirilmiş rastgele bir alan adı sizin sitenizi açabilir. Bunu önlemek için tanımsız istekleri yanıtsız kapatan bir yakalayıcı bloğu /etc/nginx/conf.d/catchall.conf gibi ayrı bir dosyaya ekleyin:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}

444 Nginx’e özgü bir koddur ve bağlantıyı yanıt göndermeden kapatır. Çok uzun ya da çok sayıda alan adı tanımladığınızda nginx -t “could not build server_names_hash” hatası verebilir. Yalnızca bu durumda /etc/nginx/nginx.conf içindeki # server_names_hash_bucket_size 64; satırının başındaki # işaretini kaldırın; 64 yetmezse değeri 128 yapın.

Nginx logları nasıl okunur, sık hatalar nasıl çözülür?

Sorun giderirken ilk bakılacak yer hata kaydıdır; Nginx başarısız her isteğin nedenini buraya yazar. Varsayılan dosyalar /var/log/nginx/access.log ve /var/log/nginx/error.log’dur; server block’ta ayrı dosya tanımladıysanız o sitenin kayıtları oraya düşer.

sudo tail -f /var/log/nginx/ornek.com.error.log
sudo tail -n 50 /var/log/nginx/ornek.com.access.log
sudo journalctl -u nginx --since "1 hour ago"

Kayıtlar, paketle gelen /etc/logrotate.d/nginx kuralıyla düzenli olarak döndürülüp sıkıştırılır; ek ayar gerekmez.

“Address already in use”

80 ya da 443 portunu başka bir servis tutuyordur; sudo ss -tlnp | grep :80 ile hangisi olduğunu bulun.

403 Forbidden

Klasörde index yönergesindeki dosyalardan hiçbiri yoktur ya da Nginx’in dizini okuma izni eksiktir; kontrol listesi 403 Forbidden hatası rehberindedir.

Değişiklik etkisiz görünüyor

Dosya sites-enabled altına bağlanmamış ya da Nginx yeniden yüklenmemiştir. reload açık bağlantıları kesmeden yeni ayarları devreye alır ve yapılandırma hatalıysa eski ayarlarla çalışmayı sürdürür. restart ise servisi durdurup baştan başlattığından hatalı bir dosya tüm siteleri kapatabilir; bu yüzden her değişiklikten sonra önce nginx -t çalıştırın.

Sık Sorulan Sorular

Nginx mi Apache mi, VPS için hangisini seçmeliyim?

Çok sayıda eşzamanlı bağlantı, statik dosya ağırlıklı içerik ya da reverse proxy ihtiyacı varsa Nginx daha az bellekle çalışır. Yazılımınız .htaccess kurallarına bağımlıysa ve bu kuralları Nginx sözdizimine çevirmek istemiyorsanız Apache daha az uğraştırır. Nginx önde, Apache arkada olacak şekilde ikisini birlikte çalıştırmak da mümkündür; ancak tek sunucuda bu çoğu zaman gereksiz bir karmaşıklıktır.

Nginx yeniden başlatılmadan yapılandırma değişikliği nasıl uygulanır?

Önce sudo nginx -t ile sözdizimini doğrulayın, ardından sudo systemctl reload nginx komutunu çalıştırın. Reload, ana sürecin yeni yapılandırmayı okuyup yeni işçi süreçler başlatmasını sağlar; eski işçiler ellerindeki istekleri tamamlayıp kapanır. Böylece ziyaretçi bağlantıları kesilmez. Servisi tamamen durdurup başlatan restart ise yalnızca nadir durumlarda gerekir.

Aynı VPS’te Nginx ile birden fazla site barındırılabilir mi?

Evet. Her alan adı için sites-available altında ayrı bir server block dosyası, /var/www altında ayrı bir web kökü ve isterseniz ayrı log dosyaları tanımlarsınız. Nginx, isteğin Host başlığını server_name değerleriyle karşılaştırarak doğru siteyi seçer. Barındırabileceğiniz site sayısını Nginx değil, sunucunun işlemci, bellek ve disk kapasitesi belirler.

Nginx .htaccess dosyalarını okur mu?

Hayır. Nginx, Apache’nin .htaccess mekanizmasını desteklemez; yönlendirme, erişim kısıtlama ve önbellek kuralları server block içine yazılır, nginx -t ile doğrulandıktan sonra reload ile uygulanır. Paylaşımlı hostingden taşınan bir sitenin .htaccess kurallarını Nginx karşılıklarına çevirmeniz gerekir; WordPress gibi yaygın yazılımlar için hazır Nginx yapılandırma örnekleri bulunur.

Kurulumdan sonra alan adım neden hâlâ “Welcome to nginx” sayfasını açıyor?

Ya kendi server block dosyanız sites-enabled altına bağlanmamıştır ya da server_name satırındaki ad tarayıcıya yazdığınız adla birebir eşleşmiyordur; bu durumda istek varsayılan siteye düşer. Bağlantıyı ve server_name değerini düzeltip nginx -t ile reload komutlarını çalıştırın. Sorun sürüyorsa alan adının A kaydının doğru IP’yi gösterdiğini ve tarayıcı önbelleğini kontrol edin.

Bu makale yardımcı oldu mu?

Geri bildiriminiz için teşekkürler!

kişi faydalı buldu

Paylaş

X LinkedIn WhatsApp

Sorunuz mu var? Destek ekibimize yazın.