Nginx Nasıl Kurulur ve Yapılandırılır?

Nginx Nasıl Kurulur ve Yapılandırılır?

Kısaca

Nginx, tek bir komutla kurulabilen yüksek performanslı bir web sunucusu ve ters proxydir. Doğru çalışması için önemli olan; sunucu bloğunu (server block) düzgün tanımlamak, her değişiklikten sonra nginx -t ile test edip reload ile kesintisiz uygulamak ve güvenlik duvarında 80/443 portlarını açmaktır. Aşağıda sıfırdan kurulumdan SSL, gzip ve ters proxy yapılandırmasına kadar tüm adımları bulacaksınız.

  • Ubuntu/Debian için apt, AlmaLinux/RHEL için dnf ile tek satırda kurulum.
  • worker_processes auto ve gzip on gibi ayarlar performansı belirgin şekilde artırır.
  • Canlı ortamda her zaman önce nginx -t, sonra systemctl reload nginx.

Nginx, yüksek performanslı bir HTTP web sunucusu, ters proxy ve yük dengeleyicidir. Olay tabanlı (event-driven) mimarisi sayesinde çok sayıda eş zamanlı bağlantıyı düşük kaynak tüketimiyle karşılar; bu yüzden hem statik içerik sunumunda hem de uygulama önünde proxy olarak dünyanın en çok kullanılan web sunucularından biridir. Bu rehberde Nginx’i bir sunucuya kurmayı, temel bir site yapılandırmasını ve SSL, sıkıştırma, ters proxy gibi gerçek dünyada ihtiyaç duyacağınız ayarları adım adım anlatıyoruz.

Nginx’i tam kontrolle çalıştırmak için root erişimli bir VPS/sunucu idealdir; paylaşımlı ortamlarda web sunucusu yapılandırmasına doğrudan müdahale edemezsiniz.

Nginx Nedir, Ne İşe Yarar?

Nginx (telaffuzu “engine-x”) temelde dört işi çok iyi yapar:

  • Statik dosya sunucusu: HTML, CSS, JavaScript, resim ve video gibi dosyaları doğrudan ve çok hızlı sunar.
  • Ters proxy (reverse proxy): Arka plandaki bir uygulamanın (Node.js, Python, PHP-FPM, Java vb.) önünde durarak istekleri yönlendirir.
  • Yük dengeleyici (load balancer): Gelen trafiği birden fazla arka uç sunucuya dağıtır.
  • SSL/TLS sonlandırma: Şifreli HTTPS bağlantılarını karşılayıp arka uygulamaya yükü yıkar.

Bu çok yönlülük, Nginx’i hem küçük bir blog hem de yüksek trafikli bir e-ticaret sitesi için uygun bir çözüm haline getirir.

Mail hosting 1 ay ücretsiz

Nginx Kurulumu

Çoğu dağıtımda kurulum tek komuttur:

# Ubuntu/Debian
sudo apt update && sudo apt install nginx

# AlmaLinux/RHEL
sudo dnf install nginx

# Servisi baslat ve onyuklemede etkinlestir
sudo systemctl enable --now nginx

Kurulumdan sonra sunucunuzun IP’sine tarayıcıdan girdiğinizde Nginx’in varsayılan karşılama sayfasını görmelisiniz. Sürümü doğrulamak için:

nginx -v          # surum bilgisi
systemctl status nginx   # servis durumu (active/running olmali)

Dağıtım depolarındaki Nginx genelde kararlı ve güvenli olsa da, en yeni sürüm özelliklerine (örn. HTTP/3 desteği) ihtiyacınız varsa Nginx’in resmi deposunu (nginx.org) ekleyerek güncel sürümü kurabilirsiniz.

Yapılandırma Dosyalarının Yapısı

Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf dosyasıdır. Burada genel ayarlar tanımlanır ve include direktifiyle site özelinde dosyalar dahil edilir. İki yaygın dizin düzeni vardır; hangi yapıda olduğunuzu bilmek hata aramayı çok kolaylaştırır:

