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;
    }
}
Görsel: <Nginx server bloğunun bir editörde açılmış hali>
İki server bloğu: biri 301 yönlendirme, diğeri 443 üzerinde TLS.

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_name ile sertifikadaki alan adı uyuşmuyor. www dahilse iki adı da yazın.
  • Eksik ara zincir: ssl_certificate için yalnız certificate.crt kullanmayın; fullchain.pem kullanın.
  • İzin hatası: Nginx özel anahtarı okuyamıyorsa chmod 600 ve 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.