Nginx'i arka uç uygulamalar için ters proxy olarak yapılandırma | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

Nginx'i arka uç uygulamalar için ters proxy olarak yapılandırma

Giriş

Modern sunucu kurulumlarında, uygulamalar nadiren doğrudan internete bağlanır. Bunun yerine, bir ters proxy onların önünde durur ve gelen istemci isteklerini yönetir. Nginx, bu iş için en popüler araçlardan biridir çünkü hızlı, güvenilir ve yapılandırması kolaydır. Bu eğitimde, aynı sunucuda çalışan bir arka uç uygulaması için Nginx'i ters proxy olarak nasıl yapılandıracağınızı öğreneceksiniz.

Ters proxy nedir?

Ters proxy, bir sunucudur ve:

  • İstemcilerden (tarayıcılar, API'ler vb.) gelen istekleri kabul eder
  • Bu istekleri bir arka uç uygulamasına iletir
  • Arka uçtan gelen yanıtı istemciye geri gönderir

İstemci, arka uç uygulamasıyla doğrudan konuşmaz.

Ters proxy vs doğrudan erişim

Ters proxy olmadan:

İstemci ---> Arka uç uygulaması (port 3000)

Ters proxy ile:

İstemci ---> Nginx (port 80, 443) ---> Arka uç uygulaması (port 3000)

Nginx'i ters proxy olarak kullanmanın avantajları nelerdir?

Uygulamanızın önünde Nginx kullanmak, size şunları sağlar:

  • Yalnızca 80/443 portlarını internete açma
  • Arka uç hizmetlerini doğrudan erişimden gizleme
  • HTTPS (TLS) bağlantılarını tek bir yerde sonlandırma
  • Günlük kaydı, erişim kontrolü ve hız sınırlama ekleme
  • Bir sunucuda birden fazla uygulama çalıştırma

Sistem yöneticileri için bu, daha iyi güvenlik ve daha kolay yönetim anlamına gelir.

Bu eğitimde kullanılan senaryo

İşleri basit tutmak için aşağıdaki kurulumu kullanacağız:

  • Nginx, 80 portunu dinler
  • Arka uç uygulaması 127.0.0.1:3000 adresini dinler
  • http://example.com adresine yapılan istekler arka uca yönlendirilir

Trafik akış diyagramı

[ Tarayıcı ] | v [ Nginx example.com:80,443 ] | v [ Arka uç uygulaması 127.0.0.1:3000 ]

Ön koşullar

Başlamadan önce, şunlara sahip olduğunuzdan emin olun:

  • En son Debian kararlı sürümüne sahip bir Linux sunucu
  • Root veya sudo erişimi
  • Halihazırda çalışan bir arka uç uygulaması (örneğin, bir Node.js, Python veya Java uygulaması)
  • Linux terminali ile temel düzeyde aşinalık

Nginx'i yükleyin

Paket listelerini güncelleyin ve Nginx ile curl'u (kurulum testi için) yükleyin:

sudo apt update

sudo apt install nginx curl

Nginx'in çalıştığını kontrol edin:

systemctl status nginx

Çıktıda "active (running)" ifadesini görmelisiniz.

Nginx'i yerel olarak test edin:

curl http://localhost

Nginx çalışıyorsa, varsayılan karşılama sayfasını alırsınız.

Nginx yapılandırma yapısını anlayın

Nginx yapılandırma dosyaları genellikle /etc/nginx/ içinde saklanır. Önemli dizinler:

  • /etc/nginx/nginx.conf — ana yapılandırma dosyası
  • /etc/nginx/sites-available/ — site yapılandırma dosyaları (aktif değil)
  • /etc/nginx/sites-enabled/ — etkin site yapılandırmaları (sembolik bağlantılar)

Nginx, yapılandırma dosyalarını sites-enabled klasöründen okur, doğrudan sites-available'dan değil. Site yapılandırma dosyalarını sites-available'da oluşturup ardından bunlara sites-enabled'da sembolik bağlantılar oluşturmanız önerilir.

Ters proxy yapılandırması oluşturun

Yeni bir site dosyası oluşturun

sudo nano /etc/nginx/sites-available/reverse-proxy.conf

Ters proxy yapılandırmasını ekleyin

server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:3000; 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; } }