Yapı Dizin Açıklama
Debian/Ubuntu paketi /etc/nginx/sites-available + sites-enabled Siteyi available içine yazıp enabled içine symlink kurarsınız; siteyi açıp kapatmak symlink ile yönetilir.
Resmi nginx.org / RHEL paketi /etc/nginx/conf.d/*.conf Bu dizindeki tüm .conf dosyaları otomatik dahil edilir.

Yapılandırma hiyerarşisi main > http > server > location şeklinde iç içe bağlamlardan (context) oluşur. Bir server bloğu tek bir siteyi (sanal sunucuyu), location ise o site içindeki URL yollarını temsil eder.

Temel Site Yapılandırması

Bir site için yapılandırma dosyası (örn. /etc/nginx/conf.d/site.conf) şöyle olur:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example;
    index index.html;

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

Burada root sitenin dosyalarının bulunduğu dizini, server_name ise domaini belirtir. try_files ise önce istenen dosyayı, sonra dizini dener; ikisi de yoksa 404 döndürür. Birden fazla siteyi aynı sunucuda barındırmak için her site ayrı bir server bloğu olarak tanımlanır.

En Sık Kullanılan Direktifler

Direktif Ne İşe Yarar
listen Dinlenecek port ve protokol (örn. 80, 443 ssl).
server_name Bu bloğa yönlenecek domain adları.
root Dosyaların köklendiği dizin.
index Dizin istendiğinde sunulacak varsayılan dosya.
location Belirli URL yollarına özel kurallar.
return / rewrite Yönlendirme ve URL yeniden yazma.

Performans için Temel Ayarlar

Ana nginx.conf dosyasında birkaç ayar, varsayılanlara göre belirgin bir hız farkı yaratır. Güncel öneri, çalışan süreç (worker) sayısını CPU çekirdek sayısına otomatik eşitlemektir:

# nginx.conf icinde
worker_processes auto;          # cekirdek basina bir worker

events {
    worker_connections 1024;    # her worker'in es zamanli baglanti siniri
}

http {
    sendfile on;                # dosyalari cekirdek seviyesinde, hizli gonder
    tcp_nopush on;
    keepalive_timeout 65;
    server_tokens off;          # surum bilgisini gizle (guvenlik)
}

worker_processes auto ayarı, Nginx’in çekirdek sayısına göre otomatik ölçeklenmesini sağlar. Docker gibi konteyner ortamlarında konteynere atanan çekirdek sayısı ana makineden az olabilir; bu durumda worker_processes değerini konteynere ayrılan çekirdek sayısına elle ayarlamak daha verimlidir.

Gzip Sıkıştırma

Metin tabanlı içerikleri sıkıştırmak, indirme boyutunu ve dolayısıyla sayfa açılış süresini ciddi ölçüde azaltır. http bağlamında:

gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript
           text/xml application/xml text/javascript image/svg+xml;

Zaten sıkıştırılmış olan JPEG/PNG/MP4 gibi dosyaları yeniden sıkıştırmaya çalışmak kazanç sağlamaz; bu yüzden yalnızca metin tabanlı türleri listeye eklemek doğru yaklaşımdır.

HTTPS ve Ücretsiz SSL

Bugün her sitenin HTTPS üzerinden sunulması standarttır; tarayıcılar HTTP siteleri “güvenli değil” olarak işaretler. Ücretsiz SSL sertifikası için Let’s Encrypt (certbot) en yaygın seçimdir:

# Ubuntu/Debian
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot, 443 bloğlu yapılandırmayı otomatik ekler, HTTP’den HTTPS’e yönlendirme kurar ve sertifika yenilemesini zamanlanmış bir görevle (timer/cron) halleder. Elle yapılandırmak isterseniz temel HTTPS bloğu şöyle görünür:

server {
    listen 443 ssl;
    http2 on;
    server_name example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    root /var/www/example;
    index index.html;
}

# HTTP'yi HTTPS'e yonlendir
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Yalnızca TLSv1.2 ve TLSv1.3 protokollerine izin vermek, eski ve güvensiz sürümleri devre dışı bırakır.

Ters Proxy (Reverse Proxy) Yapılandırması

Nginx’in en çok kullanıldığı senaryolardan biri, arka plandaki bir uygulamanın (örn. 3000 portunda çalışan bir Node.js veya Python servisi) önünde durmaktır. Böylece SSL’i Nginx halleder, uygulama yalnızca dahili portta çalışır:

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Buradaki proxy_set_header satırları kritik: arka uygulamanın gerçek ziyaretçi IP’sini (X-Real-IP), orijinal host adını (Host) ve isteğin HTTP mi HTTPS mi olduğunu (X-Forwarded-Proto) doğru görmesini sağlar. Bunlar olmadan uygulama tüm istekleri “127.0.0.1’den geliyor” gibi görür.

Yük Dengeleme (Load Balancing)

Birden fazla arka uç sunucunuz varsa, upstream bloğu ile trafiği dağıtabilirsiniz:

upstream backend {
    server 10.0.0.11:3000;
    server 10.0.0.12:3000;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

Varsayılan dağıtım yöntemi round-robin (sırayla) çalışır; ihtiyaca göre least_conn (en az bağlantılı sunucuya yönlendirme) gibi yöntemler de eklenebilir.

Test ve Yeniden Yükleme

Her değişiklikten sonra yapılandırmayı test edip kesintisiz yeniden yükleyin:

nginx -t                      # yapilandirma sozdizimi testi
sudo systemctl reload nginx   # kesintisiz yeniden yukle

reload aktif bağlantıları kesmez (graceful); restart keser, bu yüzden canlıda reload tercih edin. Aşağıdaki tablo en çok kullanılan komutları özetliyor:

Komut Etkisi Ne Zaman
nginx -t Yapılandırmayı test eder, uygulamaz. Her değişiklikten ÖNCE/sonra.
systemctl reload nginx Yeni yapılandırmayı kesintisiz uygular. Canlı ortamda varsayılan seçim.
systemctl restart nginx Servisi tamamen yeniden başlatır (kısa kesinti). Yalnızca reload yetmediğinde.
systemctl status nginx Servisin çalışıp çalışmadığını gösterir. Sorun teşhisinde.

Dikkat Edilmesi Gerekenler

  • Değişiklikten sonra mutlaka nginx -t ile test edin; hatalı yapılandırma reload ile devreye girmez ve servisi riske atmaz.
  • Ubuntu’da dağıtım paketinde siteler genelde /etc/nginx/sites-available + sites-enabled (symlink) yapısındadır; resmi nginx.org paketinde /etc/nginx/conf.d/ kullanılır.
  • Güvenlik duvarında (ufw/firewalld) 80 ve 443 portlarını açmayı unutmayın.
  • HTTPS için Let’s Encrypt (certbot) ile ücretsiz SSL kurabilirsiniz; sertifika yenilemesinin zamanlanmış görevle çalıştığını doğrulayın.
  • server_tokens off; ile Nginx sürüm bilgisini gizleyin; bu, basit bir güvenlik önlemidir.
  • Log dosyalarını (/var/log/nginx/access.log ve error.log) bir hata anında ilk bakacağınız yer olarak unutmayın.

Nginx’i Nerede Çalıştırmalı?

Nginx’in tüm yapılandırma esnekliğinden yararlanmak için root erişimine ihtiyacınız vardır; bu da paylaşımlı hosting yerine bir VPS veya sunucu gerektirir. Sunucu altyapısı tarafında donanım ve ağ kalitesi performansı doğrudan etkiler.

Alastyr’da hizmetler, İzmir’deki kendine ait (kiralık olmayan), N+1 yedekli, Tier III standartlarında kurulu veri merkezinde barındırılır. AS3188 bağımsız ağı ve Türk Telekom + TurkNet üzerinden 40 Gbit yedekli bağlantısıyla, RIPE NCC üyesi bir altyapı üzerinde çalışırsınız. Dell EMC Unity 650F all-flash depolama ve Intel Xeon Gold işlemciler, Nginx’in olay tabanlı mimarisinin hızını sonuna kadar kullanmanıza imkan tanır. Üstelik ücretsiz SSL, günlük yedekleme, %99.9 uptime ve 7/24 destek standart olarak gelir.

Sıkça Sorulan Sorular

Nginx ücretsiz mi?

Evet, açık kaynaklıdır ve ücretsizdir; ticari sürümü olan Nginx Plus, ek yönetim ve izleme özellikleri sunar ancak çoğu kullanım için açık kaynak sürüm fazlasıyla yeterlidir.

Nginx ile Apache arasındaki fark ne?

Nginx olay tabanlı mimarisiyle yüksek eş zamanlılıkta daha az kaynak tüketir ve daha verimlidir. Apache ise .htaccess ile dizin bazlı yapılandırmaya izin verir; Nginx .htaccess desteklemez, tüm kurallar merkezi yapılandırma dosyasında tanımlanır.

nginx -t komutu ne işe yarar?

Yapılandırma dosyalarının sözdizimini test eder ve hata varsa hangi satırda olduğunu söyler. Yapılandırmayı değiştirdikten sonra reload etmeden önce mutlaka çalıştırılması gereken bir güvenlik adımıdır.

reload mi yoksa restart mi kullanmalıyım?

Canlı ortamda reload tercih edin; yeni yapılandırmayı aktif bağlantıları kesmeden uygular. restart ise servisi tamamen kapatıp açar ve kısa bir kesintiye yol açar; yalnızca reload yetmediğinde kullanın.

Nginx’e ücretsiz SSL nasıl eklerim?

En yaygın yöntem certbot ile Let’s Encrypt sertifikası kurmaktır. certbot --nginx -d alanadi.com komutu sertifikayı kurar, 443 bloğunu otomatik yapılandırır ve yenilemeyi zamanlar.

Nginx ters proxy olarak nasıl çalışır?

location bloğu içinde proxy_pass http://127.0.0.1:PORT; satırıyla istekleri arka plandaki uygulamaya yönlendirir. Gerçek ziyaretçi IP’si ve host bilgisinin korunması için proxy_set_header satırlarını eklemek önemlidir.

worker_processes değerini kaça ayarlamalıyım?

Çoğu durumda worker_processes auto; idealdir; Nginx’i CPU çekirdek sayısına otomatik eşitler. Docker gibi konteyner ortamlarında konteynere ayrılan çekirdek sayısına elle ayarlamak daha verimli olabilir.

Bir sunucuda birden fazla site barındırabilir miyim?

Evet. Her site için ayrı bir server bloğu (sanal sunucu) tanımlarsınız ve server_name ile hangi domainin hangi bloğa gideceğini belirtirsiniz. Bu yapıya “name-based virtual hosting” denir.

Nginx kurmak için paylaşımlı hosting yeterli mi?

Hayır. Nginx’i kendiniz kurup yapılandırmak için root erişimi gerekir; bu da bir VPS veya sunucu gerektirir. Paylaşımlı hosting ortamlarında web sunucusu yapılandırması sağlayıcının kontrolündedir.

Nginx İçin Güçlü Sunucu

Root erişimli, all-flash NVMe depolamalı VPS’lerde Nginx’i istediğiniz gibi kurun ve yapılandırın. İzmir’deki kendi veri merkezimiz, ücretsiz SSL ve 7/24 destekle.

VPS/Sunucu Çözümleri →

Türkiye'nin En Çok Tavsiye Edilen Domain, Hosting ve Bulut Servis Sağlayıcısı
İnternet sitesi Alastyr İnternet Sitesi
Yazı oluşturuldu 511

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön