Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Web Server, Application Server ve Reverse Proxy: Bir HTTP İsteği Uygulamana Nasıl Ulaşır?
Kestrel hem web server hem application server; reverse proxy ise isteği karşılayıp arkadaki uygulamaya ileten, TLS termination, statik dosya, compression, buffering ve load balancing'i üstlenen katman. Aynı isteği önce doğrudan Kestrel'e, sonra Nginx üzerinden gönderip uygulamanın gördüğü IP'yi, header'ları ve Angular deep link davranışını karşılaştırıyor, beş hosting topolojisini yan yana koyuyoruz.
Nginx Temelleri: Kurulum, nginx.conf Yapısı, server ve location Block'ları
Nginx'i nginx.org deposundan kurmak güncel stable dalı (1.30) verir; Ubuntu 24.04'ün paketi 1.24'te kalıyor. Master ve worker process'leri, nginx.conf context'lerini, default_server ile bilinmeyen host'u reddetmeyi, location eşleşme algoritmasını (=, en uzun prefix, ^~, regex), root ile alias farkını, proxy_pass'teki sondaki slash'i ve bozuk config ile reload ve restart'ın farklı sonuçlarını gerçek koşularla görüyoruz.
Nginx ile ASP.NET Core Reverse Proxy: proxy_pass, Header'lar, WebSocket/SignalR ve Timeout'lar
Nginx 1.29.7'den beri upstream keepalive ve HTTP/1.1 varsayılan, ama yalnız upstream block'u kullanırsan: doğrudan adrese giden proxy_pass her istekte yeni bağlantı açıyor. Microsoft'un referans config'ini satır satır açıyor, WebSocket upgrade map'i olmadan SignalR'ın sessizce long polling'e düştüğünü, SSE'de buffering'i, Nginx ile Kestrel'in body ve header limit'lerini hizalamayı ve 502 ile 504'ü log'dan ayırt etmeyi ölçüyoruz.
Nginx ile Angular Yayınlamak: SPA Fallback, Cache Header'ları, Compression ve /api Proxy
Angular'ı Nginx ile yayınlarken try_files ile SPA fallback, hash'li bundle'lara immutable ve index.html'e no-cache şart; aksi hâlde deploy sonrası eski chunk'ı isteyen tarayıcı 200 ile HTML alıyor. gzip_static, runtime config.json, aynı origin'de /api proxy ile CORS'suz kurulum, base href ile alt yolda yayın ve Angular SSR'ı Node ile Nginx arkasına koyarken allowedHosts tuzağı gerçek koşularla.
Nginx'te HTTPS, Security Header'ları, Rate Limiting ve Load Balancing
Nginx'te TLS termination, http2 on ve listen quic ile HTTP/3, add_header_inherit merge ile kaybolmayan security header'ları, tek yerden HSTS, limit_req ile 429 ve upstream zone'u olmadan round robin'in dengesiz dağıldığı gerçek koşularla. ip_hash, 1.29.6 ile gelen sticky cookie ve max_fails ile passive health check: bir instance ölünce client tek hata görmüyor, ama idempotent olmayan istekler ve sağlıksız ama ayakta process'ler ayrı ele alınmalı.
Hosting Seçimi ve Production Checklist'i: Nginx, IIS, Caddy, Container ve PaaS
Hosting seçimini önce ekibin neyi işletebildiği, sonra servis sayısı, deploy sıklığı ve maliyet belirler; Linux VM ve Nginx, IIS, Caddy, Traefik, YARP, PaaS ve container aynı soruların farklı cevapları. Caddy'yi yedi satırlık config ve active health check ile deniyor, go-live öncesi on maddelik bir kontrol script'iyle yedinci yazının config'inde dışarıdan görünmeyen health endpoint'i ve 443'te eksik default server'ı yakalıyoruz.