Nginx Uygulama Sunucu Konfigürasyonu
Bir web uygulamasını çalıştırmak kolay. Onu dış dünyaya güvenli, hızlı ve dayanıklı biçimde açmak farklı bir iş. Node, Python veya PHP uygulamanız 3000 portunda ayakta olabilir; ama kullanıcının tarayıcısı 80 ve 443'e bakar. Arada duran katman genellikle Nginx olur.
Aşağıda sıfırdan çalışan bir ters proxy kurulumu var. Komutları kendi sunucunuzda deneyerek ilerleyin. Terminalde rahat değilseniz, Linux terminali için hazırladığımız başlangıç rehberi iyi bir ısınma turu olur.
Nginx Kurulumu ve Konfigürasyon Mantığı
Nginx konfigürasyon dosyaları düz metindir. Sözdizimi basittir: yönerge, boşluk, değer, noktalı virgül. Bloklar süslü parantezle iç içe geçer. Zorluk sözdiziminde değil, hangi dosyanın nereden okunduğunu anlamakta.
Dizin yapısını tanımak
- /etc/nginx/nginx.conf — ana dosya. Worker sayısı, log formatı, gzip gibi global ayarlar burada.
- /etc/nginx/sites-available/ — site tanımlarını yazdığınız yer. Debian/Ubuntu geleneği.
- /etc/nginx/sites-enabled/ — aktif siteler. Buradaki dosyalar sites-available'a symlink'tir.
- /etc/nginx/conf.d/ — RHEL tarafında sitelerin doğrudan yazıldığı dizin.
- /var/log/nginx/ — access.log ve error.log. Sorun çözerken ilk bakılacak yer.
Kural şu: ana dosyadaki include satırı hangi dizini gösteriyorsa, konfigürasyonunuz oraya gider. Emin değilseniz nginx.conf'u açıp include satırlarını okuyun.
İlk server bloğu
Yeni bir dosya açın: /etc/nginx/sites-available/uygulama. İçeriği şu iskelete benzeyecek:
server {
listen 80;
server_name uygulama.example.com;
access_log /var/log/nginx/uygulama.access.log;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
Üç kritik nokta var:
- server_name alan adıyla birebir eşleşmeli. Eşleşme olmazsa Nginx varsayılan sunucuya düşer.
- proxy_pass hedefinde 127.0.0.1 kullanın, localhost yazmayın. IPv6 çözümlemesi yüzünden bağlantı reddi alabilirsiniz.
- Uygulamanız Docker içindeyse hedef adres konteyner adı veya köprü IP'si olur. Konteyner ağlarına yabancıysanız Docker başlangıç rehberi işinizi kolaylaştırır.
Aktifleştirme ve test döngüsü
- Symlink kurun: ln -s /etc/nginx/sites-available/uygulama /etc/nginx/sites-enabled/
- Sözdizimini doğrulayın: nginx -t
- Kesintisiz yeniden yükleyin: systemctl reload nginx
restart yerine reload alışkanlığı edinin. Reload açık bağlantıları düşürmez. Ayrıca nginx -t başarısızken asla reload çağırmayın; hatalı dosya servisi durdurabilir.
Ters Proxy'yi Üretime Hazır Hale Getirmek
Yukarıdaki blok çalışır ama eksiktir. Uygulamanız istemcinin gerçek IP'sini görmez, WebSocket bağlantıları kopar, statik dosyalar boşuna Node üzerinden geçer.
Başlıkları doğru iletmek
location bloğunun içine şu satırları ekleyin:
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Son üç satır WebSocket ve HTTP/1.1 keep-alive için gereklidir. Framework'ünüz "trust proxy" ayarını da açmalı; aksi halde X-Forwarded-Proto'yu yok sayar ve HTTPS yönlendirmelerinde döngüye girersiniz.
Statik dosya, sıkıştırma ve zaman aşımı
| Yönerge | İşi | Pratik değer |
|---|---|---|
| proxy_read_timeout | Uygulamadan yanıt bekleme süresi | 60s, uzun raporlarda 300s |
| client_max_body_size | Yükleme boyutu sınırı | 10m veya ihtiyaca göre |
| gzip_types | Sıkıştırılacak MIME türleri | json, css, js, svg |
| expires | Tarayıcı önbellek ömrü | Hash'li dosyalarda 1y |
Statik varlıkları ayrı bir location ile diskten servis edin:
© 2026 Yazılım Atölyesilocation /static/ {
alias /var/www/uygulama/static/;
expires 30d;
access_log off;
}