İçeriğe geç
Proxy Types 6 dk okuma 785 görüntülenme

Proxy sunucusu olarak Nginx

Nginx'i proxy sunucusu olarak yapılandırmaya dair kapsamlı bir rehber. Kurulumu, avantajları ve web performansını artıran pratik kullanımı öğrenin.

Proxy sunucusu olarak Nginx

Nginx, istemci isteklerini backend sunuculara verimli biçimde ileterek ve yanıtlarını geri döndürerek yüksek performanslı bir proxy sunucusu olarak çalışır; böylece yük dengeleme, SSL sonlandırma ve içerik önbellekleme gibi özellikleri mümkün kılar.

Giriş

Nginx (Engine-X), aynı zamanda ters proxy, HTTP önbelleği ve yük dengeleyici olarak da çalışabilen açık kaynaklı bir web sunucusudur. Olay tabanlı mimarisi sayesinde çok sayıda eşzamanlı bağlantıyı verimli şekilde yönetebilir; bu da onu yüksek trafikli ortamlar için uygun kılar. Proxy olarak Nginx, istemcilerle backend sunucular arasında konumlanır, trafiğe aracılık eder ve ek işlevsellik katmanları ekler.

Neden Nginx'i proxy olarak kullanmalı?

Nginx'i proxy sunucusu olarak devreye almak birkaç operasyonel avantaj sağlar:

  • Yük dengeleme: Uygulamanın yanıt verme hızını ve güvenilirliğini artırmak için gelen ağ trafiğini birden fazla backend sunucuya dağıtır.
  • SSL/TLS sonlandırma: İstemcilerden gelen şifreli bağlantıları yönetir, trafiği backend sunuculara iletmeden önce çözer; böylece backend sunucular şifrelenmemiş HTTP üzerinden çalışabilir. Bu, kriptografik işlem yükünü uygulama sunucularından alır.
  • Önbellekleme: Sık erişilen içeriği saklar, backend sunucuların yükünü azaltır ve istemciler için yanıt sürelerini kısaltır.
  • Güvenlik: Bir tampon görevi görerek backend sunucuları doğrudan istemci erişiminden ve olası saldırılardan korur. İstekleri filtreleyebilir ve erişim politikalarını uygulayabilir.
  • Yüksek erişilebilirlik: Yük dengelemeyle birlikte Nginx, sağlıksız backend sunuculardan trafiği uzaklaştırarak hizmetin kesintisiz sürmesini sağlar.
  • Trafik yönetimi: URL yeniden yazma, istek filtreleme ve içerik değiştirme olanağı sunar.

Nginx proxy türleri

Nginx temelde iki proxy modunda çalışır: ters proxy ve ileri (forward) proxy.

Ters proxy

Ters proxy, bir istemci adına bir veya daha fazla sunucudan kaynak alır. Bu kaynaklar daha sonra istemciye, sanki proxy sunucusunun kendisinden geliyormuş gibi döndürülür. İstemciler backend mimarisinden habersizdir.

İleri proxy

İleri proxy, bir istemci adına çok çeşitli sunuculardan kaynak alır. Dış sunuculardan kaynak talep eden istemciler için aracı görevi görür. İstemciler ileri proxy'yi kullanmak üzere açıkça yapılandırılır.

Özellik Ters proxy İleri proxy
İstemcinin farkındalığı İstemci proxy'den habersizdir; istekler proxy'ye gider. İstemci proxy'den haberdardır ve onu kullanmak üzere yapılandırılmıştır.
Amaç Backend sunucuları korur ve optimize eder; yük dengeleme. İstemcilerin dış kaynaklara erişmesini sağlar; güvenlik/filtreleme.
Konum Genellikle web sunucularının önüne konumlandırılır. Genellikle istemci ağının sınırında konumlandırılır.
Şeffaflık İstemciye köken sunucu gibi görünür. İstemciye aracı olarak görünür.

Temel ters proxy yapılandırması

Nginx'i ters proxy olarak yapılandırmak, gelen istekleri dinleyen bir server bloğu tanımlamayı ve ardından bunları bir upstream sunucuya iletmek için proxy_pass yönergesini kullanmayı gerektirir.

Ön koşullar

  • Kurulu bir Nginx örneği.
  • Nginx yapılandırma dosyalarına erişim (genellikle /etc/nginx/nginx.conf veya /etc/nginx/sites-available/ içindeki dosyalar).
  • Çalışır durumda ve Nginx sunucusundan erişilebilir bir backend sunucu (ör. bir uygulama sunucusu, başka bir web sunucusu).

Temel yapılandırma yönergeleri

  • proxy_pass: İstekleri iletmek için temel yönerge. Proxy'lenen sunucunun protokolünü, adresini ve isteğe bağlı portunu belirtir.
  • proxy_set_header: Nginx'in proxy'lenen sunucuya gönderdiği istek başlıklarını değiştirir. İstemci IP'sini, host ve protokol bilgisini iletmek için gereklidir.
  • proxy_buffering: Nginx'in proxy'lenen sunucudan gelen yanıtları tamponlayıp tamponlamayacağını denetler. Tamponlama, Nginx'in yanıtın tamamını istemciye göndermeden önce almasına izin vererek performansı artırabilir.
  • proxy_cache: Proxy'lenen sunuculardan gelen yanıtların önbelleklenmesini etkinleştirir.
# /etc/nginx/sites-available/my_reverse_proxy.conf

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

    location / {
        # Hedef backend sunucu
        proxy_pass http://backend_app_server:8080;

        # Özgün host ve IP bilgisini backend'e ilet
        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;

        # Streaming için proxy tamponlamasını kapatın, klasik web için açın
        # proxy_buffering on; 
    }

    # İsteğe bağlı: statik dosyaları doğrudan Nginx üzerinden sun
    location /static/ {
        root /var/www/my_app;
        expires 30d;
    }
}

Bu dosyayı oluşturduktan sonra, sites-enabled dizinine sembolik bağlantı oluşturarak etkinleştirin:
sudo ln -s /etc/nginx/sites-available/my_reverse_proxy.conf /etc/nginx/sites-enabled/
Ardından Nginx yapılandırmasını test edin ve yeniden yükleyin:
sudo nginx -t
sudo systemctl reload nginx

Gelişmiş ters proxy yapılandırması

Yük dengeleme

Nginx, çeşitli yük dengeleme algoritmalarını kullanarak istekleri birden fazla backend sunucuya dağıtabilir. upstream bloğu bir sunucu grubu tanımlar.

# nginx.conf içinde veya http bloğu tarafından dahil edilen ayrı bir dosyada

upstream backend_servers {
    # Round-robin (varsayılan)
    server backend_server1.example.com:8080;
    server backend_server2.example.com:8080;
    server 192.168.1.100:8080; # IP adresleri de kullanılabilir

    # Ağırlıklı round-robin
    # server backend_server1.example.com:8080 weight=3;
    # server backend_server2.example.com:8080 weight=1;

    # En az bağlantı
    # least_conn;

    # IP Hash (istemci IP'sine dayalı sabit oturumlar)
    # ip_hash;

    # Sağlık kontrolleri (Nginx Plus veya belirli modüller gerektirir)
    # server backend_server1.example.com:8080 max_fails=3 fail_timeout=30s;
}

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

    location / {
        proxy_pass http://backend_servers; # upstream bloğuna referans
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

SSL/TLS sonlandırma

Nginx, SSL/TLS bağlantılarını sonlandırarak şifreleme/şifre çözme işlemini backend sunuculardan alabilir. Bunun için SSL sertifikaları ve anahtarları gerekir.

server {
    listen 443 ssl;
    server_name secure.example.com;

    ssl_certificate /etc/nginx/ssl/secure.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/secure.example.com.key;

    # Güvenlik ve performans için önerilen SSL ayarları
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    location / {
        proxy_pass http://backend_app_server:8080; # Backend HTTP olabilir
        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 https; # Backend'e özgün protokolü bildir
    }
}

# İsteğe bağlı: HTTP'yi HTTPS'e yönlendir
server {
    listen 80;
    server_name secure.example.com;
    return 301 https://$host$request_uri;
}

Önbellekleme

Nginx, proxy'lenen sunuculardan gelen yanıtları önbelleğe alarak statik veya seyrek değişen içerik için gecikmeyi ve backend yükünü belirgin biçimde azaltabilir.

# http bloğunda (herhangi bir server bloğunun dışında)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_key "$scheme$request_method$host$request_uri";

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

    location / {
        proxy_pass http://backend_app_server:8080;
        proxy_set_header Host $host;

        proxy_cache my_cache; # Bu location için önbelleklemeyi etkinleştir
        proxy_cache_valid 200 302 10m; # 200/302 yanıtlarını 10 dakika önbellekle
        proxy_cache_valid 404 1m;    # 404 yanıtlarını 1 dakika önbellekle
        proxy_cache_bypass $http_pragma $http_authorization; # Bu başlıklar varsa önbelleğe alma
        proxy_no_cache $http_pragma $http_authorization; # Bu başlıklar varsa önbelleği kullanma

        add_header X-Proxy-Cache $upstream_cache_status; # Önbellek durumunu görmek için başlık ekle
    }
}

