🧠 Nginx Proxy Manager (NPM)

Yönetim

  • URL: https://npm.eren.ink (port 81)
  • Admin: eren@eren.ink
  • Şifre: changeme (henüz değiştirilmedi)
  • API: http://localhost:81/api/ (Swagger: /api/schema)

🔑 NPM 2.15.1 API İpuçları

Proxy Host Oluşturma

POST /api/nginx/proxy-hosts
{
  "domain_names": ["example.eren.ink"],
  "forward_scheme": "http",
  "forward_host": "container_name",
  "forward_port": 8080,
  "allow_websocket_upgrade": false,
  "access_list_id": 0,
  "certificate_id": 0,
  "ssl_forced": true,
  "http2_support": true,
  "block_exploits": true,
  "caching_enabled": false
}

Sertifika (Let’s Encrypt)

POST /api/nginx/certificates
{
  "provider": "letsencrypt",
  "nice_name": "example.eren.ink",
  "domain_names": ["example.eren.ink"],
  "meta": {"dns_challenge": false}
}

⚠️ letsencrypt_email ve letsencrypt_agree schema’da YOK — ekleme yapma, 400 alırsın.

Proxy Host Güncelleme (PUT)

PUT /api/nginx/proxy-hosts/{id}
{ ... sadece izinli alanlar ... }

⚠️ Tüm response alanlarını gönderme! Sadece whitelist’tekiler: domain_names, forward_scheme, forward_host, forward_port, certificate_id, ssl_forced, hsts_enabled, hsts_subdomains, trust_forwarded_proto, http2_support, block_exploits, caching_enabled, allow_websocket_upgrade, access_list_id, advanced_config, enabled, meta, locations

id, created_on, updated_on, owner_user_id → “additional properties” hatası locations: null → “must be array” hatası

🐛 Sık Karşılaşılan Sorunlar

Orphan nginx config → 502

NPM DB’den host silinse bile /data/nginx/proxy_host/*.conf dosyaları silinmez. Aynı şekilde /data/nginx/custom/http.conf da orphan olabilir.

# Sorunlu dosyaları bul
docker exec nginx-proxy-manager grep -rl "DOMAIN.eren.ink" /etc/nginx/ /data/
 
# Test
docker exec nginx-proxy-manager nginx -t
 
# Düzelt
docker exec nginx-proxy-manager rm /data/nginx/proxy_host/OLD.conf
docker exec nginx-proxy-manager rm /data/nginx/custom/http.conf  # orphan ise
 
# Reload (container içinde)
docker exec nginx-proxy-manager nginx -s reload

❌ ASLA yapma

# HOST'TA nginx -s reload — yanlış process'i reload eder
sudo nginx -s reload  # ❌
systemctl reload nginx  # ❌
 
# DOĞRUSU — container içinde
docker exec nginx-proxy-manager nginx -s reload  # ✅

Bu hata bir kez stack outage yarattı (metube dahil tüm 443 trafiği koptu).

Token Yönetimi

  • API token 24 saat expire olur
  • Her session’da yenile:
import urllib.request, json
req = urllib.request.Request(
    "http://localhost:81/api/tokens",
    data=json.dumps({"identity": "eren@eren.ink", "secret": "changeme"}).encode(),
    headers={"Content-Type": "application/json"},
    method="POST",
)
token = json.loads(urllib.request.urlopen(req).read())["token"]