Nginx, Caddy veya Traefik gibi diğer ters proxy çözümleriyle karşılaştırıldığında, NPM’nin asıl çekiciliği, proxy ayarlarını, SSL/TLS sertifikalarını ve erişim kontrollerini yönetmek için kullanışlı bir grafiksel kullanıcı arayüzü sağlama yeteneğinde yatmaktadır; bu sayede, çok az komut satırı deneyimi olan kişiler bile bunu erişilebilir hale getirmektedir.
Ancak, diğer ters proxy seçeneklerini denemek istiyorsanız, Nginx ve Caddy için takip etmesi kolay kılavuzlarımıza güvenebilirsiniz. Şimdi konuya geri dönelim. İşte Nginx Proxy Manager’ın başlıca satış noktaları.
NPM’yi Ters Proxy Olarak Neden Kullanmalıyız?
Nginx Proxy Manager’ı ters proxy olarak kullanmanın birçok avantajı olabilir:
- Kullanımı Kolay: Çok teknik bilgiye sahip olmasanız bile, sadece 20-30 dakikada tam fonksiyonlu bir ters proxy kurabilirsiniz.
- Güvenlik: Arka uç sunucularının özelliklerini ve ayrıntılarını gizleyerek ek bir güvenlik katmanı sunabilir.
- Yük Dengeleme: NPM, trafiği birden fazla sunucuya dağıtarak web uygulamalarının performansını ve güvenilirliğini artırabilir.
- SSL Management: Şifrelenmiş trafik için otomatik ve kolay SSL kurulumu ve yenileme süreçleri, HTTPS ile web sitesi güvenliğinin artırılması.
Kurulumun Açıklaması
NPM bir Docker konteynerinde çalışır. Bu nedenle, Docker’ın yüklü olduğu bir sunucunuz olduğundan emin olun. Ancak henüz yoksa endişelenmeyin; sizi düşündük. Ubuntu, Debian, Fedora, Linux Mint, Pop!_OS, Alma ve Rocky Linux gibi hemen hemen tüm büyük Linux dağıtımlarına Docker’ı yüklemeye yönelik kılavuzlarımız, sizi adımlarda kolayca yönlendirecektir.
Şimdi kurulumumuzu açıklığa kavuşturalım. Sunucumuzda, trafiği proxy’leyeceğimiz iki konteynerize örnek uygulamamız var: FreshRSS okuyucu ve sırasıyla 1080 ve 5230 portlarında çalışan Memos not alma uygulaması.
Elbette, çok daha fazlasıyla çalışıyor olabilirsiniz. Nginx Proxy Manager bu kadar ağır yükleri hiçbir sorun yaşamadan yönetebilir. İşleri olabildiğince basit ve açık tutmak için sadece iki uygulama seçtik.
Ayrıca, sahip olduğumuz ve testler için kullandığımız bir alan adı olan “tmplinux.com”u kullanıyoruz. FreshRSS uygulaması için “rss.tmplinux.com” ve Memos not alma uygulaması için “memos.tmplinux.com” olmak üzere iki alt alan adı DNS A kaydını, Nginx Proxy Manager’ın çalıştığı sunucu genelinin IP adresine yönlendireceğiz.Görsel olarak daha iyi anlamanız için üretim sürecimizi aşağıda bulabilirsiniz.

Ancak, kendi etki alanınız yoksa, “/etc/hosts” dosyanızda her zaman keyfi bir giriş için statik bir giriş ayarlayabilirsiniz.
Ancak bu yaklaşımı benimserseniz NPM’den geçerli bir SSL sertifikası alamayacağınızı unutmayın çünkü bunu yapmak için bir alan adına sahip olmanız ve bunu gerçek bir genel IP adresine bağlamanız gerekir.
Artık her şey netleştiğine göre, konuya girelim: Nginx Proxy Manager’ı ters proxy görevlerini yönetecek şekilde ayarlamak.
Nginx Proxy Yöneticisini yükleyin
NPM’yi kurmadan önce, öncelikle yeni bir Docker ağı kurmalıyız. Bu ağ, NPM’yi etkileşim kurması gereken diğer kapsayıcılara bağlayacaktır. Bunu yapmazsak, Nginx Proxy Yöneticisi bu kapsayıcılarla etkileşime giremeyecek ve onlara trafik gönderemeyecektir.
Docker ağımızı “reverse_proxy” ismini seçerek oluşturalım.
docker network create reverse_proxy
Daha sonra her şeyin yolunda olduğunu ve ağın kullanılabilir olduğunu doğrulayacağız.
docker network ls

“reverse_proxy” Docker ağı oluşturulduktan sonra, Nginx Proxy Manager’ın kurulumuna geçelim. İlk adım olarak, “npm” dizini oluşturun ve içine girin.
mkdir npm
cd npm
NPM’yi Docker Compose kullanarak dağıtacağız. Metin düzenleyicinizi açın ve bir “docker-compose.yaml“ dosyası oluşturun. Aşağıda verilen içeriği yapıştırın, kaydedin ve çıkın.
nano docker-compose.yaml
services:
app:
container_name: npm
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
networks:
- reverse_proxy
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
reverse_proxy:
name: reverse_proxy
external: true
Gördüğünüz gibi, bu oldukça basit bir Compose dosyası. 80 ve 443 portlarının Nginx Proxy Manager’ın istekleri alacağı yer olduğunu, 81 portunun ise NPM’nin web yönetici arayüzüne erişmenizi sağladığını belirtmek önemlidir.
Ayrıca, NPM yapılandırma verilerini ve SSL sertifikalarını güvende tutmak için geçerli dizinde iki birim de kuruyoruz. Bu çok önemlidir çünkü Docker, tasarımı gereği verileri kalıcı olarak kaydetmez; bu birimler olmadan, konteyner yeniden başlatıldığında herhangi bir veri kaybolur.
NPM’yi dağıtmadan önce, Nginx Proxy Manager için gerekli olan 80 ve 443 portlarını başka hiçbir hizmetin kullanmadığından emin olalım. Bu portlar zaten kullanılıyorsa, bunları kullanan hizmetleri durdurmanız gerekir. Aksi takdirde, NPM başlamaz ve bir hata gösterir.Hangi portların kullanımda olduğunu görmek için netstat komutunu kullanacağız ve 80 ve 443 portları için çıktısına bakacağız. Listede değillerse sorun yok.
netstat -tulnp

Artık Nginx Proxy Manager konteynerini dağıtmaya hazırız:
docker compose up -d

Konteynerleri NPM’nin Docker Ağına Bağlama
Bir kez daha, Nginx Proxy Yöneticisi, isteklerini ilettiği konteynerlerle iletişim kurabilmek için aynı ağı paylaşmalıdır. Bu, dağıtımlarını değiştirmeyi gerektirir.
Örneğin, FreshRSS dağıtımımıza yaptığımız ayarlama, aşağıda gösterildiği gibi bir “reverse_proxy” ağ parçasının eklenmesini içeriyor:

Değişikliklerin ardından konteynerlerinizi yeniden başlattığınızdan emin olun.
Daha önce kurduğumuz “reverse_proxy” ağına halihazırda çalışan konteynerları da aşağıdaki komutu kullanarak bağlayabilirsiniz:
docker network connect reverse_proxy CONTAINER_NAME
Veya bunları başlattığınızda, tek bir docker run komutu kullanırsanız, bunları gerekli ağa bağlayın:
docker run --network=reverse_proxy YOUR-OTHER-OPTIONS-HERE
Çalışan konteynerlerin ihtiyaç duyduğunuz Docker ağını paylaşıp paylaşmadığını kontrol etmek için aşağıdaki komutu kullanın.
docker ps --format "table {{.Names}}\t{{.Networks}}"

