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.

Kategoriler
Firewall Yazılar

Ubuntu 24.04 Üzerinde Samba Kurulumu ve Kullanıcı Yetkilendirme

Ubuntu 24.04 Üzerinde Samba Kurulumu ve Kullanıcı Yetkilendirme Dokümanı

Bu dokümanda, Ubuntu 24.04 sunucusu üzerinde Samba servisinin kurulumu, yapılandırılması ve bir kullanıcıya belirli bir paylaşıma erişim yetkisi verilmesi adım adım anlatılmıştır. Yapılandırma, örnek bir dosya paylaşımı (örneğin 5651 logları için) içermektedir.

1. Sistem Güncelleme ve Gerekli Paketlerin Kurulumu

sudo apt update && sudo apt upgrade -y
sudo apt install samba -y

2. Paylaşım Dizininin Oluşturulması

sudo mkdir -p /srv/samba/share5651
sudo chown root:root /srv/samba/share5651
sudo chmod 755 /srv/samba/share5651

3. Samba Kullanıcısının Oluşturulması

sudo adduser berqlog
sudo smbpasswd -a berqlog

Not: Kullanıcı şifresi girilirken hem sistem hem de Samba parolası olarak ayarlandığından emin olun.

4. Samba Konfigürasyon Dosyasının Düzenlenmesi

Aşağıdaki içerik ile /etc/samba/smb.conf dosyasını düzenleyin:

[global]
    workgroup = WORKGROUP
    netbios name = FIRMA_ADI_SMB
    server string = Firma Log Sunucusu
    security = user
    map to guest = Bad User
    dns proxy = no
    server min protocol = NT1
    ntlm auth = yes
    log file = /var/log/samba/log.%m
    max log size = 1000
    logging = file
    panic action = /usr/share/samba/panic-action %d
    server role = standalone server
    obey pam restrictions = yes
    unix password sync = yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    pam password change = yes
    usershare allow guests = no
    idmap config * : backend = tdb

[share5651]
    path = /srv/samba/share5651
    read only = no
    valid users = berqlog
    create mask = 0644
    directory mask = 0755
    browseable = yes
    guest ok = no

5. Yapılandırma Testi

testparm

Yapılandırma hatası olmadığından emin olun.

6. Samba Servisini Yeniden Başlatma

sudo systemctl restart smbd
sudo systemctl enable smbd

7. Güvenlik Duvarı (Varsa) Ayarları

sudo ufw allow 'Samba'

8. Paylaşım Erişimi

Windows üzerinden erişmek için:

\<ubuntu_ip_adresi>\share5651

Kullanıcı adı: berqlog, Parola: Kurulumda belirlenen şifre.

9. Log ve Sorun Giderme

Log dosyaları:

/var/log/samba/log.smbd
/var/log/samba/log.nmbd
/var/log/samba/log.<client_ip_or_name>

Ekstra Notlar:

  • ntlm auth = yes parametresi, eski Windows istemciler için kimlik doğrulama uyumluluğu sağlar.
  • server min protocol = NT1, eski Windows sürümleriyle uyum sağlamak için eklenmiştir. Modern istemcilerde bu ayar güvenlik nedeniyle SMB2 veya daha yüksek bir protokole yükseltilmelidir.

Bu yapılandırma, temel dosya paylaşımı ve kullanıcı yetkilendirme ihtiyaçlarını karşılamaktadır. Daha gelişmiş senaryolar için ACL, audit modülü veya domain entegrasyonu gibi ek yapılandırmalar gerekebilir.