Linux Sunucularda Nginx Reverse Proxy ve Certbot ile Otomatik SSL Kurulumu
Arka planda koşan Node.js, Python FastAPI veya Docker konteynerlerini dış dünyaya güvenle açmanın standardı: Nginx Reverse Proxy mantığı, port yönlendirme, başlık ayarları ve Let's Encrypt ile ücretsiz otomatik yenilenen HTTPS kurulumu.
Geliştirdiğiniz bir FastAPI, Flask veya Node.js uygulamasını Linux sunucunuza yüklediniz ve 'python main.py' diyerek 8000 portunda ayağa kaldırdınız. Peki bu uygulamayı kullanıcılarınıza 'http://sunucu-ipadresi:8000' şeklinde mi sunacaksınız? Kesinlikle hayır! Bir backend uygulamasını doğrudan dış internete açmak hem ciddi güvenlik zafiyetleri yaratır, hem SSL/TLS şifrelemesi yönetmeyi zorlaştırır, hem de kullanıcı deneyimini zedeler. Modern sistem mimarisinde internet ile uygulamanızın arasına son derece hızlı, hafif ve güvenilir bir koruyucu kalkan konur: Nginx Reverse Proxy (Ters Vekil Sunucu).
Reverse Proxy (Ters Vekil Sunucu) Nedir ve Neden Kullanılır?:
Klasik Forward Proxy, istemcilerin internete çıkarken kimliğini gizlemesine yararken (örneğin VPN); Reverse Proxy ise sunucuların önüne geçerek onları internetteki doğrudan tehlikelerden korur.
1. Port Gizleme: Dış dünya sadece standart HTTP (80) ve HTTPS (443) portlarını görür. Uygulamanızın içeride hangi portta (3000, 8000, 5000) koştuğu tamamen gizlenir.
2. SSL Sonlandırma (SSL Termination): Karmaşık ve işlemci yoran şifreleme/çözme işlemlerini Nginx halleder, backend uygulamanıza saf ve hızlı yerel trafik iletir.
3. Güvenlik ve DDoS Koruması: Kötü niyetli istekler doğrudan backend'inize ulaşmadan Nginx katmanında engellenir.
4. Statik Dosya Hızı: Resim, CSS ve JavaScript gibi statik dosyaları backend'i yormadan Nginx doğrudan diskten ışık hızında sunar.
Adım Adım Nginx Yapılandırması (Server Block):
Linux sunucunuzda '/etc/nginx/sites-available/api.alanadiniz.com' dosyası oluşturup şu ayarları yazarsınız:
server {
listen 80;
server_name api.alanadiniz.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
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;
}
}
Buradaki 'proxy_set_header' satırları hayati önem taşır; çünkü Nginx olmasaydı backend uygulamanız tüm gelen istekleri '127.0.0.1' yerel IP'sinden geliyormuş gibi görürdü. Bu başlıklar sayesinde gerçek ziyaretçinin IP adresi korunur.
Certbot ve Let's Encrypt ile Ücretsiz SSL Kurulumu:
Eski günlerde SSL sertifikası almak için yüzlerce dolar ödemek ve karmaşık CSR dosyalarıyla uğraşmak gerekirdi. Let's Encrypt ve Certbot bu süreci tamamen ücretsiz ve tek komuta indirdi!
Sunucunuzda şu komutu çalıştırmanız yeterlidir:
sudo certbot --nginx -d api.alanadiniz.com
Certbot Nginx ayarlarınızı otomatik okur, Let's Encrypt sunucularıyla el sıkışarak alan adının size ait olduğunu doğrular, SSL sertifikasını üretir, Nginx konfigürasyonunuza 443 HTTPS bloğunu yazar ve tüm HTTP trafiğini otomatik olarak güvenli HTTPS'e yönlendirir (301 Redirect)!
Otomatik Sertifika Yenileme (Auto-Renewal) Güvencesi:
Let's Encrypt sertifikaları 90 gün geçerlidir. Ancak endişelenmenize gerek yoktur; çünkü Certbot kurulumuyla birlikte Linux sisteminize otomatik bir 'systemd timer' veya cron görevi eklenir. Sertifikanızın bitmesine 30 gün kala arka planda sessizce yenilenir.
Yenileme mekanizmasını test etmek için şu komutu çalıştırabilirsiniz:
sudo certbot renew --dry-run
'Congratulations, all simulated renewals succeeded' mesajını gördüyseniz sisteminiz ömür boyu otomatik yenilenen güvenli bir HTTPS altyapısına kavuşmuş demektir.
Sonuç: Prodüksiyon Standartlarında Dağıtım:
Nginx ve Certbot ikilisi; Python, Node.js, Go veya Docker ile geliştirdiğiniz herhangi bir projeyi amatör bir test ortamından profesyonel bir kurumsal prodüksiyon seviyesine yükselten en temel DevOps standardıdır.