1. Anasayfa
  2. »
  3. Genel
  4. »
  5. NGINX Nedir? Hangi Amaçla Kullanılır?

NGINX Nedir? Hangi Amaçla Kullanılır?

Verimin Verimin -
714 0

NGINX Nedir?

NGINX, açık kaynaklı bir web sunucusu yazılımıdır ve ters proxy, yük dengeleme ile önbellekleme işlevlerinde kullanılır. HTTPS sunucu özellikleri sunar ve en yüksek performans ile kararlılık hedeflenerek tasarlanmıştır. Ayrıca IMAP, POP3 ve SMTP gibi e-posta iletişim protokolleri için proxy sunucusu olarak da görev yapabilir. 

NGINX Hangi Amaçlarla Kullanılır?

Nginx, düşük bellek tüketimi ve yüksek eşzamanlı işlem kapasitesi sağlamak için geliştirilmiştir. Her web isteği için yeni süreçler oluşturmak yerine, asenkron ve olay tabanlı bir yaklaşım kullanarak tüm istekleri tek bir iş parçacığında yönetir.

Nginx’te bir ana süreç, birden fazla çalışan süreci yönetebilir. Ana süreç çalışanları kontrol ederken, çalışanlar işlemleri yürütür. Asenkron mimarisi sayesinde her istek eşzamanlı olarak işlenebilir ve diğerlerini engellemez.

Nginx’in öne çıkan özelliklerinden bazıları şunlardır:

  • Önbellekleme destekli ters proxy
  • IPv6
  • Yük dengeleme
  • FastCGI desteği ve önbellekleme
  • WebSockets
  • Statik dosyalar, dizin dosyaları ve otomatik indeksleme desteği
  • TLS/SSL ve SNI desteği

Web Sunucusu Olarak Kullanımı

NGINX’in geliştirilme amacı en hızlı web sunucusunu ortaya çıkarmaktı ve bu hedef günümüzde de projenin temel odak noktası olmaya devam ediyor. Web sunucu performansını ölçen karşılaştırmalarda NGINX, Apache ve diğer sunucuların önüne geçmektedir.

NGINX’in ilk sürümünden bu yana web siteleri basit HTML sayfalarından, dinamik ve çok yönlü içeriklere evrilmiştir. NGINX de bu gelişime ayak uydurarak WebSocket, HTTP/2, gRPC ve çeşitli video formatlarının (HDS, HLS, RTMP ve diğerleri) yayınlanmasını destekleyecek şekilde gelişmiştir.

Reverse Proxy Görevi

Proxy kullanımı genellikle yükü birden fazla sunucuya dağıtmak, farklı web sitelerinin içeriklerini tek noktadan sunmak veya HTTP dışındaki protokollerle çalışan uygulama sunucularına istekleri iletmek için tercih edilir.

NGINX bir isteği proxy sunucuya yönlendirdiğinde aşağıdaki adımları izler:

  1. İsteği belirtilen proxy sunucusuna gönderir.
  2. Yanıtı alır.
  3. Yanıtı istemciye geri iletir.

Bir HTTP sunucusuna (başka bir NGINX veya farklı bir sunucu) ya da HTTP dışı bir sunucuya (örneğin PHP veya Python ile geliştirilmiş uygulama sunucuları) uygun protokol aracılığıyla yönlendirme yapılabilir. Desteklenen protokoller arasında FastCGI, uwsgi, SCGI ve memcached bulunur.

proxy_pass yönergesi, HTTP proxy sunucusuna istek göndermek için location bloğu içinde tanımlanır. Bu yapılandırma, isteklerin belirtilen adresteki proxy sunucuya aktarılmasını sağlar. Adresler alan adı veya IP adresi olarak yazılabilir, ayrıca port da eklenebilir.

Eğer adrese bir URI eklenmişse, bu URI istekle eşleşen bölümün yerine geçer. Adres yalnızca sunucu adresiyle belirtilmişse, tam istek URI’si olduğu gibi aktarılır (gerekirse değiştirilmiş şekilde).

