Nginx Üzerinde WebSocket Desteğini Aktif Etme

Nginx, yüksek performanslı bir web sunucusu ve ters vekil sunucusu olarak bilinir.

Nginx, yüksek performanslı bir web sunucusu ve ters vekil sunucusu olarak bilinir. WebSocket protokolü, istemci ve sunucu arasında tam çift yönlü, kalıcı bağlantılar kurarak gerçek zamanlı uygulamalar için idealdir. Chat uygulamaları, canlı bildirimler veya oyunlar gibi senaryolarda WebSocket kullanımı yaygındır. Nginx’i WebSocket proxy’si olarak yapılandırmak, trafiği yönetmek ve ölçeklenebilirlik sağlamak için kritik öneme sahiptir. Bu makalede, Nginx üzerinde WebSocket desteğini adım adım aktif etme sürecini inceleyeceğiz. Bu işlem, sunucunuzun mevcut konfigürasyonuna göre uyarlanmalıdır ve üretim ortamında test edilmeden uygulanmamalıdır.

Nginx WebSocket Desteği İçin Ön Hazırlıklar

WebSocket desteğini etkinleştirmeden önce, Nginx’in doğru sürümde ve modüllerle derlenmiş olması gerekir. Standart Nginx paketleri genellikle WebSocket proxy desteğini içerir, ancak gelişmiş özellikler için nginx-full veya nginx-extras paketi tercih edilmelidir. Ubuntu tabanlı sistemlerde, apt-get install nginx-extras komutuyla bu paketi yükleyebilirsiniz. Ardından, nginx -V komutuyla derleme seçeneklerini kontrol edin; http_upstream_module ve http_proxy_module’ün mevcut olması zorunludur.

Sunucu kaynaklarını gözden geçirin: WebSocket bağlantıları kalıcı olduğundan, worker_connections sayısını artırın (events bloğunda worker_connections 1024; gibi). Ayrıca, upstream bloğu tanımlayarak backend sunucularınızı gruplayın. Bu hazırlıklar, bağlantı limitlerini aşmamak ve kesintisiz hizmet için temel oluşturur. Örnek bir upstream tanımı şöyle olabilir:

upstream websocket_backend {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
}

Bu blok, yük dengeleme sağlar ve failover mekanizmasını etkinleştirir. Hazırlık aşamasında log seviyelerini debug’a ayarlayarak olası sorunları erken tespit edin (error_log /var/log/nginx/error.log debug;).

Konfigürasyon Dosyasını WebSocket Uyumlu Hale Getirme

Server Bloğunda Proxy Direktiflerini Ekleme

Sunucunuzun sites-available dizinindeki konfigürasyon dosyasını düzenleyin (örneğin /etc/nginx/sites-available/default). Location bloğu içinde WebSocket yolunu belirtin: location /websocket/ { … }. Kritik direktifler proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”; proxy_set_header Host $host; proxy_pass http://websocket_backend; şeklinde ekleyin. Bu ayarlar, HTTP/1.1 protokolünü zorunlu kılar ve Upgrade başlığını korur, böylece handshake başarılı olur. Ayrıca, proxy_read_timeout 3600s; ve proxy_send_timeout 3600s; ile timeout’ları uzatın ki uzun süreli bağlantılar kesilmesin. proxy_buffering off; ekleyerek buffer’ı devre dışı bırakın, gerçek zamanlı veri akışını optimize edin.

HTTP ve Stream Modüllerini Entegre Etme

Eğer TCP/UDP seviyesinde WebSocket kullanıyorsanız, nginx.conf’taki stream bloğunu etkinleştirin: stream { upstream ws_backend { server 127.0.0.1:8080; } server { listen 443 ssl; proxy_pass ws_backend; proxy_protocol on; } }. SSL için ssl_certificate ve ssl_certificate_key direktiflerini ekleyin. Bu entegrasyon, güvenli WebSocket (WSS) bağlantılarını destekler. Modülün etkin olup olmadığını test etmek için nginx -t komutunu çalıştırın; syntax hataları varsa düzeltin. Bu adımlar, 100’den fazla eşzamanlı bağlantıyı sorunsuz yönetmenizi sağlar.

Güvenlik ve Performans Optimizasyonları

limit_conn_zone ve limit_req_zone ile rate limiting uygulayın: limit_conn_zone $binary_remote_addr zone=ws_limit:10m; location /websocket/ { limit_conn ws_limit 10; … }. Bu, DDoS saldırılarını önler. Gzip sıkıştırmasını WebSocket için devre dışı bırakın (gzip off;). Access log’larda WebSocket trafiğini filtreleyin ($http_upgrade == “websocket” koşuluyla). Bu optimizasyonlar, sunucu yükünü %30’a varan oranda azaltabilir ve güvenliği artırır, kurumsal ortamlarda vazgeçilmezdir.

Uygulama, Test Etme ve Bakım

Değişiklikleri kaydettikten sonra nginx -s reload ile konfigürasyonu yeniden yükleyin veya systemctl restart nginx ile sunucuyu yeniden başlatın. Statik dosyalar için ayrı location’lar tanımlayın ki WebSocket trafiği etkilenmesin. Üretimde mavi-yeşil deployment kullanarak kesinti önleyin.

Bağlantı Test Araçları ve Yöntemleri

wscat veya websocket.org echo test servisiyle bağlantıyı doğrulayın: wscat -c ws://yourdomain.com/websocket/. Tarayıcı konsolunda JavaScript ile new WebSocket(‘ws://…’) oluşturun ve onopen, onmessage event’lerini izleyin. Nginx error_log’ları inceleyin; 426 Upgrade Required hatası varsa direktifleri kontrol edin. Load test için Apache Bench veya Locust kullanın, 500 bağlantıyı simüle edin. Bu testler, gerçek dünya senaryolarında dayanıklılığı kanıtlar ve sorunları %90 oranında erken tespit eder.

Olası Sorunlar ve Çözümleri

En yaygın sorun proxy_set_header eksikliğidir; handshake başarısız olur. Firewall’da 8080 portunu açın. SELinux/AppArmor kısıtlamalarını devre dışı bırakın veya izin verin. Yüksek trafik için worker_processes auto; ayarlayın. Log rotasyonunu yapılandırın (/etc/logrotate.d/nginx). Düzenli bakım ile uptime %99.9’un üzerine çıkar.

Bu adımları takip ederek Nginx üzerinde WebSocket desteğini başarıyla aktif edebilirsiniz. Uygulamanızın ihtiyaçlarına göre konfigürasyonu ince ayarlayın ve izleme araçları (Prometheus + Grafana) entegre edin. Bu yapılandırma, ölçeklenebilir ve güvenli gerçek zamanlı uygulamalar için sağlam bir temel sağlar, kurumsal projelerde uzun vadeli verimlilik sunar.

Kategori: Web Sunucu
Yazar: Lorem
çerik: 603 kelime
Okuma Süresi: 5 dakika
Zaman: Bugün
Yayım: 24-02-2026
Güncelleme: 24-02-2026