Geçtiğimiz günlerde Nginx Proxy Manager kullanırken oldukça ilginç bir sorunla karşılaştım. İlk bakışta Cloudflare, DNS veya Plesk kaynaklı gibi görünen bu problem, aslında Docker’ın varsayılan ulimit değerinden kaynaklanıyordu.
Sunucumda yaklaşık 255 adet Proxy Host tanımı bulunuyordu. Yeni bir host eklediğimde, siteye hiçbir şekilde erişemiyordum. Daha da ilginç olanı, mevcut hostlarda yaptığım değişiklikler de uygulanmıyordu.
Belirtiler
Karşılaştığım sorunlar şunlardı:
- Yeni eklenen Proxy Host çalışmıyordu.
- Mevcut bir hostu Disable edip tekrar Enable yaptığımda değişiklik uygulanmıyordu.
- SSL veya yönlendirme değişiklikleri aktif olmuyordu.
- Docker container yeniden başlatıldığında ise tüm değişiklikler sorunsuz şekilde çalışıyordu.
Bu nedenle ilk etapta sorunu şu bileşenlerde aradım:
- DNS kayıtları
- Cloudflare
- Plesk
- SSL sertifikaları
- Nginx Proxy Manager yapılandırması
- Docker network ayarları
Her şey normal görünüyordu.
Docker Restart Neden Sorunu Çözüyordu?
İşin kafa karıştıran kısmı buydu.
Her yeni host eklediğimde veya bir host üzerinde değişiklik yaptığımda, Docker container’ını yeniden başlatırsam sorun ortadan kalkıyordu.
Bu durum, Nginx Proxy Manager’ın konfigürasyonu okuyamadığını değil, yeni yapılandırmaları uygulayamadığını düşündürdü.
Araştırmayı Docker container limitleri üzerine yoğunlaştırdım.
Asıl Sorun: ulimit nofile
Container içerisindeki nofile limitini kontrol ettiğimde varsayılan değerin 1024 olduğunu gördüm.
ulimit -n
1024Bu değeri test amacıyla 65536’ya yükselttim.
services:
npm:
image: jc21/nginx-proxy-manager:latest
ulimits:
nofile:
soft: 65536
hard: 65536Container yeniden oluşturulduktan sonra sorun tamamen ortadan kalktı.
- Yeni hostlar sorunsuz çalışmaya başladı.
- Enable/Disable işlemleri anında uygulanmaya başladı.
- Docker restart ihtiyacı ortadan kalktı.
Neden Böyle Oluyor?
Linux sistemlerde her açık dosya veya ağ bağlantısı bir File Descriptor kullanır.
Nginx ise birçok işlem için File Descriptor tüketir:
- Dinlenen portlar
- Proxy bağlantıları
- SSL sertifikaları
- Log dosyaları
- Socket bağlantıları
- Konfigürasyon dosyaları
Host sayısı arttıkça ve aktif bağlantılar çoğaldıkça kullanılan descriptor sayısı da artar.
Container içerisindeki limit 1024 olduğunda, belirli bir noktadan sonra Nginx yeni işlemler için gerekli descriptor’ları alamaz. Ancak çoğu zaman tamamen çökmez.
Bunun yerine sessizce şu belirtiler ortaya çıkabilir:
- Yeni Proxy Host çalışmaz.
- Yapılan değişiklikler uygulanmaz.
- Enable/Disable işlemleri etkisiz kalır.
- Bazı siteler yanıt vermez.
- Docker restart sonrası her şey geçici olarak düzelir.
Benim yaşadığım senaryoda yaklaşık 255 Proxy Host bulunuyordu ve bu davranışın ortaya çıkması oldukça mantıklı görünüyordu.
Çözüm
Docker Compose dosyasında nofile limitini yükseltmek yeterli oldu.
ulimits:
nofile:
soft: 65536
hard: 65536Ardından container’ı yeniden oluşturmak gerekiyor.
docker compose down
docker compose up -dSonuç
Eğer Nginx Proxy Manager kullanıyorsanız ve:
- Yeni eklediğiniz host çalışmıyorsa,
- Enable/Disable işlemleri uygulanmıyorsa,
- Yapılan değişiklikler aktif olmuyorsa,
- Sorun yalnızca Docker yeniden başlatıldığında düzeliyorsa,
Cloudflare, DNS veya Plesk tarafında saatler harcamadan önce Docker container içindeki ulimit nofile değerini kontrol etmenizi öneririm.
Benim için sorunun kaynağı Nginx Proxy Manager, Cloudflare veya Plesk değildi. Asıl problem, Docker container’ının varsayılan 1024 File Descriptor limitiymiş.
Bazen en karmaşık görünen sorunların arkasında, yıllardır hiç dokunmadığımız varsayılan bir ayar yatabiliyor.





