Nginx Yapılandırma İpuçları ve Püf Noktaları
Nginx Nedir?
Nginx, Igor Sysoev tarafından geliştirilen ve 2004 yılında ilk kez yayınlanan açık kaynaklı bir web sunucusudur. Başlangıçta yüksek eşzamanlılık gerektiren web sitelerindeki C10K sorununu (tek bir sunucunun aynı anda 10.000'den fazla bağlantıyı yönetme zorluğu) çözmek amacıyla tasarlanmıştır. Olay tabanlı (event-driven), asenkron bir mimariye sahip olması sayesinde, geleneksel iş parçacığı (thread) tabanlı sunuculara kıyasla çok daha az bellek ve CPU kaynağı tüketir. Bu mimari, Nginx'in aynı anda binlerce HTTP isteğini verimli bir şekilde işlemesini sağlar, bu da onu yüksek trafikli web siteleri ve API'ler için ideal bir seçim haline getirir. Nginx, sadece bir web sunucusu olmanın ötesinde, ters proxy, yük dengeleyici, posta proxy'si ve HTTP önbelleği gibi çeşitli ağ hizmetlerini de sunabilir. Özellikle dinamik içerik üretimi için PHP-FPM, Python WSGI uygulamaları veya Node.js gibi arka uç uygulamalarına istekleri yönlendirmede ters proxy olarak yaygın bir şekilde kullanılır. Yapılandırması, metin tabanlı yapılandırma dosyaları aracılığıyla gerçekleştirilir ve bu dosyalar, sunucunun davranışını, sanal hostları, SSL/TLS ayarlarını, önbellekleme politikalarını ve güvenlik kurallarını tanımlar. Nginx'in esnek yapısı, çeşitli senaryolara uyum sağlamasına olanak tanır ve bu da onu günümüzdeki modern web altyapılarının vazgeçilmez bir bileşeni yapmaktadır.
Nginx Nasıl Çalışır?
Nginx'in çalışma prensibi, olay tabanlı (event-driven) ve asenkron mimarisine dayanmaktadır. Bu, geleneksel Apache gibi iş parçacığı (thread) tabanlı sunuculardan temel bir farktır. Geleneksel modellerde, her bir istemci bağlantısı için ayrı bir iş parçacığı veya işlem (process) oluşturulur. Bu yaklaşım, çok sayıda eşzamanlı bağlantı olduğunda önemli bellek ve CPU kaynakları tüketebilir. Nginx ise, bu sorunu çözmek için farklı bir yöntem izler:
- Ana İşlemci (Master Process): Nginx başlatıldığında, bir ana işlemci (master process) devreye girer. Bu işlemci, yapılandırma dosyasını okur, gerekli kaynakları tahsis eder ve işçi işlemcileri (worker processes) yönetir. Ana işlemci, işçi işlemcilerin yaşam döngüsünü kontrol eder, hataları tespit eder ve gerektiğinde işçi işlemcileri yeniden başlatır.
- İşçi İşlemciler (Worker Processes): Ana işlemci tarafından başlatılan işçi işlemciler, gelen HTTP isteklerini gerçek zamanlı olarak ele alır. Her bir işçi işlemci, tek bir iş parçacığı kullanarak birden fazla bağlantıyı yönetebilir.
- Olay Döngüsü (Event Loop): Her işçi işlemci, bir olay döngüsü (event loop) çalıştırır. Bu döngü, işletim sisteminden gelen olayları (örneğin, yeni bir bağlantı isteği, veri okuma/yazma tamamlanması) sürekli olarak dinler.
- Asenkron İşleme: Bir istek geldiğinde, işçi işlemci bu isteği alır ve işleme alır. Eğer işlemci, bir I/O (Giriş/Çıkış) işlemi beklemek zorundaysa (örneğin, diskten bir dosya okumak veya bir arka uç sunucusundan yanıt beklemek), bu I/O işlemini başlatır ve işletim sistemine geri döner. İşlemci, bu I/O işlemi tamamlanana kadar başka istekleri işlemeye devam eder. I/O işlemi tamamlandığında, işletim sistemi ilgili işçi işlemciye bir bildirim gönderir ve işlemci, işlemeyi kaldığı yerden devam ettirir. Bu asenkron yapı, işçi işlemcinin hiçbir zaman boşta beklemesini engeller ve kaynakların maksimum verimlilikle kullanılmasını sağlar.
- Yapılandırma Dosyaları: Nginx'in davranışı, `nginx.conf` gibi yapılandırma dosyaları aracılığıyla yönetilir. Bu dosyalar, sunucu blokları (server blocks) ile sanal hostları tanımlar, hangi portların dinleneceğini belirtir, dosya yollarını, SSL/TLS sertifikalarını, önbellekleme kurallarını ve hata günlüklerini yapılandırır.
Bu mimari sayesinde Nginx, düşük kaynak tüketimiyle yüksek performans sunar ve özellikle statik içerik sunumu, ters proxy ve yük dengeleme gibi görevlerde üstün bir performans sergiler.
Nginx Yapılandırma Temelleri
Nginx'in yapılandırma dosyaları, hiyerarşik bir yapıya sahiptir ve ana yapılandırma dosyası genellikle `/etc/nginx/nginx.conf` konumunda bulunur. Bu dosya, genel ayarları içerir ve genellikle diğer yapılandırma dosyalarını dahil etmek için kullanılır. Nginx yapılandırmasının temel öğeleri şunlardır:
- Ana Direktifler (Main Directives): Bu direktifler, ana işlemci (master process) ve işçi işlemciler (worker processes) ile ilgili genel ayarları tanımlar. Örneğin, `worker_processes` işçi işlemcilerin sayısını belirlerken, `worker_connections` her bir işçi işlemcinin aynı anda kaç bağlantıyı yönetebileceğini belirler.
- Olay Direktifleri (Events Directives): Bu blok, işçi işlemcilerin bağlantıları nasıl ele alacağını kontrol eden ayarları içerir. `worker_connections` bu blok içinde yer alır.
- HTTP Direktifi (HTTP Directive): Tüm HTTP ile ilgili ayarlar bu blok içinde yer alır. Bu blok, `server` bloklarını içerebilir.
- Sunucu Direktifi (Server Directives): Her bir sanal sunucu (virtual host) için ayrı bir `server` bloğu oluşturulur. Bu bloklar, gelen istekleri hangi alan adına (domain name) veya IP adresine göre yönlendireceğini ve bu istekler için hangi ayarların geçerli olacağını belirtir.
- Konum Direktifi (Location Directives): `server` blokları içinde yer alan `location` blokları, belirli URL yolları için isteklerin nasıl işleneceğini tanımlar. Örneğin, belirli bir dizindeki statik dosyaları sunmak veya bir API isteğini belirli bir arka uca yönlendirmek için kullanılabilir.
Nginx yapılandırmasında yaygın olarak kullanılan bazı önemli direktifler şunlardır:
listen: Sunucunun hangi portu ve/veya IP adresini dinleyeceğini belirtir.server_name: Sanal sunucunun hangi alan adlarına hizmet vereceğini tanımlar.root: İsteklerin hangi dizinden sunulacağını belirtir.index: Belirtilen dizinde varsayılan olarak hangi dosyanın sunulacağını belirtir (örn. `index.html`, `index.php`).try_files: Belirtilen dosyaları veya dizinleri sırayla dener ve ilk bulduğunu sunar.proxy_pass: Gelen isteği belirtilen arka uç sunucusuna yönlendirir.ssl_certificatevessl_certificate_key: SSL/TLS sertifikası ve özel anahtarının yolunu belirtir.expires: İstemci tarayıcısının ve ara sunucuların dosyaları ne kadar süreyle önbellekte tutacağını belirler.gzip: HTTP sıkıştırmasını etkinleştirir.
Nginx yapılandırmasını anlamak, performans optimizasyonu, güvenlik ve esneklik açısından kritik öneme sahiptir. Daha derinlemesine bilgi için Apache vs Nginx Hangisi Daha İyi? makalesini inceleyebilirsiniz.
Nginx Yapılandırma İpuçları ve Püf Noktaları
Nginx'in tam potansiyelini ortaya çıkarmak ve web sunucusu performansını optimize etmek için aşağıdaki ipuçları ve püf noktaları faydalı olacaktır:
- İşçi İşlemci Sayısını Ayarlama: `worker_processes` direktifi, sunucunuzun CPU çekirdek sayısına göre ayarlanmalıdır. Genellikle CPU çekirdek sayısı kadar veya bir fazlası iyi bir başlangıç noktasıdır. Örneğin, 4 çekirdekli bir sunucuda `worker_processes 4;` veya `worker_processes auto;` (Nginx'in otomatik algılaması için) kullanılabilir.
- Bağlantı Limitlerini Optimize Etme: `worker_connections` direktifi, her bir işçi işlemcinin aynı anda kaç bağlantıyı yönetebileceğini belirler. Bu değeri, sunucunuzun RAM'i ve genel sistem kaynakları göz önünde bulundurularak artırabilirsiniz. Ancak, işletim sistemi dosya tanıtıcı (file descriptor) limitlerini de kontrol etmeniz gerekir.
- Dosya Tanıtıcı Limitlerini Yükseltme: Nginx'in yüksek bağlantıları yönetebilmesi için, işletim sisteminin dosya tanıtıcı (file descriptor) limitlerinin yeterli olduğundan emin olun. `/etc/security/limits.conf` dosyasını düzenleyerek bu limitleri artırabilirsiniz.
- Statik Dosyalar İçin Önbellekleme: Tarayıcı önbelleğini etkinleştirmek için `expires` direktifini kullanın. Bu, kullanıcının tekrar aynı sayfayı ziyaret ettiğinde sunucuya daha az istek gitmesini sağlar. Örneğin, `expires 30d;` ile dosyaların 30 gün boyunca önbellekte tutulmasını sağlayabilirsiniz.
- Gzip Sıkıştırmasını Etkinleştirme: `gzip on;` direktifini kullanarak HTTP sıkıştırmasını etkinleştirin. Bu, sunucudan istemciye gönderilen verinin boyutunu önemli ölçüde azaltarak sayfa yükleme sürelerini hızlandırır. Ayrıca `gzip_types` ile sıkıştırılacak MIME türlerini belirtebilirsiniz.
- Sunucu Adını Doğru Yapılandırma: `server_name` direktifini kullanarak sanal sunucularınızı doğru alan adlarına bağlayın. Joker karakterler (`_` veya `*`) ve düzenli ifadeler (regular expressions) de kullanılabilir.
- Hata Sayfalarını Özelleştirme: `error_page` direktifi ile varsayılan hata sayfaları yerine kendi özel hata sayfalarınızı sunabilirsiniz. Bu, kullanıcı deneyimini iyileştirir.
- Ters Proxy Ayarlarını Optimize Etme: Eğer Nginx'i ters proxy olarak kullanıyorsanız, `proxy_set_header` direktiflerini kullanarak arka uç sunucusuna gerekli başlıkları (örneğin, `Host`, `X-Real-IP`, `X-Forwarded-For`) doğru şekilde ilettiğinizden emin olun. Bu, arka uç uygulamanızın istemci bilgilerini doğru almasını sağlar.
- SSL/TLS Yapılandırmasını Güvenli Hale Getirme: Güçlü şifreleme algoritmaları ve protokolleri kullanın. `ssl_protocols` ve `ssl_ciphers` direktiflerini güncel ve güvenli değerlerle yapılandırın.
- Erişim ve Hata Günlüklerini Yönetme: `access_log` ve `error_log` direktifleri ile günlük dosyalarının konumunu ve formatını belirleyin. Bu günlükler, sorun giderme ve performans takibi için hayati önem taşır. Günlük dosyalarının boyutunu ve rotasyonunu yönetmek için `log_format` ve `access_log`'un rotasyon özelliklerini kullanabilirsiniz.
- Keep-Alive Bağlantılarını Ayarlama: `keepalive_timeout` direktifi ile kalıcı bağlantıların ne kadar süreyle açık tutulacağını belirleyin. Bu, aynı istemcinin tekrar tekrar bağlantı kurma yükünü azaltır.
- HTTP/2 ve HTTP/3 Kullanımı: Modern web performansını artırmak için HTTP/2 ve HTTP/3 protokollerini etkinleştirin. Nginx'in güncel sürümleri bu protokolleri desteklemektedir. `listen 443 ssl http2;` gibi direktiflerle etkinleştirebilirsiniz.
- Lua Modülü ile Gelişmiş İşlevsellik: Nginx'in Lua modülü (ngx_lua), Nginx yapılandırma dosyalarında karmaşık mantık çalıştırmanıza, önbellekleme stratejilerini özelleştirmenize ve güvenlik kurallarını daha esnek bir şekilde uygulamanıza olanak tanır.
- Web Sunucusu Kurulumu: Nginx'i kurarken ve ilk yapılandırmasını yaparken dikkatli olmak önemlidir. Detaylı kurulum adımları için Web Sunucusu Kurulumu makalesine başvurabilirsiniz.
Hız Yapılandırması ve Optimizasyon
Nginx'in hızını maksimize etmek, web sitesi performansını doğrudan etkiler. Aşağıdaki teknikler, Nginx'in hızını ve verimliliğini artırmaya odaklanır:
- Statik Dosya Sunumu: Nginx, statik dosyaları (HTML, CSS, JavaScript, resimler) sunma konusunda son derece verimlidir. Dinamik içerik işleme yükünü arka uç uygulamalarına bırakarak, Nginx'in bu statik dosyaları doğrudan ve hızlı bir şekilde sunmasını sağlamak en iyi yaklaşımdır. `location` bloklarında `try_files` direktifini kullanarak dosyaların varlığını kontrol etmek ve ardından `sendfile on;` ile işletim sisteminin dosya transferini optimize etmesini sağlamak önemlidir.
- Gzip ve Brotli Sıkıştırması: Gzip, yaygın olarak kullanılan bir sıkıştırma yöntemidir ve `gzip on;` ile kolayca etkinleştirilebilir. Daha modern ve etkili bir sıkıştırma yöntemi olan Brotli'yi de destekleyebilirsiniz. Brotli, özellikle metin tabanlı verilerde daha iyi sıkıştırma oranları sunar. Nginx'in Brotli modülünü derlemeniz veya yüklü olduğundan emin olmanız gerekir.
- Tarayıcı Önbellekleme: `expires` direktifi ile uygun önbellekleme başlıklarını ayarlamak, istemci tarayıcısının sık kullanılan dosyaları yerel olarak saklamasını sağlar. Bu, tekrar ziyaretlerde sayfa yükleme süresini önemli ölçüde azaltır. Farklı dosya türleri için farklı önbellekleme süreleri tanımlamak da mümkündür.
- HTTP/2 ve HTTP/3 Protokolleri: HTTP/2, tek bir TCP bağlantısı üzerinden birden çok isteği paralel olarak işleyerek (multiplexing) gecikmeyi azaltır. HTTP/3 ise, UDP tabanlı QUIC protokolünü kullanarak TCP'nin bazı darboğazlarını aşar. Nginx'in güncel sürümlerinde bu protokolleri etkinleştirmek, özellikle çok sayıda küçük dosyanın olduğu sayfalarda performansı artırır.
- Bağlantı Yönetimi (Keep-Alive): `keepalive_timeout` direktifi, istemci ile sunucu arasındaki TCP bağlantısının açık tutulduğu süreyi belirler. Bu, her istek için yeni bir bağlantı kurulması ihtiyacını azaltarak performansı iyileştirir.
- Önbellekleme (Caching): Nginx, hem istemci tarafı önbelleklemenin yanı sıra kendi sunucu tarafı önbellekleme mekanizmalarına da sahiptir. `proxy_cache` direktifleri kullanılarak, dinamik içeriklerin veya sık erişilen verilerin Nginx belleğinde veya diskte önbelleğe alınması sağlanabilir. Bu, arka uç sunucularına olan yükü azaltır ve yanıt sürelerini iyileştirir.
- Gereksiz Modülleri Devre Dışı Bırakma: Nginx'i derlerken veya yapılandırırken, yalnızca ihtiyaç duyduğunuz modülleri etkinleştirmek, Nginx'in genel performansını ve bellek kullanımını optimize edebilir.
- DNS Çözümleme Önbelleği: Eğer Nginx sık sık farklı alan adlarına istek yönlendiriyorsa, `resolver` direktifi ve ilgili ayarlar (örneğin, `resolver_timeout`) ile DNS çözümleme sonuçlarını önbelleğe alarak gecikmeyi azaltabilirsiniz.
Güvenlik Yapılandırması ve Optimizasyon
Nginx'i güvenli hale getirmek, web uygulamanızın bütünlüğünü ve kullanıcı verilerini korumak için kritik öneme sahiptir. Aşağıdaki güvenlik ayarları ve ipuçları, Nginx sunucunuzun güvenliğini artırmaya yardımcı olacaktır:
- SSL/TLS Yapılandırması:
- Güçlü şifreleme algoritmaları ve protokolleri kullanın. `ssl_protocols TLSv1.2 TLSv1.3;` gibi güncel protokolleri tercih edin.
- Güçlü şifreleme setleri (ciphers) belirleyin. `ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';` gibi güvenli şifreleri kullanın.
- SSL sertifikanızı düzenli olarak güncelleyin ve Let's Encrypt gibi ücretsiz ve otomatik sertifika yenileme hizmetlerini kullanmayı düşünün.
- HSTS (HTTP Strict Transport Security) başlığını etkinleştirerek tarayıcıların yalnızca HTTPS üzerinden bağlanmasını zorunlu kılın. `add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;" always;`
- Gereksiz Sunucu Bilgilerini Gizleme: `server_tokens off;` direktifini kullanarak HTTP yanıt başlıklarında Nginx sürüm bilgisinin gösterilmesini engelleyin. Bu, potansiyel saldırganların bilinen güvenlik açıklarından yararlanmasını zorlaştırır.
- Erişim Kontrolü:
- Belirli IP adreslerinden veya ağlardan gelen istekleri engellemek veya izin vermek için `allow` ve `deny` direktiflerini kullanın. Örneğin, `deny 192.168.1.1;` belirli bir IP'yi engeller.
- Belirli dizinlere veya dosyalara erişimi kısıtlamak için `location` bloklarında bu direktifleri kullanın.
- Hatalı İstekleri Engelleme: Güvenlik duvarı (firewall) veya Nginx'in kendisi aracılığıyla bilinen kötü niyetli istek kalıplarını engellemek için `limit_req` ve `limit_conn` gibi modülleri kullanarak belirli bir IP adresinden gelen istek hızını veya eşzamanlı bağlantı sayısını sınırlayın. Bu, DoS (Denial of Service) saldırılarına karşı bir önlem olarak hizmet eder.
- Güvenlik Başlıklarını Ayarlama: `add_header` direktifini kullanarak çeşitli güvenlik başlıklarını (örneğin, `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy`) ekleyin. Bu başlıklar, tarayıcıları belirli saldırı türlerine (örneğin, XSS, clickjacking) karşı korumaya yardımcı olur.
- Gelişmiş Güvenlik Modülleri: Mod_security gibi Web Application Firewall (WAF) çözümlerini Nginx ile entegre ederek daha gelişmiş tehditlere karşı koruma sağlayabilirsiniz.
- Günlük Kayıtlarının İzlenmesi: Erişim ve hata günlüklerini düzenli olarak izleyerek şüpheli aktiviteleri tespit edin. Otomatik analiz araçları veya SIEM (Security Information and Event Management) sistemleri kullanarak günlükleri analiz edebilirsiniz.
- Dosya İzinleri: Nginx'in çalıştığı kullanıcı (genellikle `www-data` veya `nginx`) için dosya ve dizin izinlerini olabildiğince kısıtlayın. Nginx'in yalnızca okuma iznine sahip olması gereken dosyalara yazma izni vermeyin.
- Güncel Kalma: Nginx'i ve ilişkili tüm yazılımları (işletim sistemi, PHP, veritabanı vb.) düzenli olarak güncelleyin. Güvenlik açıkları genellikle yamalanmış sürümlerde giderilir.
2026 Sektör Verileri ve İstatistikler
Nginx'in web sunucusu pazarındaki yeri ve önemi, güncel sektör verileriyle de desteklenmektedir:
W3Techs 2026 verilerine göre, Nginx, tüm web sitelerinin yaklaşık %30'unda kullanılmaktadır. Bu oran, Nginx'i pazar lideri Apache'nin hemen ardından en popüler ikinci web sunucusu yapmaktadır. Statista 2026 raporuna göre, bulut bilişim ve web altyapısı hizmetlerine olan talebin artmasıyla birlikte, yüksek performanslı web sunucularına olan ihtiyaç da paralel olarak yükselmektedir. Cloudflare Radar 2026 verilerine göre, web trafiğinin büyük bir kısmı (%70'ten fazlası) mobil cihazlardan gelmektedir ve bu durum, hızlı yanıt süreleri sunan Nginx gibi sunucuların önemini daha da artırmaktadır. Netcraft 2026 araştırmasına göre, web sunucusu pazarında Nginx'in payı istikrarlı bir şekilde artış göstermeye devam etmektedir.
İlgili Konular
Nginx yapılandırması ve web sunucuları hakkında daha fazla bilgi edinmek için aşağıdaki makalelerimize göz atabilirsiniz:

