Furkan KapukayaYazılım geliştirme
Sunucu, Bulut ve DevOps2 dk okuma

Nginx ve Reverse Proxy Nedir? Uygulamanızın Önündeki Kapı

Reverse proxy kavramı, Nginx'in görevleri, HTTPS sonlandırma, ASP.NET Core uygulamasını Nginx arkasında yayınlama, sıkıştırma, önbellek ve sık yapılan yapılandırma hataları.

Kullanıcı sitenize bağlandığında aslında ilk karşılaştığı şey çoğu zaman uygulamanızın kendisi değil, önünde duran bir reverse proxy'dir. Nginx, bu görevi üstlenen en yaygın yazılımlardan biridir: gelen istekleri karşılar, gerekeni kendisi yapar, gerisini arka plandaki uygulamaya iletir.

Reverse proxy ne yapar?

  • HTTPS sonlandırma: Sertifikayı yönetir, şifreli bağlantıyı çözer ve uygulamaya iletir.
  • Yönlendirme: /api isteklerini bir uygulamaya, / isteklerini başka birine gönderir.
  • Statik dosya sunumu: Görsel ve CSS gibi dosyaları uygulamayı yormadan doğrudan verir.
  • Sıkıştırma ve önbellek: Yanıtları küçültür ve tekrar eden istekleri hızlandırır.
  • Yük dengeleme: Aynı uygulamanın birden çok kopyası arasında trafiği dağıtır.
  • Koruma: İstek boyutu, zaman aşımı ve basit hız sınırlama kuralları uygular.

Tipik yapı

Kullanıcı ──HTTPS──> Nginx (443) ──HTTP──> ASP.NET Core (localhost:5000)

Uygulama yalnızca sunucunun içinden erişilebilir bir portta dinler; internete açık olan tek kapı Nginx'tir.

Örnek yapılandırma

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

    ssl_certificate     /etc/letsencrypt/live/ornek.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ornek.com/privkey.pem;

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

server {
    listen 80;
    server_name ornek.com;
    return 301 https://$host$request_uri;
}

ASP.NET Core tarafında Forwarded Headers ara katmanını etkinleştirmek gerekir; aksi halde uygulama isteklerin HTTP ile geldiğini sanır, kullanıcı IP'lerini yanlış görür ve yönlendirmeler bozulur.

Sertifika yönetimi

Let's Encrypt ve Certbot ile ücretsiz sertifika alınıp otomatik yenilenebilir. Sertifika ömürlerinin sektör genelinde kademeli olarak kısaltıldığı düşünüldüğünde, otomatik yenileme ve yenilemenin izlenmesi artık zorunluluktur. Bkz. SSL sertifikası ve HTTPS.

Güvenlik başlıkları

HSTS, CSP ve benzeri başlıklar Nginx üzerinden tek noktadan eklenebilir. Ayrıntılar: HTTP güvenlik başlıkları.

Sık yapılan hatalar

  • Uygulamayı 0.0.0.0 üzerinde dinletip Nginx'i atlayarak doğrudan erişime açık bırakmak
  • client_max_body_size ayarını unutup dosya yüklemelerinde 413 hatası almak
  • Uzun süren rapor isteklerinde zaman aşımı ayarlarını yapmamak (504 hatası)
  • Yapılandırmayı test etmeden yeniden yüklemek: önce sudo nginx -t

Sık sorulan sorular

Kestrel doğrudan internete açılamaz mı?

Açılabilir; ancak aynı sunucuda birden çok site, merkezi sertifika yönetimi ve statik dosya önbelleği gibi ihtiyaçlarda reverse proxy hâlâ pratik bir tercihtir.

Nginx yerine ne kullanılabilir?

Caddy (otomatik HTTPS ile), Apache, Traefik (konteyner ortamlarında) ve Windows'ta IIS yaygın alternatiflerdir.

Sonuç

Reverse proxy, uygulamanızın önünde güvenlik, hız ve esneklik sağlayan bir kapıdır. Doğru yapılandırılmış bir Nginx, uygulama kodunu değiştirmeden pek çok iyileştirmeyi mümkün kılar.