Rehberler Uzun Okuma Deployment

Nginx + uWSGI doğru kurulum

Reverse proxy, socket ve static dosya yönetimi.

24 Şubat 2026 18 dk okuma
Paylaş
X in

Giriş

Nginx ve uWSGI kombinasyonu Python web uygulamaları için endüstri standardıdır. Nginx TLS sonlandırma, static dosya sunumu, gzip sıkıştırma ve rate limiting üstlenir; uWSGI yalnızca dinamik WSGI isteklerini işler.

Bu ayrım performans ve güvenlik sağlar: Nginx yüksek eşzamanlı bağlantıları verimli yönetir, uWSGI Python interpreter'ı izole eder.

Bu rehberde unix socket bağlantısı, uwsgi_params, location blokları ve yaygın hata senaryolarını inceliyoruz.

Unix Socket Bağlantısı

uWSGI socket = /run/uwsgi/app.sock ile unix domain socket oluşturur. Nginx uwsgi_pass unix:/run/uwsgi/app.sock; ile bağlanır. TCP'ye göre %10-30 daha düşük gecikme ve dosya sistemi izinleriyle güvenlik sağlar.

chmod-socket = 660 ve chown-socket = www-data:www-data nginx kullanıcısının socket'e yazmasını sağlar. Socket dizini /run/uwsgi systemd-tmpfiles ile oluşturulmalıdır.

[uwsgi]
socket = /run/uwsgi/myapp.sock
chmod-socket = 660
chown-socket = www-data:www-data
vacuum = true

Nginx Location Yapılandırması

location / bloğu tüm dinamik istekleri uWSGI'ye yönlendirir. include uwsgi_params; standart CGI parametrelerini set eder. uwsgi_param SCRIPT_NAME /; alt dizin deploy'larında önemlidir.

location /static/ alias /var/www/static/; ile static dosyalar doğrudan Nginx'ten sunulur; uWSGI'ye gitmez.

  • include uwsgi_params zorunlu
  • static dosyaları Nginx'ten sunun
  • upstream ile failover tanımlayın
  • client_max_body_size upload limiti
upstream uwsgi_backend {
    server unix:/run/uwsgi/myapp.sock;
}

server {
    listen 80;
    server_name example.com;
    location /static/ { alias /var/www/static/; }
    location / {
        include uwsgi_params;
        uwsgi_pass uwsgi_backend;
    }
}

SSL Termination

Nginx'te listen 443 ssl; ve sertifika yolları tanımlanır. uWSGI yalnızca HTTP alır; HTTPS Nginx'te sonlanır. proxy_set_header veya uwsgi_param ile X-Forwarded-Proto https iletilir.

Let's Encrypt certbot --nginx ile otomatik sertifika ve yenileme kurulur. Django SECURE_PROXY_SSL_HEADER ayarı bu header'ı tanır.

server {
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    location / {
        include uwsgi_params;
        uwsgi_param HTTPS on;
        uwsgi_pass unix:/run/uwsgi/myapp.sock;
    }
}

Performans Ayarları

Nginx worker_processes auto; ve worker_connections 1024; yüksek eşzamanlılık sağlar. uwsgi_buffers ve uwsgi_buffer_size büyük yanıtlar için ayarlanır.

gzip on; ve gzip_types text/css application/javascript; bant genişliği tasarrufu sağlar. uWSGI tarafında post-buffering büyük POST isteklerini tamponlar.

  1. Static dosyaları uWSGI'den ayırın
  2. gzip sıkıştırmayı etkinleştirin
  3. unix socket kullanın
  4. worker sayısını CPU'ya göre ayarlayın

Hata Ayıklama

502 Bad Gateway genelde socket izin hatası veya uWSGI çalışmıyor demektir. ls -la /run/uwsgi/ ile socket varlığını kontrol edin. uwsgi.log'da import hataları arayın.

504 Gateway Timeout uWSGI harakiri veya Nginx proxy_read_timeout aşımıdır. Her iki tarafta timeout değerlerini uyumlu ayarlayın.

# Nginx timeout ayarları
uwsgi_read_timeout 60;
uwsgi_send_timeout 60;
proxy_read_timeout 60;
Static dosyaları asla uWSGI'ye yönlendirmeyin; bu en yaygın performans hatasıdır.

Docker Ortamında

Docker Compose'da nginx ve uwsgi ayrı servislerdir; paylaşılan volume ile socket mount edilir. /run/uwsgi volume her iki konteynerde aynı path'te olmalıdır.

Alternatif olarak internal TCP (uwsgi_pass 172.x.x.x:8000) kullanılabilir; unix socket kadar hızlı değildir ama volume paylaşımı gerektirmez.

services:
  uwsgi:
    volumes: ["socket:/run/uwsgi"]
  nginx:
    volumes: ["socket:/run/uwsgi"]
volumes:
  socket:

Sonuç

Nginx + uWSGI entegrasyonu doğru yapılandırıldığında yüksek performanslı ve güvenli bir üretim yığını oluşturur. Static/dinamik ayrımı, unix socket ve SSL termination temel üçlüdür.

Konfigürasyonları infrastructure-as-code ile yönetin; her değişikliği staging'de nginx -t ve uwsgi --ini ile doğrulayın.