Modern web uygulamaları geliştirilirken güvenlik, ölçeklenebilirlik ve yüksek performans en kritik öncelikler arasında yer alır. Tek bir uygulama sunucusunun gelen tüm istekleri doğrudan karşılaması, hem güvenlik açıklarına yol açabilir hem de yoğun trafik altında sistemin kilitlenmesine neden olabilir. İşte bu noktada, modern web mimarisinin en güçlü araçlarından biri olan Nginx ters proxy (reverse proxy) yapılandırması devreye girer. Bu rehberde, sunucu performansınızı optimize etmek ve altyapı güvenliğinizi üst seviyeye çıkarmak için Nginx kullanarak nasıl bir ters proxy mekanizması kuracağınızı adım adım anlatacağız.
Ters Proxy (Reverse Proxy) Nedir?
Bir ters proxy sunucusu, istemciler (kullanıcılar) ile arka uçta çalışan uygulama sunucuları (Node.js, Python, Go, PHP vb.) arasında bir köprü görevi görür. İstemciden gelen istekleri ilk karşılayan sunucu Nginx olur. Nginx bu isteği alır, analiz eder ve arkadaki ilgili uygulama sunucusuna iletir. Uygulama sunucusundan aldığı yanıtı da tekrar istemciye geri gönderir.
Bu mimari, istemcinin arka uçtaki gerçek sunucunun IP adresini ve portunu doğrudan görmesini engeller. Böylece sunucu güvenliği artırılmış olur.
Neden Nginx Ters Proxy Yapılandırması Tercih Edilmeli?
Web projelerinde doğrudan uygulama sunucusunu internete açmak yerine önünde bir Nginx katmanı konumlandırmanın birçok önemli avantajı vardır:
- Güvenlik: Arka uçtaki uygulama sunucularınızın IP adresleri gizli kalır. DDoS saldırılarına karşı ilk savunma hattını Nginx oluşturur.
- Yük Dengeleme (Load Balancing): Gelen yoğun trafiği birden fazla uygulama sunucusuna dengeli bir şekilde dağıtabilirsiniz.
- SSL/TLS Sonlandırma: SSL sertifikalarınızı tek bir noktada (Nginx üzerinde) yöneterek arka uç sunucularınızın şifreleme/şifre çözme yükünü hafifletebilirsiniz.
- Statik İçerik Önbelleğe Alma (Caching): Resim, CSS, JS gibi statik dosyaları doğrudan Nginx üzerinden önbelleğe alıp sunarak uygulama sunucunuzun işlemci yükünü azaltabilirsiniz.
- Tek IP Üzerinde Çoklu Uygulama: Aynı sunucuda farklı portlarda çalışan birden fazla uygulamayı tek bir IP ve farklı alan adları (domain) üzerinden yayınlayabilirsiniz.
- Ubuntu veya Debian tabanlı bir Linux sunucu (CentOS/RHEL de tercih edilebilir).
- Sunucuya
sudoyetkisine sahip bir kullanıcı ile SSH bağlantısı. - Alan adınızın (domain) sunucu IP adresinize yönlendirilmiş olması.
Nginx Ters Proxy Kurulumu İçin Gereksinimler
Kuruluma başlamadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:
Adım Adım Nginx Ters Proxy Yapılandırması
Bu rehberde, yerel ağda veya sunucu içinde http://127.0.0.1:5000 portunda çalışan bir web uygulamasını (örneğin bir Node.js veya Python uygulaması), dış dünyaya ornek.com adresi üzerinden Nginx aracılığıyla nasıl açacağımızı göreceğiz.
Adım 1: Sunucu Paketlerinin Güncellenmesi ve Nginx Kurulumu
İlk olarak sunucumuzdaki paket listesini güncelleyelim ve Nginx web sunucusunu kuralım. Terminal üzerinden aşağıdaki komutları sırasıyla çalıştırın:
sudo apt update
sudo apt upgrade -y
sudo apt install nginx -y
Kurulum tamamlandıktan sonra Nginx servisinin aktif olup olmadığını ve arka planda çalışıp çalışmadığını kontrol edelim:
sudo systemctl status nginx
Eğer servis aktifse, tarayıcınızdan sunucu IP adresinizi yazarak Nginx'in varsayılan karşılama sayfasını görebilirsiniz.
Adım 2: Sanal Konak (Virtual Host) Dosyasının Oluşturulması
Nginx üzerinde her bir web sitesi veya servis için ayrı bir yapılandırma dosyası oluşturmak en iyi pratik yöntemdir. Varsayılan yapılandırma dosyasını değiştirmek yerine ornek.com için yeni bir dosya oluşturalım:
sudo nano /etc/nginx/sites-available/ornek.com
Açılan boş editöre aşağıdaki yapılandırma bloklarını ekleyin. Bu blok, gelen istekleri http://127.0.0.1:5000 adresinde çalışan uygulamanıza yönlendirecektir:
server {
listen 80;
server_name ornek.com www.ornek.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
# İstemci başlık bilgilerini arka uç sunucusuna iletme
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
# İstemcinin gerçek IP adresini iletme
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Dosyayı kaydetmek için CTRL + O ve ardından Enter tuşlarına basın. Çıkış yapmak için ise CTRL + X kısayolunu kullanın.
Adım 3: Yapılandırmanın Etkinleştirilmesi ve Test Edilmesi
Oluşturduğumuz bu yapılandırma dosyasını Nginx'in aktif siteler dizinine sembolik bir bağ (symlink) oluşturarak eklememiz gerekir:
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
Yaptığımız yapılandırmada herhangi bir sözdizimi (syntax) hatası olup olmadığını kontrol etmek için Nginx test komutunu çalıştıralım:
sudo nginx -t
Eğer ekranda syntax is ok ve test is successful mesajlarını görüyorsanız, her şey yolunda demektir. Değişikliklerin devreye girmesi için Nginx servisini yeniden başlatalım:
sudo systemctl restart nginx
Artık tarayıcınızdan ornek.com adresine gittiğinizde, istekleriniz arka planda 5000 portunda çalışan uygulamanıza yönlendirilecektir.
Gelişmiş Nginx Ters Proxy Özellikleri
Temel yapılandırmayı tamamladıktan sonra, projenizin ihtiyaçlarına göre Nginx'in sunduğu gelişmiş özellikleri de devreye alabilirsiniz.
Yük Dengeleme (Load Balancing) Yapılandırması
Eğer uygulamanız yoğun trafik alıyorsa ve birden fazla sunucu üzerinde çalışıyorsa, Nginx gelen istekleri bu sunucular arasında paylaştırabilir. Bunun için upstream bloğunu kullanabiliriz:
upstream backend_servers {
server 10.0.0.10:5000;
server 10.0.0.11:5000;
server 10.0.0.12:5000;
}
server {
listen 80;
server_name ornek.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Bu yapılandırma sayesinde Nginx, gelen istekleri sırasıyla (Round Robin algoritması ile) belirtilen üç farklı sunucuya yönlendirerek yükü dengeler.
SSL/TLS Güvenliği ve HTTPS Geçişi
Web sitenizin güvenliği için HTTPS protokolünü kullanmak zorunluluktur. Let's Encrypt kullanarak ücretsiz SSL sertifikası alabilir ve Nginx üzerinde ters proxy trafiğinizi şifreleyebilirsiniz. Certbot aracını kurarak bu işlemi otomatik hale getirebilirsiniz:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d ornek.com -d www.ornek.com
Bu komut, SSL sertifikasını otomatik olarak indirecek ve Nginx yapılandırma dosyanızı HTTPS yönlendirmeleriyle birlikte güncelleyecektir.
Sık Karşılaşılan Hatalar ve Çözümleri
setsebool -P httpd_can_network_connect 1 komutu ile bu izni verebilirsiniz.Sonuç
Bu rehberimizde, modern web altyapılarının vazgeçilmez bir parçası olan Nginx ters proxy kurulumunu ve temel yapılandırma adımlarını ele aldık. Nginx kullanarak hem sunucu güvenliğinizi artırabilir hem de yük dengeleme gibi gelişmiş özelliklerle projelerinizin yüksek trafik altında dahi kesintisiz çalışmasını sağlayabilirsiniz. Daha fazla detaylı yapılandırma seçeneği için Nginx resmi web sitesi üzerindeki dökümantasyonları inceleyebilirsiniz.
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Yorum Yazın