HTTP dışındaki sunuculara yönlendirme yapılırken uygun yönerge kullanılmalıdır:

  • fastcgi_pass FastCGI sunucusuna istek gönderir.
  • uwsgi_pass uwsgi sunucusuna istek gönderir.
  • scgi_pass SCGI sunucusuna istek gönderir.
  • memcached_pass memcached sunucusuna istek gönderir.

Bu senaryolarda adreslerin yazım kuralları farklı olabilir ve sunucuya ek parametreler göndermek gerekebilir. Ayrıca, proxy_pass yönergesi birden fazla sunucunun bulunduğu gruplara da istek iletebilir. Bu durumda istekler, belirtilen yönteme göre sunucular arasında dağıtılır.

Load Balancer (Yük Dengeleyici) Olarak Kullanımı

Birden fazla uygulama örneği arasında yük dengeleme, kaynak kullanımını optimize etmek, veri akışını en üst düzeye çıkarmak, gecikmeleri azaltmak ve hata toleranslı yapılandırmalar sağlamak için yaygın şekilde kullanılan bir tekniktir.

NGINX, trafik akışını birden fazla uygulama sunucusuna dağıtmak için oldukça verimli bir HTTP yük dengeleyici olarak kullanılabilir. Bu sayede web uygulamalarının performansı, ölçeklenebilirliği ve güvenilirliği artırılır.

Yük Dengeleme Yöntemleri

NGINX’in desteklediği yük dengeleme yöntemleri şunlardır:

  • round-robin — İstekler uygulama sunucularına sırayla dağıtılır.
  • least-connected — Sonraki istek, en az aktif bağlantıya sahip sunucuya yönlendirilir.
  • ip-hash — İstemcinin IP adresine dayalı olarak bir hash fonksiyonu çalıştırılır ve hangi sunucunun seçileceği bu şekilde belirlenir.

Varsayılan Yük Dengeleme Yapılandırması

En basit yük dengeleme yapılandırması aşağıdaki gibidir:

http {

upstream myapp1 {

     server srv1.example.com;

     server srv2.example.com;

     server srv3.example.com;

}

server {

     listen 80;

     location / {

         proxy_pass http://myapp1;

     }

}

}

Yukarıdaki örnekte aynı uygulamanın srv1–srv3 üzerinde çalışan üç örneği vardır. Yük dengeleme yöntemi özel olarak belirtilmediğinde, varsayılan olarak round-robin kullanılır. Tüm istekler myapp1 sunucu grubuna aktarılır ve NGINX HTTP yük dengelemesini uygular.

NGINX’te ters proxy uygulaması; HTTP, HTTPS, FastCGI, uwsgi, SCGI, memcached ve gRPC için yük dengeleme desteği içerir. TTP yerine HTTPS için yapılandırma yapılacaksa sadece protokol kısmında https kullanılır. FastCGI, uwsgi, SCGI, memcached veya gRPC için yük dengeleme yapılacaksa sırasıyla fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass ve grpc_pass yönergeleri kullanılır.

Least Connected Yük Dengeleme

Diğer bir yöntem olan least-connected, bazı isteklerin daha uzun sürmesi durumunda yükün adil şekilde dağıtılmasını sağlar. Bu yöntemde NGINX, yoğun olarak çalışan bir sunucuya fazla yük bindirmek yerine, yeni gelen istekleri daha az yoğun olan bir sunucuya yönlendirir.

NGINX’te least-connected yöntemi, sunucu grubu yapılandırmasına least_conn yönergesi eklendiğinde etkinleşir:

upstream myapp1 {

least_conn;

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

}

Oturum Kalıcılığı (Session Persistence)

Round-robin veya least-connected yöntemlerinde, aynı istemciden gelen ardışık istekler farklı sunuculara yönlendirilebilir. Yani istemcinin her zaman aynı sunucuya bağlanacağı garanti edilmez.