Yapılandırmayı anlayın

Sunucu bloğu

server { listen 80; server_name example.com; }

  • listen 80; — Nginx, 80 portunda HTTP trafiğini dinler
  • server_name example.com; — bu sunucu bloğunun yanıt verdiği alan adı

Konum bloğu

location / { proxy_pass http://127.0.0.1:3000; 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; }

  • location / — gelen tüm URL'leri eşleştirir
  • proxy_pass — istekleri arka uç uygulamasına iletir

Proxy başlıkları

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;

Bu başlıklar, arka ucun şunları bilmesini sağlar:

  • Orijinal alan adı
  • İstemcinin gerçek IP adresi
  • İsteğin HTTP mi yoksa HTTPS mi olduğu

Bu başlıklar olmadan, arka uç uygulamaları yanlış istemci bilgilerini kaydedebilir.

Yapılandırmayı etkinleştirin

80 portunda çakışmaları önlemek için varsayılan Nginx sitesini devre dışı bırakın:

sudo rm /etc/nginx/sites-enabled/default

Siteyi etkinleştirmek için bir sembolik bağlantı oluşturun:

sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/

Yapılandırmayı sözdizimi hataları için test edin:

sudo nginx -t

Test başarılı olursa, Nginx'i yeniden yükleyin:

sudo systemctl reload nginx

Ters proxy'yi test edin

Sunucudan test edin:

curl http://example.com

Test etmek için bir tarayıcıda http://example.com adresini açın. Nginx'in varsayılan sayfası yerine arka uç uygulamanızdan bir yanıt almalısınız. Her şey doğru yapılandırılmışsa, arka uç uygulaması yüklenecektir.

İsteğin nasıl işlendiği

  1. İstemci, example.com adresine istek gönderir
  2. Nginx, isteği 80 portunda alır
  3. Nginx, isteği 127.0.0.1:3000 adresine iletir
  4. Arka uç, isteği işler
  5. Yanıt, Nginx üzerinden geri gider
  6. İstemci, yanıtı alır

Yaygın hatalar ve sorun giderme

Arka uç çalışmıyor

  • Uygulamanın çalıştığından emin olun
  • Doğru portu doğrulayın

ss -tuln | grep 3000

Yanlış proxy_pass adresi

  • Her zaman http:// ekleyin
  • IP ve portun doğru olduğundan emin olun

Nginx'i yeniden yüklemeyi unutma

Her yapılandırma değişikliğinden sonra:

sudo systemctl reload nginx

Güvenlik duvarı erişimi engelliyor

80 portunun açık olduğundan emin olun:

sudo ufw allow 80

Opsiyonel iyileştirmeler

Ters proxy çalıştıktan sonra, şunları düşünün:

  • Let's Encrypt ile HTTPS etkinleştirme
  • Birden fazla arka uç uygulaması çalıştırma
  • Erişim günlükleri ve hata günlükleri ekleme
  • Yük dengeleme yapılandırma
  • WebSocket bağlantılarını destekleme

HTTPS Yapılandırması

Üretim ortamlarında, her zaman HTTP yerine HTTPS kullanmalısınız. HTTPS, istemci ile sunucunuz arasındaki trafiği şifreler, şifreler, API anahtarları, çerezler ve diğer hassas verileri korur. Nginx, SSL/TLS sertifikaları kullanarak HTTPS'yi destekler. Bu bölümde şunları öğreneceksiniz:

  • Certbot nedir
  • Certbot nasıl kurulur
  • Certbot'un Nginx yapılandırmasını otomatik olarak nasıl değiştirdiği
  • Satın alınmış bir sertifika kullanarak Nginx'i manuel olarak nasıl yapılandıracağınız

Certbot nedir?

Certbot, Let's Encrypt'ten ücretsiz SSL/TLS sertifikaları otomatik olarak elde eden ve yükleyen bir araçtır. Şunları yapabilir:

  • Ücretsiz bir sertifika talep etme
  • Alan adı sahipliğini doğrulama
  • Nginx'i otomatik olarak yapılandırma
  • Otomatik sertifika yenileme ayarlama

Yeni başlayanlar ve çoğu üretim ortamı için, Certbot, HTTPS'yi etkinleştirmenin en kolay ve en güvenli yoludur.

Certbot'u yükleme

Paket listelerini güncelleyin:

sudo apt update

Certbot ve Nginx eklentisini yükleyin:

sudo apt install certbot python3-certbot-nginx

python3-certbot-nginx paketi, Certbot'un Nginx yapılandırmanızı otomatik olarak değiştirmesine olanak tanır.

Sertifika Alma ve Yükleme

Certbot'u çalıştırmadan önce, şunlardan emin olun:

  • Alan adınızın sunucunuzun genel IP adresine yönlendirildiği
  • Nginx'in çalıştığı
  • Güvenlik duvarında 80 ve 443 portlarının açık olduğu

Çalıştırın:

sudo certbot --nginx

Certbot şunları yapacaktır:

  1. Hangi alan adını güvence altına almak istediğinizi sorar
  2. Alan adı sahipliğini doğrular
  3. Nginx yapılandırmanızı otomatik olarak günceller
  4. Nginx'i yeniden yükler

Info

Certbot, Nginx yapılandırmanızı otomatik olarak değiştirir. Genellikle 443 (HTTPS) portu için yeni bir sunucu bloğu ekler, SSL sertifika yollarını ekler, bu seçeneği seçerseniz HTTP'den HTTPS'ye yönlendirme ekler ve önerilen SSL ayarlarını ekler.

Certbot tarafından eklenen örnek yapılandırma:

server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3000; 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; } }

