Nginx uygulamasını ters vekil sunucu arkasına alma nasıl yapılır? (Node.js, Python, Java uygulamaları vb.)

Nginx Nedir?

Nginx, yüksek performanslı, açık kaynak kodlu bir web sunucusu ve ters vekil sunucu çözümüdür. İlk olarak Igor Sysoev tarafından 2002 yılında geliştirilmiş ve şu anda dünyanın en popüler web sunucularından biri haline gelmiştir. Nginx, yüksek eşzamanlı bağlantıları işleme yeteneği ile ön plana çıkmakta olup, statik içerik sunma, yük dengelemesi ve ters vekil sunucusu olarak kullanılabilme özellikleri barındırmaktadır.

Ters Vekil Sunucu Nedir?

Ters vekil sunucu, istemci ile asıl sunucu arasında aracılık yaparak, istemciden gelen talepleri alıp asıl sunucuya yönlendiren bir sunucudur. Bu yapı, yük dengelemesi, güvenlik, SSL sonlandırma ve içerik önbellekleme gibi birçok avantaj sağlar. Nginx, bu işlevselliği etkili bir şekilde sağlamaktadır. Ters vekil sunucuları, genellikle dinamik içerikler sunan uygulamalar ile birlikte kullanılmakta, böylece daha iyi ölçeklenebilirlik ve performans sunmaktadır.

Nginx Konfigürasyonu

Nginx’i ters vekil sunucu olarak yapılandırmak oldukça basittir. Nginx konfigürasyon dosyası genellikle `/etc/nginx/nginx.conf` veya `/etc/nginx/sites-available/` dizininde bulunur. İlgili dosyayı açarak bir sunucu bloğu eklenmelidir. Aşağıdaki örnek, bir Node.js uygulamasını ters vekil olarak yönlendiren basit bir konfigürasyonu göstermektedir:

“`
server {
listen 80;
server_name example.com;

location / {
proxy_pass http://localhost:3000; Node.js uygulaması
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
“`

Yukarıdaki örnekte, bu Nginx konfigürasyonu, istemciden gelen talepleri `localhost:3000` adresindeki Node.js uygulamasına yönlendirmektedir. `proxy_set_header` talimatları, istemciden gelen bazı başlıkların korunmasını sağlar, böylece asıl sunucu kendisine gelen talebin gerçek kaynağını bilir.

Python Uygulamaları İçin Yapılandırma

Python tabanlı uygulamalar genellikle Flask veya Django gibi framework’ler kullanarak geliştirilir. Aşağıda, bir Django uygulaması için Nginx konfigürasyonu örneği verilmektedir:

“`
server {
listen 80;
server_name example.com;

location / {
proxy_pass http://localhost:8000; Django uygulaması
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
“`

Django uygulaması genellikle `runserver` komutu ile çalıştırılır, ancak üretim ortamında `gunicorn` veya `uWSGI` gibi bir uygulama sunucusu ile kullanılması önerilmektedir.

Java Uygulamaları İçin Yapılandırma

Java uygulamaları genellikle Spring, Java EE gibi framework’ler ile geliştirilir ve bu uygulamalar genellikle Tomcat, Jetty gibi sunucularda çalıştırılır. Java uygulamaları için bir Nginx konfigürasyonu aşağıdaki gibi olabilir:

“`
server {
listen 80;
server_name example.com;

location / {
proxy_pass http://localhost:8080; Java uygulaması running on Tomcat
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
“`

Yukarıdaki konfigürasyonda, istemciden gelen talepler “localhost:8080” adresinde çalışan Java uygulamasına yönlendirilmektedir.

SSL ve Güvenlik

Güvenli bağlantılar sağlamak için SSL sertifikaları kullanmak gereklidir. Let’s Encrypt gibi ücretsiz sertifika otoriteleriyle SSL sertifikaları edinilebilir. Aşağıda, SSL sertifikası ile Nginx konfigürasyonu örneği verilmektedir:

“`
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://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
“`

Yük Dengelemesi ve Performans

Nginx, çoklu uygulama sunucularına yük dengeleyerek gelen istekleri dağıtma yeteneğine sahiptir. Aşağıda, iki Node.js uygulamasına yük dengelemesi yapan bir Nginx konfigürasyonu örneği bulunmaktadır:

“`
upstream myapp {
server localhost:3000;
server localhost:3001;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://myapp;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
“`

Bu yapı, iki ayrı Node.js uygulamasına gelen istekleri döngüsel olarak dağıtmaktadır.

Nginx’in İyileştirmeleri

Nginx performansını artırmak için çeşitli ayarlamalar yapılabilir. `worker_processes`, `worker_connections` ve `keepalive_timeout` gibi parametreler, sunucunun performansını optimize etmek amacıyla yapılandırılabilir. Ayrıca, önbellekleme, sıkıştırma ve statik dosya sunumu işlemleri için de Nginx’in belirli özellikleri etkinleştirilmelidir.

Sonuç

Nginx, ters vekil sunucu olarak yüksek performans ve ölçeklenebilirlik sağlama yeteneği ile popüler bir seçimdir. Node.js, Python ve Java uygulamaları için Nginx yapılandırması, basit ve etkili bir şekilde yapılabilir. TLS/SSL kullanarak güvenli bağlantılar sağlamak ve yük dengelemesi ile performansı artırmak, Nginx’in sağladığı diğer avantajlardır. Nginx’in bu özellikleri, geliştiricilerin uygulama sunumunu ve yönetimini kolaylaştırmaktadır.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

SON İÇERİKLER

İLGİNİZİ ÇEKEBİLİR