Eğer istemcinin belirli bir uygulama sunucusuna sabitlenmesi (yani oturumunun “sticky” olması) gerekiyorsa, ip-hash yöntemi kullanılabilir. Bu yöntemde istemcinin IP adresi hash anahtarı olarak kullanılır ve istemciden gelen tüm istekler aynı sunucuya yönlendirilir. Yalnızca ilgili sunucu devre dışı kaldığında istemci başka bir sunucuya yönlendirilir.

ip-hash yöntemini etkinleştirmek için yapılandırmaya ip_hash yönergesi eklenir:

upstream myapp1 {

ip_hash;

server srv1.example.com;

server srv2.example.com;

server srv3.example.com;

}

Ağırlıklı Yük Dengeleme (Weighted Load Balancing)

NGINX’te yük dengeleme algoritmalarını daha esnek hale getirmek için sunuculara ağırlık değeri atanabilir.

Önceki örneklerde sunucu ağırlıkları belirtilmediğinden tüm sunucular eşit kabul edilmiştir. Özellikle round-robin yönteminde bu, isteklerin sunucular arasında eşit dağılması anlamına gelir.

Sunucuya weight parametresi atanırsa, bu değer yük dengeleme kararında dikkate alınır:

upstream myapp1 {

server srv1.example.com weight=3;

server srv2.example.com;

server srv3.example.com;

}

Bu yapılandırmada gelen her 5 isteğin 3’ü srv1’e, 1’i srv2’ye, 1’i de srv3’e yönlendirilir.

Content Caching (Önbellekleme) İşlevi

Önbellekleme etkinleştirildiğinde, F5 NGINX Plus yanıtları disk üzerinde saklar ve aynı içerik için her defasında proxy üzerinden sunucuya gitmek yerine bu yanıtları doğrudan istemcilere gönderir.

NGINX Plus’ın önbellekleme yetenekleri hakkında daha fazla bilgi edinmek için “Content Caching with NGINX” başlıklı web seminerini izleyebilir ve dinamik içerik önbellekleme, önbellek temizleme (cache purging) ve gecikmeli önbellekleme gibi özelliklerin ayrıntılı incelemesini öğrenebilirsiniz.

Yanıtların Önbelleğe Alınmasını Etkinleştirme

Önbellekleme işlemini etkinleştirmek için en üst düzey http {} bağlamına proxy_cache_path yönergesi eklenir. İlk zorunlu parametre, önbelleğe alınan içeriğin saklanacağı dosya sistemi yoludur. keys_zone parametresi ise önbelleğe alınan öğelerin metaverilerini tutmak için kullanılan paylaşımlı bellek bölgesinin adını ve boyutunu belirtir:

http {

# …

proxy_cache_path /data/nginx/cache keys_zone=mycache:10m;

}

Daha sonra, yanıtların önbelleğe alınmasını istediğiniz bağlamda (protokol türü, sanal sunucu veya location) proxy_cache yönergesi eklenir. Burada, proxy_cache_path yönergesindeki keys_zone parametresiyle tanımlanan bölge adı kullanılmalıdır (bu örnekte mycache):

http {

# …

proxy_cache_path /data/nginx/cache keys_zone=mycache:10m;

server {

     proxy_cache mycache;

     location / {

         proxy_pass http://localhost:8000;

     }

}

}

Burada dikkat edilmesi gereken nokta, keys_zone parametresiyle belirlenen boyutun önbelleğe alınan yanıtların toplam boyutunu sınırlamamasıdır. Yanıtların kendisi dosya sistemindeki özel dosyalarda, metaverileriyle birlikte saklanır. Önbelleğe alınan yanıtların toplam miktarını sınırlamak için proxy_cache_path yönergesine max_size parametresi eklenebilir. Ancak, önbelleğe alınan veri miktarı belirli durumlarda bu sınırı geçici olarak aşabilir.