Certbot ayrıca HTTP bloğunu trafiği yönlendirmek için değiştirebilir:

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

Certbot yapılandırma dosyalarını otomatik olarak düzenlediği için, şunları yapmanız önerilir:

  • Yapılandırmanızın yedeklerini tutun
  • Yapılan değişiklikleri anlayın
  • Değişikliklerden sonra her zaman yapılandırmayı test edin

Yapılandırmayı test edin:

sudo nginx -t

Otomatik Sertifika Yenileme

Let's Encrypt sertifikaları 90 gün geçerlidir. Certbot, otomatik bir yenileme zamanlayıcısı kurar. Yenilemeyi test etmek için:

sudo certbot renew --dry-run

Doğru yapılandırılmışsa, yenileme kesinti olmadan otomatik olarak gerçekleşecektir.

Satın Alınmış SSL Sertifikası Kullanma

Bir sertifika otoritesinden (CA) bir SSL sertifikası satın alırsanız, Nginx'i manuel olarak yapılandırmanız gerekir. Satın aldıktan sonra genellikle şunları alırsınız:

  • Bir sertifika dosyası (örneğin, example.com.crt)
  • Bir özel anahtar (example.com.key)
  • Bir CA demet dosyası (ca_bundle.crt)

Güvenli bir dizin oluşturun:

sudo mkdir -p /etc/nginx/ssl

sudo chmod 700 /etc/nginx/ssl

Sertifika dosyalarınızı bu dizine kopyalayın.

Satın alınmış bir sertifika ile örnek HTTPS yapılandırması:

server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://127.0.0.1:3000; 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; } }

HTTP'den HTTPS'ye yönlendirme ekleyin:

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

Manuel yapılandırmadan sonra Nginx'i yeniden yükleyin:

sudo nginx -t

sudo systemctl reload nginx

Tip

Yeni başlayan sistem yöneticileri için, Certbot, kuruluşunuz ticari sertifikalar gerektirmedikçe şiddetle tavsiye edilir.

Özet

Bu eğitimde şunları öğrendiniz:

  • Ters proxy nedir ve neden faydalıdır
  • Nginx'in istekleri arka uç uygulamalarına nasıl ilettiği
  • Ters proxy yapılandırmasının nasıl oluşturulup etkinleştirileceği
  • Yaygın sorunların nasıl test edilip giderileceği
  • HTTPS'nin nasıl yapılandırılacağı

Nginx ters proxy kullanımı, sistem yöneticileri için temel bir beceridir ve üretim ortamlarında yaygın olarak kullanılır.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA