Nginx ve HTTPS
Nginx, yüksek performanslı ve hafif bir web sunucusudur. Aynı zamanda ters proxy sunucusu, yük dengeleyici ve HTTP önbelleği olarak役 yapabilir. HTTPS (HTTP Secure), internet üzerinde veri iletimi sırasında güvenliği sağlamak amacıyla kullanılan bir protokoldür. HTTPS, HTTP protokolünün üstüne eklenen SSL/TLS protokollerini kullanarak verilerin şifrelenmesini sağlar. Nginx, HTTPS trafiği yönetmek için yaygın olarak tercih edilen bir araçtır.
Kurulum ve Yapılandırma
Nginx’in HTTPS trafiğini HTTP backend sunuculara yönlendirebilmesi için öncelikle SSL sertifikalarının kurulması gerekmektedir. SSL sertifikaları, web sunucusunun kimliğini doğrulamak ve kullanıcı ile sunucu arasında güvenli bir bağlantı sağlamak amacıyla kullanılır. Sertifikalar genellikle bir sertifika otoritesinden (CA) temin edilir.
Nginx’in yapılandırma dosyası genellikle `/etc/nginx/nginx.conf` veya siteye özgü bir dosya olan `/etc/nginx/sites-available/default` dosyasında yer alır. HTTPS yapılandırması aşağıdaki gibi bir yapı oluşturulmalıdır:
“`nginx
server {
listen 443 ssl;
server_name domain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://backend_server_ip:backend_server_port;
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;
}
}
“`
Bu yapılandırma, Nginx’in 443 numaralı portta SSL bağlantılarını dinlemesini sağlar. `server_name`, sunucunun ismini tanımlamak için kullanılır. `ssl_certificate` ve `ssl_certificate_key` direktifleri ise sertifika dosyalarının ve özel anahtarın yollarını belirtir. `location` bloğu, gelen istekleri HTTP backend sunucusuna yönlendirmek için kullanılır.
Yük Dengeleme
Nginx, birden fazla backend sunucusuna yük dengelemesi yapma yeteneğine sahip bir aracıdır. Birden fazla backend sunucusu varsa ve yük dengelemek isteniyorsa, yapılandırma aşağıdaki gibi güncellenmelidir:
“`nginx
upstream backend {
server backend_server1_ip:port;
server backend_server2_ip:port;
}
server {
listen 443 ssl;
server_name domain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://backend;
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;
}
}
“`
Bu yapılandırma, `upstream` direktifi ile backend sunucuları gruplandırarak yük dengelemesine olanak tanır. `proxy_pass` direktifi ile istekler bu gruba yönlendirilir.
HTTPS’ye Zorunlu Yönlendirme
Eğer HTTP üzerinden yapılan isteklere yönlendirme yapılmak isteniyorsa, ayrı bir yapılandırma bloğu eklenmelidir. Bu, kullanıcıların her zaman HTTPS üzerinden bağlanmasını sağlamaktadır. Aşağıda, HTTP’den HTTPS’ye yönlendirme örneği verilmiştir:
“`nginx
server {
listen 80;
server_name domain.com;
return 301 https://$host$request_uri;
}
“`
Bu yapılandırma, HTTP isteklerinin doğrudan HTTPS’ye yönlendirilmesini sağlar. Bu yönlendirme, 301 kalıcı yönlendirme ile gerçekleştirilir.
Güvenlik Ayarları
Nginx ile HTTPS trafiği yönlendirirken güvenlik ayarları da önemlidir. SSL/TLS ile ilgili belirli ayarların yapılandırılması, sunucu güvenliğini artıracaktır. Örnek bir yapılandırma aşağıdaki gibi olabilir:
“`nginx
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ‘HIGH:!aNULL:!MD5’;
ssl_prefer_server_ciphers on;
“`
Bu konfigürasyonla, sadece güvenli protokoller ve şifreleme algoritmaları kullanılmaktadır. Böylece, güvenlik açıklarına karşı koruma sağlanır.
Gözden Geçirme ve Test
Yapılandırma dosyası düzenlendikten sonra, Nginx yapılandırmasının geçerliliği kontrol edilmelidir. Bunun için aşağıdaki komut kullanılabilir:
“`bash
nginx -t
“`
Eğer herhangi bir hata olmadan test edilirse, Nginx servisi yeniden başlatılmalı veya yeniden yüklenmelidir:
“`bash
systemctl reload nginx
“`
Yapılandırma tamamlandıktan sonra, HTTPS bağlantılarının HTTP backend sunuculara doğru yönlendirildiğini test etmek için bir tarayıcı kullanılabilir ya da `curl` gibi komut satırı araçları üzerinden bağlantı kontrol edilebilir.
Sonuç
Nginx, HTTPS trafiğini HTTP backend sunuculara yönlendirmek için etkili bir çözüm sunmaktadır. Doğru yapılandırma ile HTTPS bağlantıları güvenli bir şekilde yönetilebilir, yük dengelemesi yapılabilir ve güvenlik ayarları ile birlikte kullanıcı verilerinin korunması sağlanabilir. Bu tür bir yapılandırma, hem web uygulamalarının performansını artırır hem de kullanıcıların güvenliğini sağlar.