Kategoriler
Proxy Manager

Nginx Proxy Manager’da Yeni Host Çalışmıyor mu? Sorun Docker ulimit Ayarı Olabilir

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

1024

Bu değeri test amacıyla 65536’ya yükselttim.

services:
  npm:
    image: jc21/nginx-proxy-manager:latest

    ulimits:
      nofile:
        soft: 65536
        hard: 65536

Container 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: 65536

Ardından container’ı yeniden oluşturmak gerekiyor.

docker compose down
docker compose up -d

Sonuç

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir