Nginx Node.js uygulamaları için vekil sunucu konfigürasyonu nasıl yapılır? (proxy_pass, WebSocket desteği)

Nginx ve Node.js Entagrasyonu

Nginx, yüksek performanslı bir HTTP ve ters proxy sunucusudur. Node.js, özellikle I/O tabanlı uygulamalar için geliştirilmiş bir JavaScript çalışma ortamıdır. Nginx ve Node.js entegrasyonu, ölçeklenebilir, hızlı ve güvenilir web uygulamaları oluşturmak için yaygın olarak tercih edilen bir yöntemdir. Nginx, doğal olarak static dosyaları sunabilirken, Node.js dinamik içerik oluşturma yeteneğine sahiptir. Bu nedenle, Nginx ile Node.js’i bir arada kullanmak, sunucunun genel performansını artırabilir.

Temel Vekil Sunucu Konfigürasyonu

Nginx konfigürasyonu, genellikle `/etc/nginx/nginx.conf` veya belirli bir site için `/etc/nginx/sites-available/` dizininde bulunan dosya içerisinde yapılır. Aşağıda basit bir Nginx konfigürasyonu örneği yer almaktadır. Bu yapılandırma, Nginx’in gelen HTTP isteklerini Node.js uygulamasına iletmesini sağlar.

“`nginx
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_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;
}
}
“`

Yukarıdaki yapılandırmada, `proxy_pass` direktifi, Nginx’in tüm gelen istekleri yerel olarak çalışmakta olan Node.js uygulamasına yönlendirmesini sağlar. Bu örnekte Node.js uygulaması, 3000 numaralı portta çalışmakta olan bir servis olarak varsayılmaktadır.

WebSocket Desteği

WebSocket, sunucu ve istemci arasında kalıcı bir bağlantı sağlayarak gerçek zamanlı veri iletimi yapabilen bir protokoldür. Node.js uygulamaları genellikle bu protokol üzerinden iletişim kurmaktadır. Nginx, WebSocket isteklerini yönlendirmek için bazı ek ayarların yapılmasını gerektirir. Önceki yapılandırmaya WebSocket desteği eklemek için aşağıdaki direktifler kullanılmaktadır.

“`nginx
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_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;

WebSocket uyumluluğu için
proxy_read_timeout 86400; Uzun süreli bağlantılar için zaman aşımını uzat
}
“`

Burada `proxy_read_timeout` direktifi, WebSocket bağlantısının açık kalabilmesi için zaman aşım süresini uzatmaktadır. Bu ayar, uygulamanın WebSocket üzerinden sağlanan gerçek zamanlı verileri zamanında iletebilmesi için kritik bir faktördür.

SSL Desteği

Güvenli bir bağlanma sağlamak için Nginx üzerinde SSL (Secure Sockets Layer) kullanımı önerilmektedir. Next.js gibi modern web uygulamaları genellikle HTTPS üzerinden çalışır. SSL sertifikası kurulumunu gerçekleştirdikten sonra, aşağıdaki gibi bir konfigürasyon kullanılabilir:

“`nginx
server {
listen 443 ssl;
server_name example.com;

ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;

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_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;

proxy_read_timeout 86400;
}
}
“`

SSL sertifikalarının `ssl_certificate` ve `ssl_certificate_key` direktifleri ile belirtilmesi gereklidir. Bu şekilde, HTTPS üzerinden iletişim sağlanır ve kullanıcı verileri şifrelenir.

Performans İyileştirmeleri

Nginx ile Node.js uygulaması çalıştırırken performans iyileştirmeleri için bazı ek ayarlar yapılabilir. Aşağıdaki direktifler, Nginx’in performansını artırmaya yardımcı olabilir:

“`nginx
http {
proxy_buffering on; Varsayılan olarak açık, büyük dosyalarda performansı artırır
proxy_buffers 16 16k; Belirli sayıda üst veri tamponu
proxy_buffer_size 32k; Tampon boyutunun ayarı
}
“`

Bu ayarlar, daha yüksek trafiğe sahip uygulamalarda yanıt sürelerini iyileştirirken, sunucu kaynaklarını daha verimli kullanma imkanı sunar.

Sonuç

Nginx, Node.js uygulamalarının performansını artırmak ve WebSocket desteği sağlamak için etkili bir vekil sunucu rolü oynamaktadır. Doğru yapılandırmalar ile Nginx, yalnızca istemciden sunucuya gelen istekleri yönlendirmekle kalmaz, aynı zamanda güvenli veri iletimi için SSL desteği ile de entegrasyon sağlar. Bu yapılandırmalar, uygulamanın ölçeklenmesini kolaylaştırır ve daha güvenilir bir kullanıcı deneyimi sunar.

CEVAP VER

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

SON İÇERİKLER

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