Güvenlik Duvarı ve HTTP Yönlendirme Kuralları

NGINX geleneksel anlamda bir güvenlik duvarı değildir ancak IP izin/engelleme (whitelisting/blacklisting) ve istek oranı sınırlaması (rate limiting) gibi kurallar uygulanarak güvenlik duvarı benzeri işlevler yerine getirilebilir. Gerçek ağ tabanlı güvenlik duvarı kontrolü için ise genellikle UFW veya iptables gibi araçlar NGINX ile birlikte kullanılır.

NGINX Erişim Kontrolü (Güvenlik Duvarı Benzeri Kurallar)

  • allow ve deny yönergeleri kullanılarak sunucu veya location blokları içinde belirli IP adreslerine ya da IP aralıklarına erişim kısıtlaması uygulanabilir.
  • Örneğin, yalnızca belirli bir IP’ye izin verilip diğerlerinin engellenmesi:

location /admin {

allow 192.168.1.1;

deny all;

}

Bu yapılandırma, seçilen yollar veya tüm site için HTTP seviyesinde erişim kontrolü sağlar.

NGINX’te HTTP Yönlendirme Kuralları

  • En yaygın kullanım, HTTP trafiğini HTTPS’e yönlendirmektir:

server {

listen 80;

server_name example.com www.example.com;

return 301 https://$host$request_uri;

}

  • Bu yapılandırma ile 80 numaralı porttaki tüm HTTP istekleri, 443 numaralı porttaki HTTPS’e yönlendirilir.

UFW ile NGINX Güvenlik Duvarı Yapılandırması

  • NGINX kurulduktan sonra, açık portları yönetmek için genellikle UFW (Uncomplicated Firewall) kullanılır.
  • Web sunucuları için gerekli portları açmak için şu komutlar kullanılabilir:

sudo ufw allow ‘Nginx HTTP’   # port 80 için

sudo ufw allow ‘Nginx HTTPS’  # port 443 için

sudo ufw allow OpenSSH    # SSH erişimi için, bağlantı kaybını önlemek amacıyla

sudo ufw enable

sudo ufw status

NGINX’in SEO Açısından Önemi

NGINX’in SEO’ya katkısı, esas olarak HTTP/2 protokolünü verimli bir şekilde desteklemesinden kaynaklanır. HTTP/2; web sitesi hızını, mobil performansı, güvenliği ve tarama (crawl) verimliliğini artırarak SEO açısından önemli avantajlar sağlar.

NGINX ile Hangi Teknolojiler Uyumlu Çalışır?

NGINX oldukça esnek bir yapı sunarak birçok modern web ve teknolojiyle uyumlu çalışır. Örneğin, HTTP/2 desteği ile birlikte SSL/TLS (HTTPS) sertifikalarıyla entegrasyonu sağlar. Ayrıca, PHP-FPM, Node.js, Python WSGI uygulamaları gibi arka uç uygulamalarla proxy ve yük dengeleme yapabilir. Ek olarak, API sunucuları, mikroservisler, Load Balancer çözümleri gibi yapıların önünde ters proxy olarak da kullanılabilir. Redis, Memcached gibi önbellekleme sistemleri ise hız ve performans optimizasyonuna destek olur.

NGINX Nasıl Kurulur?

Türkiye’nin en güvenilir hosting sağlayıcılarından olan verimin.com.tr olarak yazımızın bu kısmında, Linux üzerinde NGINX kurulumunu nasıl yapacağınızı anlatmaktayız:

Öncelikle Linux makinenizi açın ve aşağıdaki komutla güncelleme işlemi yapın:

  •         sudo apt-get update

Ardından aşağıdaki komutu çalıştırın:: 

  •         sudo apt-get install nginx

Daha sonra güvenlik duvarını etkinleştirin: 

  •         sudo ufw enable

NGINX’in kurulduğunu doğrulamak için aşağıdaki komutu çalıştırın:

  •         nginx -v

NGINX’in çalışıp çalışmadığını öğrenmek için aşağıdaki komutu çalıştırabilirsiniz:

  •         sudo ufw status

Bu komutun çıktısı şu şekilde olmalıdır:

  •         status: active

Sunucunun sorunsuz çalışıp çalışmadığını kontrol etmek için şu komutu girin:

  •         sudo systemctl status nginx

Her şey doğru şekilde çalışıyorsa başarılı bir durum mesajı göreceksiniz.

NGINX ile Yaygın Kullanım Senaryoları

NGINX yapılandırması aşağıdaki örneklerden biri veya birkaçı için yapılandırılabilir:

  • Web sunucusu – Performans ve ölçeklenebilirlik avantajı sayesinde en yaygın kullanım şeklidir.
  • Reverse proxy sunucusu – İstemciden gelen isteği uygun arka uç (back-end) sunucusuna yönlendirir.
  • Yük dengeleyici – Ağ trafiğini manuel müdahale olmadan otomatik şekilde dağıtır.
  • API Gateway – İstek yönlendirme, kimlik doğrulama ve hata yönetimi için kullanılır.
  • Web uygulaması güvenlik duvarı – Gelen ve giden ağ isteklerini filtreleyerek uygulamayı korur.
  • Önbellek – Verileri saklayarak sonraki isteklerde daha hızlı erişim sağlar.
  • DDoS saldırılarına karşı koruma – Dağıtılmış hizmet engelleme saldırılarına karşı güvenlik sağlar.
  • Kubernetes (K8s) – Konteynerleştirilmiş uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatik hale getirir.
  • Sidecar proxy – Yanında çalıştığı konteynere gelen ve giden trafiği yönlendirir.

NGINX Avantajları ve Dezavantajları

Başlıca NGNIX avantajları aşağıdaki şekildedir:

  • Yüksek Performans ve Ölçeklenebilirlik: Event-driven mimarisi sayesinde çok sayıda eşzamanlı bağlantıyı düşük kaynak kullanımı ile işleyebilir.
  • Düşük Bellek Tüketimi: NGINX, belleği verimli kullanır ve sistem kaynaklarını az tüketir, bu da özellikle düşük donanımlı sunucularda performansı artırır.
  • Statik İçerik Sunumunda Üstünlük: Görseller, CSS, JavaScript gibi statik dosyaları hızlı bir şekilde sunar.
  • Yük Dengeleme ve Ters Proxy: Doğal olarak yük dengeleme ve ters proxy özelliklerine sahiptir, bu da microservis yapıları ve büyük web uygulamaları için oldukça uygundur.
  • Gelişmiş SSL/TLS Desteği: Güvenli bağlantılar için gelişmiş SSL/TLS desteği sunar.
  • SEO’ya Yardımcı: HTTP/2 gibi modern protokolları destekleyerek web sitesi hızını artırır, bu da SEO açısından avantaj sağlar.

Avantajlarına nazaran öne çıkan NGNIX dezavantajları aşağıdakilerdir:

  • Sınırlı Modül Desteği: Apache’ye kıyasla uzantı ve modül desteği daha sınırlıdır, bazı özel ihtiyaçlarda yeterli olmayabilir.
  • Yapılandırma Karmaşıklığı: Konfigürasyonu ve yönetimi Apache’ye göre biraz daha karmaşıktır, bu da yeni başlayanlar için zorluk yaratabilir.
  • Topluluk Desteği: Apache’ye göre daha küçük bir kullanıcı ve topluluk desteği vardır.
  • Dinamik İçerik İşleme: PHP dışındaki bazı dinamik içerik işleme kapasitesi Apache kadar güçlü değildir, ancak PHP-FPM ile bu eksiklik giderilebilir.
  • Sınırlı Windows Desteği: Linux ve Unix sistemlerde çok daha yaygın ve performanslı çalışır, Windows desteği sınırlıdır.

 

 

İlgili Yazılar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir