How-To Guides

Nginx'i Ustalıkla Kullanma: Ters Proxy Yapılandırmasına Kapsamlı Bir Rehber

Modern web mimarisi ortamında, statik içeriği sunmak ve yüksek trafikli istekleri doğrudan uygulama sunucunuzdan yönetmek genellikle verimsiz ve risklidir. Nginx (okunuşu "engine-x"), minimum bellek tüketimiyle on binlerce eşzamanlı bağlantıyı yönetebilen hafif, yüksek performanslı bir HTTP sunucusu ve ters proxy'dir. Nginx'i bir ters proxy olarak yapılandırmak; güvenliği artırmak, performansı iyileştirmek ve SSL sonlandırmasını basitleştirmek isteyen herhangi bir sistem yöneticisi veya arka uç geliştiricisi için temel bir beceridir.

Bu rehber, temel yapılandırma, SSL entegrasyonu ve yük dengeleme stratejilerini kapsayarak Nginx'i bir ters proxy olarak kurma sürecinde size yol gösterecektir.

Ters Proxy Kavramını Anlamak

Bir ters proxy, istemciler ile arka uç sunucularının arasında yer alır. Bir istemci bir kaynağı talep ettiğinde, ters proxy bu isteği alır ve uygun arka uç sunucusuna iletir. İstemci, yanıtın doğrudan proxy'den geldiğini düşünür; bu durum ağınızın iç yapısını gizler. Bu kurulum şu kritik avantajları sağlar:

  • Güvenlik: Arka uç sunucularını internete doğrudan maruz kalmaktan koruyan bir tampon görevi görür.
  • Performans: Nginx, statik varlıkları, SSL yükünü azaltmayı (offloading) ve sıkıştırmayı yönetebilir; bu da uygulama sunucularınız üzerindeki yükü azaltır.
  • Ölçeklenebilirlik: Birden fazla arka uç örneği arasında yük dengelemeyi mümkün kılar.

Ön Koşullar

Yapılandırmaya başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  1. Linux dağıtımı (Aşağıdaki örneklerde Ubuntu veya CentOS) kullanan bir sunucu.
  2. Yüklü ve çalışır durumda Nginx.
  3. Yerel bir bağlantı noktasında çalışan bir arka uç uygulaması (örneğin, Node.js uygulaması için localhost:3000 veya Java Spring Boot uygulaması için localhost:8080).
  4. Sunucunuzun IP adresine işaret eden bir alan adı.

Temel Ters Proxy Yapılandırması

Bir Nginx ters proxy yapılandırmasının çekirdeği, proxy_pass yönergesinde yatar. Port 3000'de çalışan bir Node.js uygulamanız olduğunu varsayalım. İşte tüm HTTP isteklerini bu uygulamaya yönlendirmek için Nginx'i yapılandırma yöntemi.

Nginx sunucu bloğu yapılandırma dosyanızı düzenleyin; bu dosya genellikle /etc/nginx/sites-available/your_domain veya /etc/nginx/conf.d/default.conf konumunda bulunur.

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

    location / {
        # İsteği Node.js uygulamasına proxy'leyin
        proxy_pass http://localhost:3000;
        
        # Doğru proxy'leme için gerekli başlıklar
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
        
        # Önbellek kontrolü (isteğe bağlı)
        proxy_cache_bypass $http_upgrade;
    }
}

Anahtar Yönergeler Açıklaması:

  • proxy_pass: Arka uç sunucusunun URL'sini belirtir.
  • proxy_set_header Host: Orijinal Host başlığını arka uca iletir; sanal sunucuların doğru çalışmasını sağlar.
  • proxy_set_header X-Real-IP: İstemcinin gerçek IP adresini arka uç sunucusuna iletir.
  • proxy_http_version: WebSockets gibi özellikler için gerekli olan HTTP/1.1'e yükseltir.

Let's Encrypt ile SSL Ekleme

Günümüzün web ortamında HTTPS zorunludur. certbot kullanarak Nginx ters proxy'niz için SSL sertifikalarını kolayca elde edebilir ve yapılandırabilirsiniz.

sudo certbot --nginx -d example.com -d www.example.com

Certbot, Nginx yapılandırmanızı otomatik olarak 443 bağlantı noktasını dinleyecek ve HTTP trafiğini HTTPS'e yönlendirecek şekilde değiştirecektir. Elde edilen yapılandırma, SSL sertifikaları ve HSTS başlıkları etkinleştirilmiş olarak temel bloğa benzer görünecektir.

Birden Fazla Arka Ucu Yükle Dengeleme

Nginx'in en güçlü özelliklerinden biri, trafiği birden fazla sunucu arasında dağıtma yeteneğidir. Bunu başarmak için ana Nginx yapılandırma dosyanızda (/etc/nginx/nginx.conf) bir upstream bloğu tanımlayın.

upstream my_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://my_app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

proxy_pass yönergesini my_app upstream grubuna işaret ederek, Nginx gelen istekleri üç arka uç örneği arasında eşit şekilde dağıtmak için varsayılan yuvarlak-robin (round-robin) algoritmasını kullanacaktır.

Sonuç

Nginx'i bir ters proxy olarak yapılandırmak, sağlam, güvenli ve ölçeklenebilir bir web altyapısı oluşturmak için güçlü bir adımdır. SSL sonlandırmasını üstlenerek, statik dosyaları yöneterek ve yükü arka uç hizmetleri arasında dengeleyerek Nginx, uygulama mantığının en iyi yaptığı şeye odaklanmasına olanak tanır: iş mantığını sunmak. Hizmeti yeniden yüklemeden önce yapılandırmanızı her zaman nginx -t ile test etmeyi ve sıfır kesinti süresi sağlamak için emin olmayı unutmayın. Bu desenleri ustalaşmak, DevOps ve arka uç geliştirme yeteneklerinizi önemli ölçüde yükseltecektir.

Share: