Nginx'te SSL Kurulumu ve HTTP'den HTTPS'e 301 Yönlendirme
Nginx, performansı ve düşük bellek kullanımı sayesinde dünyanın en çok tercih edilen web sunucularından biridir. Bu rehberde, ücretsiz bir SSL sertifikasını Nginx'e nasıl tanımlayacağınızı ve tüm HTTP trafiğini güvenli HTTPS'e nasıl yönlendireceğinizi tam bir server bloğu örneğiyle göstereceğiz.
Gerekli dosyalar
Nginx, sertifika ve ara zinciri tek bir birleşik dosyada bekler. Bunun için fullchain.pem idealdir; sertifikanızı ve CA zincirini bir arada barındırır. Ayrıca özel anahtar olarak private.key gerekir.
fullchain.pem→ sertifika + ara zincir (ssl_certificate)private.key→ özel anahtar (ssl_certificate_key)
Bu iki dosyaya sahip değilseniz, ücretsiz SSL sihirbazımız ile alan adınızı doğrulayın ve inen ZIP paketinden fullchain.pem ile private.key dosyalarını alın.
Adım 1 — Dosyaları sunucuya yükleyin
Dosyaları güvenli bir dizine kopyalayın ve izinleri sıkılaştırın. Özel anahtarın yalnızca root tarafından okunabilir olması kritiktir:
sudo mkdir -p /etc/nginx/ssl/alanadiniz.com
sudo cp fullchain.pem /etc/nginx/ssl/alanadiniz.com/
sudo cp private.key /etc/nginx/ssl/alanadiniz.com/
sudo chmod 600 /etc/nginx/ssl/alanadiniz.com/private.key
Adım 2 — server bloğunu yapılandırın
Site yapılandırma dosyanızı açın (ör. /etc/nginx/sites-available/alanadiniz.com). Aşağıdaki örnek, hem HTTP'yi HTTPS'e yönlendiren hem de TLS'i güvenli ayarlarla sunan iki server bloğu içerir:
# 1) Tüm HTTP isteklerini kalıcı olarak HTTPS'e taşı
server {
listen 80;
listen [::]:80;
server_name alanadiniz.com www.alanadiniz.com;
return 301 https://$host$request_uri;
}
# 2) HTTPS sunucusu
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name alanadiniz.com www.alanadiniz.com;
ssl_certificate /etc/nginx/ssl/alanadiniz.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/alanadiniz.com/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
root /var/www/alanadiniz.com;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
Adım 3 — Yapılandırmayı test edin ve yeniden yükleyin
Söz dizimi hatalarını yakalamak için Nginx'i yeniden başlatmadan önce mutlaka test edin:
sudo nginx -t
Çıktı syntax is ok ve test is successful diyorsa servisi yumuşak biçimde yeniden yükleyin (kesinti olmadan):
sudo systemctl reload nginx
Adım 4 — Doğrulama
Yönlendirmenin ve sertifikanın çalıştığını komut satırından kontrol edebilirsiniz:
# 301 yönlendirme başlığını görmek için
curl -I http://alanadiniz.com
# Sertifika zincirinin tam sunulduğunu doğrulamak için
echo | openssl s_client -connect alanadiniz.com:443 -servername alanadiniz.com
İlk komutta HTTP/1.1 301 Moved Permanently ve Location: https://... görmelisiniz. İkinci komutta zincirin sertifikadan ara zincire kadar eksiksiz listelendiğinden emin olun.
Yaygın hatalar
- SSL_ERROR_BAD_CERT_DOMAIN:
server_nameile sertifikadaki alan adı uyuşmuyor.wwwdahilse iki adı da yazın. - Eksik ara zincir:
ssl_certificateiçin yalnızcertificate.crtkullanmayın;fullchain.pemkullanın. - İzin hatası: Nginx özel anahtarı okuyamıyorsa
chmod 600ve sahiplik ayarlarını kontrol edin.
Özet
Nginx'te SSL, ssl_certificate ve ssl_certificate_key tanımlayıp ayrı bir bloğun tüm HTTP trafiğini 301 ile HTTPS'e yönlendirmesinden ibarettir. Sertifikanız yoksa ücretsiz SSL sihirbazımız ile 90 günlük sertifikanızı alın, ZIP içinden fullchain.pem ve private.key dosyalarını çıkarın ve yukarıdaki bloğu uyarlayın.