WebSocket proxy'leme

WebSocket proxy'lemek, protokol geçişi için Upgrade ve Connection başlıklarının özel biçimde işlenmesini gerektirir.

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

    location /ws/ {
        proxy_pass http://backend_websocket_server:8081;

        # WebSocket'e özgü 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_read_timeout 86400s; # Uzun ömürlü bağlantılar için gerektiği gibi ayarlayın
    }
}

Temel ileri proxy yapılandırması

Nginx'i ileri proxy olarak yapılandırmak, istemcilerin giden isteklerini Nginx üzerinden yönlendirmesine olanak tanır. Bu genellikle kurumsal ağlarda erişim denetimi veya günlük kaydı için kullanılır.

Yapılandırma yönergeleri

  • resolver: Nginx'in host adlarını çözmek için kullanacağı DNS sunucularını belirtir.
  • proxy_pass: Bir location bloğu içinde, ancak hedef URL için bir değişkenle kullanılır.
# http bloğunda (herhangi bir server bloğunun dışında)
resolver 8.8.8.8 8.8.4.4 valid=300s; # Google Public DNS, gerektiği gibi ayarlayın

server {
    listen 3128; # Proxy sunucuları için yaygın port
    listen [::]:3128;

    # Erişimi yetkili istemcilerle sınırla (ör. iç ağ)
    allow 192.168.1.0/24;
    deny all;

    location / {
        proxy_pass $scheme://$host$request_uri;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Genel amaçlı ileri proxy için önbelleklemeyi kapat
        proxy_no_cache 1;
        proxy_cache_bypass 1;
    }
}

İstemciler daha sonra tarayıcılarını veya uygulamalarını proxy olarak nginx_ip_address:3128 kullanacak şekilde yapılandırır.

İzleme ve sorun giderme

Nginx'in proxy olarak etkin çalışması, izleme ve sorun giderme yeteneklerini gerektirir.

  • Yapılandırma testi: Nginx'i yeniden yüklemeden önce yapılandırma dosyalarını her zaman doğrulayın.
    sudo nginx -t
  • Servis durumu: Nginx servisinin durumunu kontrol edin.
    sudo systemctl status nginx
  • Erişim günlükleri: Nginx, işlediği her isteği genellikle /var/log/nginx/access.log konumundaki erişim günlüğüne kaydeder. Bu günlükler istemci IP'si, istek yöntemi, URL, durum kodu ve yanıt boyutu gibi ayrıntıları sağlar.
  • Hata günlükleri: Kritik hatalar, uyarılar ve hata ayıklama bilgileri genellikle /var/log/nginx/error.log konumundaki hata günlüğüne yazılır. Yapılandırma, backend bağlantısı veya kaynak sınırlamalarıyla ilgili sorunlar için bu dosyayı izleyin.
  • Backend sağlığı: Backend sunucuların çalışır durumda ve Nginx sunucusundan erişilebilir olduğundan emin olun. Bağlantıyı test etmek için Nginx makinesinden curl veya ping gibi araçları kullanın.
  • Ağ bağlantısı: İstemciler, Nginx ve backend sunucular arasındaki ağ yollarını doğrulayın.
  • Kaynak kullanımı: Darboğazları belirlemek için Nginx sunucusundaki CPU, bellek ve disk I/O kullanımını izleyin.
Güncellendi: 03.03.2026
Kategoriye dön

Proxy'lerimizi deneyin

100+ ülkede 20,000+ proxy

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.