Tek bir sunucuda birden fazla uygulama çalıştırdığınızda her birine ayrı port üzerinden erişmek hızla içinden çıkılmaz bir hale gelir. app.example.com:8080, panel.example.com:9000, wiki.example.com:3000 gibi adresleri hem hatırlamak hem de her biri için ayrı SSL sertifikası ayarlamak, güvenlik duvarında portları açık tutmak ciddi bir uğraş demektir. Nginx Proxy Manager (kısaca NPM) tam olarak bu karmaşayı ortadan kaldırmak için tasarlanmış, açık kaynak ve ücretsiz bir araçtır. Arka planda güçlü Nginx web sunucusunu çalıştırır, ancak yapılandırma dosyalarıyla boğuşmak yerine size temiz bir web arayüzü sunar.
Kıdemli bir sistem yöneticisi olarak yıllarca .conf dosyalarını elle düzenledikten sonra NPM'i gördüğümde en çok takdir ettiğim şey, Let's Encrypt sertifikalarının tek tıkla alınıp otomatik yenilenmesiydi. Bir müşteriye "yeni uygulamanı yayına almak beş dakika sürer" dediğimde artık abartmıyorum. Bu rehberde NPM'in ne olduğunu, ters proxy mantığını, Docker ile kurulumunu, proxy host tanımlamayı, otomatik SSL almayı ve erişim listeleriyle güvenliği pratik örneklerle adım adım anlatacağım. Amacım, rehberi bitirdiğinizde kendi sunucunuzda ilk proxy host'unuzu güvenle ayağa kaldırabilmeniz.
Nginx Proxy Manager Neden Tercih Ediliyor#
Nginx Proxy Manager'ın popülerliği tek bir cümleyle özetlenebilir: Nginx'in gücünü, komut satırı bilgisi gerektirmeden sunar. Nginx dünyanın en yaygın kullanılan ters proxy ve web sunucularından biridir, ancak yapılandırması server, location, upstream blokları ve düzinelerce direktif içerir. Yeni başlayan biri için bir yazım hatası tüm siteyi kapatabilir. NPM bu katmanı soyutlar; siz arayüzde alan adı ve hedef adresi girersiniz, o da geçerli bir Nginx yapılandırması üretir.
Aracın en güçlü yanı SSL yönetimidir. Let's Encrypt ile ücretsiz sertifika almak normalde certbot kurulumu, doğrulama yöntemi seçimi ve yenileme cron görevleri gerektirir. NPM bunların hepsini kutu içinde hallederek sertifikayı otomatik alır ve süresi dolmadan yeniler. Aşağıdaki tablo NPM'i geleneksel yaklaşımlarla kıyaslar.
| Özellik | Elle Nginx + Certbot | Nginx Proxy Manager | Traefik |
|---|---|---|---|
| Yapılandırma | .conf dosyaları | Web arayüzü | Etiket/YAML |
| SSL otomasyonu | Manuel kurulum | Tek tık, otomatik | Otomatik |
| Öğrenme eğrisi | Yüksek | Düşük | Orta-yüksek |
| Görsel panel | Yok | Var | Sınırlı |
| Erişim kontrolü | Elle yazılır | Hazır arayüz | Middleware |
| Docker uyumu | İyi | Çok iyi | Mükemmel |
Traefik gibi alternatifler konteyner yoğun ortamlarda güçlüdür ama daha dik bir öğrenme eğrisi ister. NPM, özellikle küçük ve orta ölçekli sunucularda, ev laboratuvarlarında ve birkaç uygulamayı düzenli tutmak isteyen ekiplerde en pratik dengeyi sunar.
Ters Proxy Mantığı ve NPM'in Rolü#
NPM'i anlamak için önce ters proxy kavramını netleştirmek gerekir. Sıradan (ileri) bir proxy, istemcinin isteğini dışarıya taşır; ters proxy ise tam tersini yapar. Dışarıdan gelen istekleri karşılar ve arka plandaki doğru uygulamaya yönlendirir. Ziyaretçi yalnızca proxy'nin adresini görür, arkadaki sunucuların iç yapısını asla bilmez.
Somut bir senaryo düşünelim. Sunucunuzda üç uygulama var: 3000 portunda bir blog, 8080 portunda bir yönetim paneli ve 5601 portunda bir log görüntüleyici. İnternet üzerinden bu portları tek tek açmak hem güvensiz hem de çirkindir. NPM devreye girer, 80 ve 443 portlarını dinler, gelen alan adına bakar ve isteği uygun iç adrese iletir.
# NPM'in arka planda ürettiği yapıya benzer basit bir örnek
server {
server_name blog.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Bu blokları elle yazmak yerine NPM arayüzünde blog.example.com alan adını 127.0.0.1 ve 3000 portuna eşlerseniz aynı sonucu saniyeler içinde alırsınız. Nginx'in temel kavramlarını daha derinlemesine öğrenmek isterseniz Ubuntu üzerinde Nginx kurulumu rehberimiz iyi bir başlangıç noktasıdır. Ters proxy sayesinde tek bir giriş noktası, merkezi SSL, tek yerden erişim kontrolü ve temiz alan adı yapısı elde edersiniz.
Docker ile Nginx Proxy Manager Kurulumu#
NPM'in önerilen kurulum yöntemi Docker'dır çünkü tüm bağımlılıkları (Nginx, veritabanı, Node uygulaması) tek bir tanımlı ortamda paketler. Sunucunuzda Docker ve Docker Compose kurulu değilse önce onları yükleyin. Ubuntu üzerinde hızlı kurulum şöyledir.
# Docker ve Compose eklentisini kur
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Oturumu yenilemek için çıkış yapıp tekrar bağlanın
docker --version
docker compose version
Ardından NPM için bir çalışma dizini oluşturup docker-compose.yml dosyasını hazırlayın. NPM varsayılan olarak dahili bir SQLite veritabanı kullanabilir, ancak üretim ortamı için ayrı bir MariaDB önerilir.
services:
npm:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- "80:80" # HTTP trafiği
- "443:443" # HTTPS trafiği
- "81:81" # Yönetim arayüzü
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "guclu_bir_parola"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: jc21/mariadb-aria:latest
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "root_parola"
MYSQL_DATABASE: "npm"
MYSQL_USER: "npm"
MYSQL_PASSWORD: "guclu_bir_parola"
volumes:
- ./mysql:/var/lib/mysql
Dosyayı kaydettikten sonra dizini ayağa kaldırmak tek komuttur.
docker compose up -d
docker compose ps # Konteynerlerin çalıştığını doğrulayın
docker compose logs -f npm # İlk açılış günlüklerini izleyin
Birkaç saniye içinde iki konteyner de Up durumuna geçer. Konteynerlerinizi tek tek komut satırından yönetmek yerine görsel bir panel istiyorsanız Portainer kurarak NPM dahil tüm servislerinizi tek ekrandan izleyebilirsiniz. Bu kurulumu barındırmak için düşük gecikmeli bir altyapı önemlidir; kendi projeleriniz için sanal sunucu veya daha yüksek performans gerektiren yükler için VDS sunucu seçeneklerimize göz atabilirsiniz.
İlk Giriş ve Arayüzü Tanımak#
Kurulum tamamlandığında yönetim arayüzü 81 portundan erişilebilir hale gelir. Tarayıcınızda http://sunucu_ip_adresi:81 adresini açın. NPM ilk girişte sabit bir varsayılan hesap sunar ve güvenlik için bunu hemen değiştirmenizi ister.
# NPM varsayılan giriş bilgileri
Email = [email protected]
Password = changeme
İlk girişten sonra sistem sizi kendi e-posta adresinizi ve güçlü bir parolayı belirlemeye zorlar. Bu adımı asla atlamayın; çünkü NPM arayüzünü internete açtığınızda varsayılan bilgilerle bırakmak tüm alan adı yönlendirmelerinizi saldırıya açık hale getirir.
Panelin üst menüsünde dört ana bölüm bulunur. Hosts bölümü proxy host, yönlendirme ve akış tanımlarını içerir. SSL Certificates sertifikalarınızı listeler. Access Lists erişim kontrol kurallarını barındırır. Users ise birden fazla yöneticiyle çalışıyorsanız hesap yönetimini sağlar. Panele alışmak için birkaç dakika ayırın; arayüz sade olsa da her bölümün kendine has ince ayarları vardır. Yönetim portu 81'i mümkünse yalnızca güvenlik duvarınızın arkasından veya VPN üzerinden erişilebilir tutmanızı öneririm.
Proxy Host Ekleme Adım Adım#
NPM'in kalbi proxy host tanımlarıdır. Yeni bir uygulamayı yayına almak için Hosts menüsünden Proxy Hosts sekmesine gidip Add Proxy Host butonuna basın. Karşınıza çıkan formda dört sekme vardır; ilk olarak Details sekmesini dolduracaksınız.
Domain Names alanına uygulamanızın yayınlanacağı alan adını yazın, örneğin blog.example.com. Scheme genellikle http kalır çünkü NPM ile arka uç arasındaki trafik iç ağdadır. Forward Hostname / IP alanına uygulamanın çalıştığı adresi, Forward Port alanına da portunu girin. Aynı Docker ağındaki bir konteyneri hedefliyorsanız IP yerine konteyner adını kullanabilirsiniz.
; Alan adınızın DNS kayıtları sunucu IP'nizi göstermeli
blog.example.com. A 203.0.113.10
panel.example.com. A 203.0.113.10
*.example.com. A 203.0.113.10 ; joker kayıt tercihiyse
Alan adınızın DNS ayarlarını doğru yönlendirmek kritik önemdedir; A kaydı mutlaka sunucunuzun genel IP adresini göstermelidir. Alan adınız yoksa veya yeni bir tane almak istiyorsanız alan adı sayfamızdan hızlıca tedarik edebilirsiniz. Formu doldururken sık kullanılan iki seçeneği de işaretlemenizi öneririm.
# Details sekmesinde önerilen ayarlar
Block Common Exploits = açık ; bilinen saldırı desenlerini engeller
Websockets Support = açık ; canlı panel, sohbet, terminal için
Cache Assets = kapalı ; dinamik uygulamalarda kapalı bırakın
Block Common Exploits seçeneği bilinen zararlı istek kalıplarını filtreler ve neredeyse her senaryoda açık olmalıdır. WebSocket kullanan uygulamalar (canlı panolar, terminal arayüzleri, sohbet sistemleri) için Websockets Support seçeneğini açmayı unutmayın; aksi halde bağlantılar kopar. Save dedikten sonra host listeye eklenir ve NPM arka planda ilgili Nginx yapılandırmasını üretip yeniden yükler. Alan adı çözümlemesi doğruysa uygulamanız artık HTTP üzerinden erişilebilir durumdadır.
Otomatik Let's Encrypt SSL Sertifikası#
Bir uygulamayı yalnızca HTTP üzerinden yayınlamak günümüzde kabul edilemez; tarayıcılar "güvenli değil" uyarısı gösterir ve arama motorları sıralamada ceza uygular. NPM'in en sevdiğim özelliği burada devreye girer: birkaç tıkla ücretsiz ve otomatik yenilenen SSL sertifikası. Proxy host tanımını düzenleyip SSL sekmesine geçin.
SSL Certificate açılır menüsünden Request a new SSL Certificate seçeneğini seçin. Ardından üç kutucuğu işaretleyin ve geçerli bir e-posta adresi girin. Let's Encrypt sertifika süresi bittiğinde bu adrese bilgilendirme gönderir, ancak NPM zaten otomatik yenilediği için müdahale etmeniz gerekmez.
# SSL sekmesinde önerilen yapılandırma
Force SSL = açık ; HTTP'yi otomatik HTTPS'e yönlendirir
HTTP/2 Support = açık ; daha hızlı çoklu istek
HSTS Enabled = açık ; tarayıcıya her zaman HTTPS zorlar
Use a DNS Challenge = kapalı ; standart senaryoda gerekmez
Force SSL seçeneği HTTP isteklerini otomatik olarak HTTPS'e yönlendirir; bu sayede ziyaretçi hangi adresi yazarsa yazsın güvenli bağlantıya düşer. HTTP/2 Support sayfa yükleme hızını artırır. Joker (wildcard) sertifika almak istiyorsanız Use a DNS Challenge seçeneğini açıp DNS sağlayıcınızın API anahtarını girmeniz gerekir; bu yöntem *.example.com gibi tüm alt alanları tek sertifikayla kapsar.
Save dediğinizde NPM, Let's Encrypt ile HTTP-01 doğrulaması yapar. Bu doğrulamanın başarılı olması için 80 portunun internetten erişilebilir ve alan adının sunucuya çözümleniyor olması şarttır. İşlem tamamlandığında yeşil kilit simgesiyle sitenize güvenli erişebilirsiniz. Sertifika yönetimi, güvenlik başlıkları ve daha ileri düzey koruma için SSL çözümlerimizi ve uygulama katmanı saldırılarına karşı WAF hizmetimizi incelemenizi öneririm. Yüksek trafikli veya saldırıya açık projelerde DDoS koruma katmanı da bu kurulumu tamamlar.
Erişim Listeleri ile Güvenliği Sıkılaştırma#
Bazı uygulamalar herkese açık olmalıdır, ancak yönetim panelleri, izleme araçları veya iç servisler yalnızca yetkili kişilere gösterilmelidir. NPM bunun için Access Lists özelliği sunar. Bu listeler iki tür koruma sağlar: HTTP Basic kimlik doğrulaması (kullanıcı adı ve parola) ve IP tabanlı izin/engelleme kuralları.
Yeni bir liste oluşturmak için Access Lists menüsünden Add Access List deyin. Authorization sekmesinde erişecek kullanıcılar için kullanıcı adı ve parola çiftleri tanımlayın. Access sekmesinde ise belirli IP adreslerine izin verip geri kalanını engelleyebilirsiniz.
# Access sekmesi kural örneği
Allow 203.0.113.0/24 ; ofis ağınız
Allow 198.51.100.42 ; ev IP adresiniz
Deny all ; diğer herkesi engelle
Satisfy Any ; parola VEYA IP eşleşmesi yeterli
Satisfy ayarı önemli bir ince noktadır. Any seçilirse kullanıcı ya doğru parolayı girerek ya da izinli bir IP'den bağlanarak erişir. All seçilirse her iki koşulun da sağlanması gerekir, yani hem izinli IP'den bağlanmalı hem de parola girmelidir. İç servisler için genellikle All daha güvenlidir.
Listeyi kaydettikten sonra ilgili proxy host'un Details sekmesine dönüp Access List alanından bu listeyi seçin. Bundan sonra o alan adına yapılan her istek önce erişim kurallarından geçer. Örneğin bir izleme panelini yalnızca ofis ağınıza açmak, geri kalan dünyaya kapalı tutmak bu yöntemle mümkün olur. Güvenlik katmanlarını sunucu tarafında da güçlendirmek istiyorsanız sunucu yönetimi hizmetimiz düzenli güncelleme, güvenlik duvarı yapılandırması ve sıkılaştırma desteği sağlar.
Sık Karşılaşılan Sorunlar ve Çözümleri#
NPM kurulumlarında en sık karşılaşılan sorun SSL sertifikasının alınamamasıdır. Bunun nedeni neredeyse her zaman DNS veya port erişimidir. Sertifika isteği başarısız olursa önce alan adının doğru IP'ye çözümlendiğini ve 80 portunun dışarıdan erişilebilir olduğunu doğrulayın.
# Alan adının doğru IP'ye gittiğini kontrol edin
dig +short blog.example.com
# 80 portunun açık olduğunu dışarıdan test edin
curl -I http://blog.example.com
# NPM günlüklerinde doğrulama hatalarını arayın
docker compose logs npm | grep -i "error\|certbot"
İkinci sık sorun 502 Bad Gateway hatasıdır. Bu, NPM'in arka uç uygulamaya ulaşamadığı anlamına gelir. Genellikle yanlış hedef IP veya port, ya da uygulamanın çalışmıyor olması sebebiyle oluşur. Docker konteynerlerini hedefliyorsanız NPM ve uygulamanın aynı Docker ağında olduğundan emin olun; 127.0.0.1 yerine konteyner adını kullanmanız gerekebilir. Aşağıdaki tablo yaygın hataları ve olası nedenlerini özetler.
| Belirti | Olası Neden | Çözüm |
|---|---|---|
| SSL alınamıyor | 80 portu kapalı | Güvenlik duvarında 80/443 açın |
| SSL alınamıyor | DNS yanlış | A kaydını doğru IP'ye çevirin |
| 502 Bad Gateway | Yanlış hedef port | Forward Port değerini kontrol edin |
| 502 Bad Gateway | Uygulama kapalı | Arka uç konteyneri başlatın |
| Bağlantı kopuyor | WebSocket kapalı | Websockets Support açın |
| Panel açılmıyor | 81 portu engelli | Güvenlik grubunu düzeltin |
Düzenli yedek almak da kurtarıcı olabilir. NPM tüm yapılandırmasını ve sertifikalarını ./data ve ./letsencrypt dizinlerinde tutar; bu iki klasörü yedeklemeniz tüm kurulumu geri getirmenize yeter. Otomatik ve dış konumda saklanan yedekler için yedekleme hizmetimizden faydalanabilir, mevcut kurulumunuzu yeni bir sunucuya taşımak isterseniz site taşıma desteğimizle sorunsuz bir geçiş yapabilirsiniz.
Sıkça Sorulan Sorular#
Nginx Proxy Manager ücretsiz mi#
Nginx Proxy Manager tamamen ücretsiz ve açık kaynak bir projedir; MIT lisansıyla dağıtılır ve hiçbir gizli ücret, abonelik ya da lisans anahtarı gerektirmez. Kaynak kodu herkese açıktır, dilediğiniz gibi inceleyebilir ve kişisel veya ticari projelerinizde kullanabilirsiniz. Kullandığınız Let's Encrypt sertifikaları da ücretsiz olduğu için toplam maliyetiniz yalnızca aracı çalıştırdığınız sunucudan ibarettir.
Nginx Proxy Manager ile normal Nginx arasındaki fark nedir#
Temelde ikisi aynı motoru kullanır çünkü NPM zaten arka planda Nginx çalıştırır; aradaki fark yönetim şeklidir. Klasik Nginx'te yapılandırmayı .conf dosyalarını elle düzenleyerek yaparsınız ve her değişiklikten sonra servisi yeniden yüklersiniz. NPM ise bu işlemleri görsel bir arayüze taşır, SSL sertifikalarını otomatikleştirir ve hata riskini azaltır. Deneyimli yöneticiler ince ayar için hâlâ özel Nginx yapılandırması yazabilirken, çoğu senaryoda NPM'in sunduğu kolaylık fazlasıyla yeterlidir.
Otomatik SSL sertifikaları kendiliğinden yenileniyor mu#
Evet, NPM Let's Encrypt sertifikalarını süre dolmadan önce otomatik olarak yeniler ve bunun için sizin herhangi bir işlem yapmanıza gerek kalmaz. Let's Encrypt sertifikaları doksan gün geçerlidir; NPM arka planda düzenli bir kontrol çalıştırarak süresi yaklaşan sertifikaları yeniler. Yenilemenin sorunsuz çalışması için tek gereken, alan adının doğru IP'ye çözümlenmeye ve 80 portunun erişilebilir olmaya devam etmesidir.
Aynı sunucuda kaç tane proxy host tanımlayabilirim#
Pratikte proxy host sayısında sabit bir sınır yoktur; sınırı belirleyen sunucunuzun kaynakları ve arka uç uygulamalarının yüküdür. NPM yüzlerce alan adını tek bir örnekten yönetebilir çünkü her host yalnızca hafif bir yönlendirme kuralıdır. Asıl kaynak tüketimi proxy'nin kendisinde değil, arkadaki uygulamalardadır. Çok sayıda yoğun uygulama çalıştıracaksanız daha güçlü bir sunucu paketi tercih etmeniz yeterli olacaktır.
Nginx Proxy Manager'ı üretim ortamında kullanmak güvenli mi#
Doğru yapılandırıldığında NPM üretim ortamları için güvenli ve olgun bir çözümdür; birçok kurum ve geliştirici onu canlı sistemlerde kullanır. Güvenli bir kurulum için varsayılan giriş bilgilerini hemen değiştirmeli, yönetim portu 81'i internete kapalı tutmalı, erişim listeleriyle hassas panelleri korumalı ve Block Common Exploits seçeneğini açık bırakmalısınız. Bu önlemleri aldığınızda, önüne bir güvenlik duvarı ve gerekiyorsa WAF katmanı ekleyerek gönül rahatlığıyla yayına alabilirsiniz.
Docker olmadan Nginx Proxy Manager kurabilir miyim#
Resmi olarak önerilen ve en kolay yöntem Docker kurulumudur çünkü tüm bağımlılıklar tek pakette gelir. Docker kullanmadan doğrudan kaynaktan kurmak teknik olarak mümkün olsa da Node.js, veritabanı ve Nginx'i elle yapılandırmayı gerektirir ve resmi destek kapsamı dışındadır. Zaman kazanmak ve güncellemeleri kolaylaştırmak için Docker tabanlı kurulumda kalmanızı, konteynerlerinizi de bir panel üzerinden yönetmenizi öneririm.
Kapanış#
Nginx Proxy Manager, karmaşık Nginx yapılandırmalarını ve manuel SSL yönetimini geride bırakıp sunucunuzdaki tüm uygulamaları tek bir temiz arayüzden yönetmenizi sağlar. Docker ile dakikalar içinde kurulur, proxy host tanımları saniyeler sürer ve Let's Encrypt sertifikaları hiç uğraşmadan otomatik yenilenir. Erişim listeleriyle hassas panelleri korur, yaygın hataları hızlıca çözer ve büyüdükçe yüzlerce alan adını rahatça yönetirsiniz. Kısacası küçük projelerden orta ölçekli üretim kurulumlarına kadar geniş bir yelpazede güvenle kullanabileceğiniz bir araçtır.
Bu kurulumu sağlam bir altyapı üzerinde çalıştırmak performans ve kararlılık açısından fark yaratır. Kendi projeleriniz için düşük gecikmeli sanal sunucu ve yüksek performanslı VDS seçeneklerimizi, uygulamalarınızı kolayca ayağa kaldırmak için App Center çözümlerimizi ve güvenlik için SSL ile sunucu yönetimi hizmetlerimizi inceleyebilirsiniz. Clou.TR ekibi olarak, ters proxy kurulumundan güvenlik sıkılaştırmaya kadar her adımda yanınızdayız; projenizi bugün güçlü bir temele taşımaya başlayabilirsiniz.