Sunucu Yönetimi & Linux

    Ubuntu 22.04'te Nginx Kurulumu ve Temel Yapılandırma

    Ubuntu 22.04 sunucuda Nginx'i apt ile kurmayı, ufw güvenlik duvarını açmayı, servisi yönetmeyi ve birden fazla siteyi server block ile yayınlamayı anlatan uygulamalı rehber.

    9 dk okuma Güncellendi: 1 Temmuz 2026

    Nginx, bugün internetin önemli bir kısmını taşıyan, en yaygın kullanılan web sunucularından biridir. Düşük bellek tüketimi, aynı anda binlerce bağlantıyı karşılayabilen olay tabanlı mimarisi ve ters vekil (reverse proxy) yeteneği sayesinde tek sayfalık kişisel bir siteyi de, günde milyonlarca istek gören büyük bir platformu da aynı rahatlıkla ayakta tutar. Bu rehberde sıfırdan kurulu, temiz bir Ubuntu 22.04 LTS sunucusunda Nginx'i baştan sona ayağa kaldırmayı, ufw güvenlik duvarını doğru biçimde yapılandırmayı, servisi systemctl ile yönetmeyi ve birden fazla siteyi server block (sanal host) ile aynı sunucuda birlikte barındırmayı adım adım göreceksiniz.

    Her adımı çalışan gerçek komutlarla ilerletiyor, komutun tam olarak ne yaptığını da tek tek açıklıyoruz; böylece kopyala-yapıştır yapmak yerine ne olup bittiğini anlayarak ilerlersiniz. Rehberin sonunda en sık karşılaşılan hataları hızla çözmeniz için bir sorun giderme bölümü ile sık sorulan sorular yer alıyor. Anlatım yeni başlayanları gözeterek yazıldı; yine de dizin düzenini ve yapılandırma mantığını tazelemek isteyen deneyimli kullanıcılar için hızlı bir başvuru niteliği de taşıyor.

    Ön Koşullar#

    Başlamadan önce elinizde şunların olması gerekir:

    • Root ya da sudo yetkisine sahip bir kullanıcıyla erişebildiğiniz bir Ubuntu 22.04 sunucusu (bir VDS veya sanal sunucu bu iş için idealdir).
    • Sunucunuzun genel (public) IP adresi.
    • Nginx üzerinden bir alan adı yayınlayacaksanız, o alan adının A kaydının sunucunuzun IP'sine yönlendirilmiş olması.

    Terminal komutlarının çoğu sudo ile başlar. Eğer doğrudan root kullanıcısıysanız sudo yazmanıza gerek yoktur. Temel terminal komutlarına aşina değilseniz, önce Linux temel komutlar rehberine göz atmanız işinizi kolaylaştırır.

    1. Paket Deposunu Güncelleyin#

    Kuruluma başlamadan önce sistemin paket listesini tazelemek iyi bir alışkanlıktır. Böylece deponuzdaki en güncel Nginx sürümünü çekersiniz:

    sudo apt update
    sudo apt upgrade -y
    

    apt update yalnızca depolardaki paket listelerini tazeler, hiçbir şey kurmaz veya değiştirmez. apt upgrade -y ise sistemde zaten kurulu olan paketleri en yeni sürümlerine yükseltir; -y bayrağı onay sorularını otomatik "evet" ile geçer. Yeni kurulmuş bir sunucuda bekleyen çok sayıda güncelleme olabileceğinden bu adım birkaç dakika sürebilir. Çekirdek güncellendiyse, kuruluma devam etmeden önce bir kez sunucuyu yeniden başlatmanız (sudo reboot) sağlıklı olur.

    2. Nginx'i Kurun#

    Nginx, Ubuntu'nun varsayılan depolarında bulunur; dolayısıyla harici bir depo eklemenize gerek yoktur:

    sudo apt install nginx -y
    

    Kurulum tamamlandığında Nginx otomatik olarak başlatılır ve sistem açılışına eklenir. Sürümü hızlıca doğrulayabilirsiniz:

    nginx -v
    

    Çıktı nginx version: nginx/1.18.0 (Ubuntu) benzeri bir satır olmalıdır — 22.04'ün varsayılan deposu bu sürümü sunar. En güncel kararlı sürümü istiyorsanız Nginx'in resmi deposunu ekleyebilirsiniz; ancak çoğu senaryo için Ubuntu'nun deposundaki sürüm gayet yeterlidir ve güvenlik yamalarını otomatik alır.

    3. Güvenlik Duvarını (ufw) Yapılandırın#

    Ubuntu'da varsayılan güvenlik duvarı ufw'dir (Uncomplicated Firewall). Nginx, kurulurken ufw'ye kendi uygulama profillerini kaydeder. Mevcut profilleri listeleyerek başlayalım:

    sudo ufw app list
    

    Nginx için üç profil görürsünüz:

    • Nginx HTTP — yalnızca 80 numaralı port (şifresiz HTTP).
    • Nginx HTTPS — yalnızca 443 numaralı port (şifreli HTTPS).
    • Nginx Full — hem 80 hem 443 portu.

    İleride bir SSL sertifikası kuracaksanız (ki kesinlikle önerilir) Nginx Full profilini açmak en pratik seçenektir:

    sudo ufw allow 'Nginx Full'
    

    Dikkat: Güvenlik duvarını etkinleştirmeden önce SSH portunu (OpenSSH profili veya port 22) mutlaka açın. ufw varsayılan olarak gelen tüm trafiği reddeder; SSH kuralını eklemeden enable ederseniz kendi bağlantınız da kesilir ve uzaktaki bir sunucuya artık giriş yapamazsınız. Bu, uzak sunucu yönetiminde en sık yapılan ve en can sıkıcı hatalardan biridir.

    SSH'ı açıp güvenlik duvarını etkinleştirmek için:

    sudo ufw allow OpenSSH
    sudo ufw enable
    sudo ufw status
    

    status çıktısında Nginx Full ve OpenSSH satırlarının ALLOW olarak listelendiğini görmelisiniz.

    4. Servisi systemctl ile Yönetin#

    Nginx, systemd ile yönetilen bir servistir. Günlük işlerinizde en çok kullanacağınız komutlar şunlardır:

    sudo systemctl status nginx     # Servisin durumunu gösterir
    sudo systemctl stop nginx       # Servisi durdurur
    sudo systemctl start nginx      # Servisi başlatır
    sudo systemctl restart nginx    # Servisi tamamen yeniden başlatır
    sudo systemctl reload nginx     # Yapılandırmayı yeniden yükler (bağlantıları kesmeden)
    

    restart ile reload arasındaki fark önemlidir. reload, yalnızca yapılandırma dosyalarını yeniden okur ve mevcut bağlantıları kesmez; canlı sitelerde tercih edilmesi gereken yöntem budur. restart ise servisi tümüyle kapatıp açar ve kısa bir kesinti yaratabilir.

    Nginx'in sunucu açılışında otomatik başlaması için (varsayılan olarak etkindir, yine de kontrol etmekte fayda var):

    sudo systemctl enable nginx
    

    Bu noktada tarayıcınıza sunucunuzun IP adresini yazarsanız, Nginx'in varsayılan "Welcome to nginx!" karşılama sayfasını görmeniz gerekir. Bu sayfayı görüyorsanız kurulum başarılıdır.

    5. Nginx Dizin Yapısını Tanıyın#

    Yapılandırmaya geçmeden önce Nginx'in Ubuntu'daki dosya düzenini bilmek her şeyi netleştirir:

    YolAçıklama
    /etc/nginx/nginx.confAna yapılandırma dosyası
    /etc/nginx/sites-available/Tüm site yapılandırmaları burada tutulur
    /etc/nginx/sites-enabled/Yalnızca aktif siteler; sites-available'a sembolik bağlantılardır
    /var/www/html/Varsayılan web kök dizini (site dosyaları)
    /var/log/nginx/access.logErişim kayıtları
    /var/log/nginx/error.logHata kayıtları — sorun giderirken ilk bakacağınız yer

    Buradaki temel mantık şudur: bir siteyi sites-available içinde tanımlarsınız, sonra sites-enabled içine sembolik bağlantı vererek etkinleştirirsiniz. Bir siteyi geçici olarak kapatmak istediğinizde bağlantıyı silmeniz yeterlidir; yapılandırma dosyası kaybolmaz.

    6. Server Block (Sanal Host) Oluşturun#

    Bir server block, tek bir sunucuda birden çok siteyi ayrı ayrı yayınlamanızı sağlar. ornek.com adında bir site için adımlar aşağıdaki gibidir.

    Web Kök Dizinini Hazırlayın#

    Önce sitenin dosyalarının duracağı dizini oluşturun:

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

    $USER değişkeni o an oturum açmış kullanıcının adını taşır; chown ile dizinin sahipliğini bu kullanıcıya verdiğimizde site dosyalarını her seferinde sudo yazmadan düzenleyebilirsiniz. chmod 755 ise dizinlere sahibi için tam, herkes için okuma-çalıştırma izni tanır; Nginx'in dosyaları okuyabilmesi için gereken en dengeli izin budur. Test için basit bir index.html ekleyelim:

    echo '<h1>ornek.com yayında!</h1>' > /var/www/ornek.com/html/index.html
    

    Yapılandırma Dosyasını Yazın#

    Sitenin server block dosyasını oluşturun:

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

    İçine aşağıdaki yapılandırmayı yapıştırın:

    server {
        listen 80;
        listen [::]:80;
    
        root /var/www/ornek.com/html;
        index index.html index.htm;
    
        server_name ornek.com www.ornek.com;
    
        location / {
            try_files $uri $uri/ =404;
        }
    }
    

    Bu bloğun anlamı:

    • listen 80; — HTTP trafiğini 80 numaralı portta dinler ([::]:80 ise IPv6 içindir).
    • root — bu sitenin dosyalarının bulunduğu dizin.
    • index — kök adres istendiğinde sunulacak varsayılan dosyalar.
    • server_name — bu bloğun hangi alan adları için çalışacağı.
    • try_files $uri $uri/ =404; — istenen dosya veya dizin yoksa 404 döndürür.

    Siteyi Etkinleştirin#

    Yapılandırmayı sites-enabled içine sembolik bağlantı olarak ekleyin:

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

    Birden fazla server block eklerken Nginx, karma tablo bellek boyutu uyarısı verebilir. Bunu önlemek için /etc/nginx/nginx.conf dosyasında http bloğu içinde şu satırı bulup başındaki # işaretini kaldırın:

    server_names_hash_bucket_size 64;
    

    Yapılandırmayı Test Edin ve Uygulayın#

    Değişiklikleri uygulamadan önce her zaman sözdizimi testi yapın:

    sudo nginx -t
    

    Çıktı syntax is ok ve test is successful içeriyorsa güvenle devam edebilirsiniz. Ardından yapılandırmayı yeniden yükleyin:

    sudo systemctl reload nginx
    

    Artık ornek.com alan adının A kaydı sunucunuza yönlendiyse, tarayıcıda http://ornek.com adresini açtığınızda "ornek.com yayında!" mesajını görmelisiniz. Aynı yöntemle istediğiniz kadar site ekleyebilirsiniz: her yeni site için sites-available altında ayrı bir dosya yazar, ayrı bir sembolik bağlantı oluşturur ve tekrar nginx -t ile test edip reload edersiniz. Nginx, gelen isteğin Host başlığındaki alan adına göre doğru server block'u kendisi eşleştirir.

    7. Temel Sorun Giderme#

    Bir şeyler ters gittiğinde panik yapmayın; Nginx oldukça açık hata mesajları verir. İşte en sık karşılaşılan durumlar:

    nginx -t başarısız oluyor. Test çıktısı hatalı satırın dosya adını ve numarasını gösterir. Genellikle eksik bir noktalı virgül (;) veya kapatılmamış bir süslü parantez (}) sebeptir. Belirtilen satıra gidip düzeltin.

    "Welcome to nginx" sayfası kendi siteniz yerine çıkıyor. Bu, varsayılan sitenin hâlâ aktif olduğu anlamına gelir. Gerekirse varsayılan bağlantıyı kaldırın:

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

    502 Bad Gateway hatası. Genellikle bir uygulama sunucusuna (PHP-FPM, Node.js, Gunicorn) ters vekil yaparken, o arka uç servisi çalışmadığında görülür. sudo systemctl status php8.1-fpm gibi komutlarla arka uç servisin ayakta olduğunu kontrol edin.

    403 Forbidden hatası. Çoğu zaman dosya izinleri veya kök dizin yanlıştır. Web kök dizininin izinlerini ve root yolunun doğru yazıldığını kontrol edin. Erişim ve hata kayıtları en değerli ipucudur:

    sudo tail -f /var/log/nginx/error.log
    

    tail -f komutu log dosyasını canlı olarak izler; başka bir sekmede siteyi yenilediğinizde hatanın tam nedenini anında görürsünüz.

    8. Sonraki Adımlar: HTTPS ve Performans#

    Siteniz artık HTTP üzerinden yayında. Modern web için bir sonraki zorunlu adım HTTPS'tir. Let's Encrypt ile ücretsiz bir SSL sertifikası kurarak tarayıcıdaki "güvenli değil" uyarısından kurtulabilir ve verileri şifreleyebilirsiniz; adımları Let's Encrypt ile ücretsiz SSL rehberinde bulabilirsiniz. Kurumsal projelerde EV/OV sertifika ihtiyacınız varsa SSL sertifikası seçeneklerini de değerlendirebilirsiniz.

    Performans için nginx.conf içinde Gzip sıkıştırmayı etkinleştirmek, statik dosyalar için tarayıcı önbelleği (expires) ayarlamak ve worker_processes auto; bırakmak iyi başlangıç noktalarıdır. WordPress kullanıyorsanız, Nginx ile FastCGI önbelleği ciddi bir hız kazandırır; hazır ve bakımı yapılan bir kurulum için WordPress hosting çözümlerine göz atabilirsiniz.

    Sıkça Sorulan Sorular#

    Nginx mi Apache mi tercih etmeliyim?#

    İkisi de olgun ve güvenilir web sunucularıdır. Nginx, yüksek eşzamanlı trafikte ve statik içerik ile ters vekil senaryolarında genellikle daha az kaynak tüketir. Apache ise .htaccess ile dizin bazlı yapılandırma esnekliği sunar. Yeni projelerde ve yüksek trafik beklentisinde Nginx yaygın olarak öne çıkar.

    Aynı sunucuda kaç site barındırabilirim?#

    Teknik olarak server block sayısında bir sınır yoktur; asıl sınır sunucunuzun CPU, RAM ve disk kaynaklarıdır. Birkaç düşük trafikli siteyi tek bir VDS üzerinde rahatlıkla barındırabilirsiniz. Trafik arttıkça kaynakları izleyip gerektiğinde yükseltmek en sağlıklı yaklaşımdır.

    nginx -t neden bu kadar önemli?#

    Bu komut yapılandırmayı gerçekten uygulamadan sözdizimi hatalarını yakalar. Eğer hatalı bir yapılandırmayı doğrudan reload ederseniz Nginx yeni ayarları reddedebilir ya da başlamayabilir. Canlı bir sitede bu, kesinti anlamına gelir. Bu yüzden her değişiklikten sonra önce nginx -t çalıştırmak altın kuraldır.

    Bir siteyi silmeden nasıl geçici olarak kapatırım?#

    Yalnızca sites-enabled içindeki sembolik bağlantısını kaldırıp Nginx'i yeniden yükleyin: sudo rm /etc/nginx/sites-enabled/ornek.com ardından sudo systemctl reload nginx. Asıl yapılandırma dosyası sites-available içinde kalır; tekrar açmak isterseniz bağlantıyı yeniden oluşturmanız yeterlidir.

    Nginx yeniden başladıktan sonra siteme erişemiyorum, ne yapmalıyım?#

    Önce sudo systemctl status nginx ile servisin gerçekten çalışıp çalışmadığına bakın. Servis ayakta ama site açılmıyorsa güvenlik duvarını kontrol edin: sudo ufw status çıktısında 80 (ve varsa 443) portunun ALLOW olması gerekir. Son olarak /var/log/nginx/error.log dosyası neredeyse her zaman kök nedeni gösterir.

    www ve www'suz adresin ikisi de çalışsın istiyorum, nasıl yaparım?#

    Örnek yapılandırmadaki server_name ornek.com www.ornek.com; satırı, her iki adı da aynı server block'a bağlar; yani ikisi de aynı içeriği sunar. Genellikle önerilen yaklaşım, birini "kanonik" (tercih edilen) sürüm seçip diğerini ona yönlendirmektir; bu, SEO açısından da içeriğin tek adreste toplanmasını sağlar. Yönlendirme için ayrı, küçük bir server block ekleyebilirsiniz: server_name www.ornek.com; diyen blokta return 301 https://ornek.com$request_uri; satırıyla www isteklerini köke taşırsınız. SSL kurulumundan sonra bu yönlendirmeyi HTTPS üzerinden yapmak en temiz sonucu verir.

    Nginx kurulumu, doğru adımlar izlendiğinde birkaç dakikada tamamlanan ama üzerine çok şey inşa edebileceğiniz sağlam bir temeldir. Sunucu yönetimiyle uğraşmak yerine hazır ve güvenli bir altyapı üzerinde başlamak isterseniz, farklı kaynak seçenekleri sunan bulut sunucu ve hosting paketleri işinizi kolaylaştırabilir; kurulum ve güncelleme yükünü üstlenmeden projenize odaklanabilirsiniz.

    NginxUbuntuWeb Sunucusu

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.