Nginx Proxy Yöneticisi Panosuna Erişim
Tarayıcınızı açın ve sunucunuzun 81 numaralı bağlantı noktasındaki IP adresine gidin (“http://server-ip-address:81”), buradan NPM yönetici arayüzüne erişebilirsiniz. Varsayılan kimlik bilgilerini kullanarak oturum açın:
- Username: [email protected]
- Password: changeme

Yönetici hesap bilgilerinizi güncellemenizi isteyen bir açılır pencere görünecektir. Tam adınızı, kullanıcı adınızı ve geçerli bir e-posta adresi girin, ardından değişikliklerinizi onaylamak için “Kaydet” düğmesine tıklayın.

Yönetici parolasını güncellemeniz için yeni bir pencere açılacaktır. “Mevcut Parola” alanına “changeme” yazın ve ardından aşağıdaki iki alana yeni bir güvenli parola seçip girin. Değişiklikleri uygulamak için “Kaydet”e tıklayın.

Bu sizi kullanıcı sayfasına götürecek ve burada yönetici hesabınızın güncellendiğini göreceksiniz.

SSL Sertifikasının Verilmesi
Hizmetlerimizin HTTPS üzerinden güvenli bir şekilde bağlanabilmesi için geçerli bir SSL sertifikası vermeye hazırız. Sadece Nginx Proxy Manager’ı yeni kurduğunuz sunucunun genel IP adresine işaret eden geçerli (çözülebilir) bir DNS “A” kaydı ayarladığınızdan emin olun.
Bunu nslookup veya dig komutuyla hızlıca doğrulayabilirsiniz. Örneğin, “memos.tmplinux.com” ana bilgisayarı için bir SSL sertifikası alıyoruz. Hızlı bir kontrol, doğru IP adresini işaret ettiğini doğrular.

Ana menüden “SSL Sertifikaları”nı seçin. Ardından, sertifikanızı Nginx Proxy Manager web arayüzü üzerinden almak için “SSL Sertifikası Ekle” düğmesine tıklayın.

Bir sonraki ekranda aşağıdakileri yapın:
- “Alan Adları” bölümüne sertifika vermek istediğiniz alan adını girin.
- Geçerli bir e-posta adresi girin.
- Let’s Encrypt şartlarını kabul edin.
- Sertifikanızı almaya başlamak için “Kaydet” butonuna tıklayın.

NPM perde arkasında hızla çalışmaya başlayacak ve sertifikanın kurulumunun tamamı 20-30 saniyeden fazla sürmeyecek.

Sayfa otomatik olarak yeniden yüklenecek ve her şey başarılı olursa belirtilen alan adına ait yeni SSL sertifikanız hazır görünecektir.

Nginx Proxy Yöneticisi ile Ters Proxy Kurulumu
Şimdi en heyecan verici kısımdayız: Nginx Proxy Manager kullanarak ters proxy’mizi kurmak. İki senaryoyu inceleyeceğiz: birincisi güvenli bir HTTPS bağlantısı için SSL sertifikası kullandığımız senaryo ve diğeri ise yalnızca HTTP kullanarak sertifika olmadan ters proxy kurduğumuz senaryo. Başlayalım.
SSL Sertifikalı NPM Ters Proxy
Ana menüye gidin, “Ana Bilgisayarlar”ı seçin ve ardından açılan alt menüden “Proxy Ana Bilgisayarlar”ı seçin.

Bir sonraki sayfada “Proxy Host Ekle” butonuna tıklayın.

Başarılı bir ters proxy bağlantısı kurmak için bu bölüm çok önemlidir, bu nedenle aşağıda her seçeneği ayrıntılı olarak açıkladık.

“Ayrıntılar” sekmesinden, “Alan Adları” alanına, Nginx Proxy Manager’ın ters proxy oluşturmasını istediğiniz alan adını girin. Bizim durumumuzda, bu, önceki adımda bir SSL sertifikası verdiğimiz addır, yani “memos.tmplinux.com.”
“Şema” bölümü kritik öneme sahiptir. Burada “http” ve “https” arasında seçim yapabilirsiniz. Bu seçim, Docker konteynerinin HTTP veya HTTPS isteklerini dinleyip dinlemediğini gösterir. Neredeyse tüm durumlarda, Docker konteynerleri varsayılan olarak HTTPS’yi işlemek üzere ayarlanmamıştır, bu nedenle genellikle burada “http” kullanmak isteyeceksiniz.
“Forward Hostname/IP” kutusuna sadece Docker hizmetinin adını yazın. Hem NPM konteynerine hem de diğer Docker konteynerlerine aynı Docker ağını paylaşmak için trafik gönderdiğimizden, Nginx Proxy Manager onlara hizmet adlarını kullanarak bağlanır.Hizmetin adının ne olduğundan emin değil misiniz? Aşağıdaki resme bir göz atın.

“Forward Port” alanına, gelen istekleri almak için Docker konteynerinin port numarasını yazın. Tekrar ediyorum, bu, NPM konteynerinin kendisinin dinlediği 80 ve 443 portlarıyla karıştırılmamalıdır.
Eğer portlardan emin değilseniz, aşağıdaki komutu kullanarak bunları kolayca kontrol edebilirsiniz:
docker ps --format "table {{.Names}}\t{{.Ports}}"

Sadece işleri açıklığa kavuşturmak için, örneğin “1080->80” gördüğünüzde, Docker konteynerinin kendi dahili 80 portunu ana bilgisayardaki 1080 portuna bağladığı anlamına gelir. Başka bir deyişle, dinlediği Docker konteynerinin portu 1080 değil 80’dir.
Son olarak, yaygın siber saldırılara karşı daha iyi koruma sağlamak için “Yaygın Saldırıları Engelle” seçeneğini açmanızı öneririz.”Kaydet” butonuna tıklamak için acele etmeyin; bunun yerine “SSL” sekmesine geçin. “SSL Sertifikası” menüsünden, biraz önce verdiğiniz Let’s Encrypt sertifikasını seçin.

Bu ayarları etkinleştirin:
- “Force SSL“: Bu, güvenli tarama için trafiği otomatik olarak HTTP’den HTTPS’ye yönlendirir.
- “HTTP/2 Support“: Günümüzde kullanılan önerilen HTTP protokol sürümü.
- “HSTS Enabled“: Bu, bazı kötü amaçlı saldırılara karşı koruma sağlamaya yardımcı olur.

Son olarak değişikliklerinizi uygulamak için “Kaydet”e tıklayın.

Gerçek an! Tarayıcınızı NPM’de ayarladığınız adrese yönlendirin. Uygulamanız, adres çubuğundaki asma kilit simgesiyle gösterildiği gibi HTTPS üzerinden güvenli bir şekilde çalışıyor olmalıdır. Tebrikler dışında ne ekleyebilirim!

SSL’siz NPM Ters Proxy
SSL sertifikası kullanmayan bir ana bilgisayara NPM’de ters proxy eklemek önceki örneğe benzer, ancak yapmanız gereken her şey “Ayrıntılar” sekmesindedir. Başka bir deyişle, “SSL” sekmesine dokunmanıza gerek yoktur.
İkinci Docker konteynerimize işaret eden “rss.tmplinux.com” için bir giriş ekleyeceğiz. Bunu alıştığınız şekilde yapmak için ana menüye gidin ve “Hosts”u, ardından “Proxy Hosts”u seçin. Bundan sonra sadece “Add Proxy Host” düğmesine tıklayın.
Şema “http” ve Docker servisi “freshrss” olarak adlandırılıyor. Konteyner 80 portunu kullanıyor. Durumunuz için gerekli bilgileri doldurun ve yaptığınız ayarları uygulayın, “Kaydet” butonuyla onaylayın.

İlk sunucumuz olan ve SSL sertifikası kullanımını yayınlayıp yapılandırdığımız “memos.tmplinux.com”un aksine, yeni adresimizin “yalnızca HTTP” olarak işaretlendiğini unutmayın.

Tarayıcımızı adrese yönlendirdiğimizde, NPM trafiği yalnızca güvenli olmayan bir HTTP bağlantısı üzerinden yönlendirir.

Örneğin, hizmeti yalnızca ev ağınız içinde kullanacaksanız bu seçeneği kullanmanızı önerdiğimizi belirtmek önemlidir. Ancak, hizmetiniz internet üzerinden erişilebilirse, güvenli HTTPS bağlantılarını etkinleştirmek için Nginx Proxy Manager’da bir SSL sertifikası ayarlayın.
Nginx Proxy Yöneticisinde IP Adresine Göre Erişimi Kısıtlama
Güvenliği artırmanın etkili bir yolu, erişimi IP adreslerine göre kısıtlamaktır. Nginx Proxy Manager bu süreci inanılmaz derecede hızlı ve basit hale getirir ve sadece birkaç tıklama gerektirir. Hadi sizi bu konuda yönlendirelim.
“Erişim Listeleri” bölümüne gidin ve “Erişim Listesi Ekle” butonuna tıklayın.

Bir modal pencere açılacaktır. “Detaylar” bölümünde, istediğiniz tanımlayıcı bir isim belirtin.

“Erişim” sekmesine geçin. Özel ev ağınızın IP aralığı olan “192.168.xx” ve belirli bir genel IP adresi olan “1.2.3.4“e erişimi kısıtlamak istediğinizi varsayalım.
Durumunuza uygun adresleri girin, son girişin “reddet” yönergesinin “tümü” olarak ayarlandığından emin olun. Ayarları yapılandırmayı tamamladığınızda, değişiklikleri uygulamak için “Kaydet” düğmesine tıklayın.

Eğer ilk defa bir erişim listesi oluşturuyorsanız, listenin en üstünde görünecektir. Değişiklik yapmanız gerekirse endişelenmeyin; sağdaki üç nokta simgesine tıklayıp “Düzenle”yi seçerek istediğiniz zaman kolayca düzenleyebilirsiniz.

Şimdi erişim listesini ana bilgisayarlarımızdan biri olan “memos.tmplinux.com”a uygulayalım. “Ana Bilgisayarlar” -> “Proxy Ana Bilgisayarlar”a gidin, ardından sağdaki üç nokta simgesine tıklayın ve “Düzenle”yi seçin.

“Erişim Listesi” açılır menüsünden, yakın zamanda oluşturulan “Erişim Listemi” seçin ve onaylamak için “Kaydet”e tıklayın.

Ve bu kadar. Şimdi, “Erişim Listem”de izin verilenler dışında bir IP adresinden hizmete erişmeye çalışırsak, Nginx Proxy Manager aşağıda gösterilen “403 Yasak” sayfasını gösterecektir.

Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.