Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Güvenlik Linux

Linux’te Nginx ile HTTP’yi HTTPS’ye Yönlendirme (Tam Rehber)

Web sitenizi HTTPS ile güvenli hale getirmek artık isteğe bağlı değildir — kullanıcı verilerini korumak, güveni sağlamak ve güçlü SEO sıralamalarına ulaşmak için temel bir gerekliliktir. Google gibi arama motorları şifrelenmemiş HTTP sitelerini aktif olarak cezalandırırken, modern tarayıcılar bunları “Güvenli Değil” olarak işaretler. Tüm HTTP trafiğini HTTPS’ye yönlendirmek, her ziyaretçinin manuel müdahale olmadan otomatik olarak sitenizin şifreli sürümüne ulaşmasını sağlar.

Bu kapsamlı rehber sizi tüm süreç boyunca yönlendirir: HTTP ve HTTPS arasındaki farkı anlamak, Let’s Encrypt aracılığıyla ücretsiz bir SSL sertifikası yüklemek, Nginx’te kalıcı bir 301 yönlendirmesi yapılandırmak ve Linux sunucunuzda her şeyin doğru şekilde çalıştığını doğrulamak.

1. HTTP vs. HTTPS: Fark Nedir?

Yapılandırmaya geçmeden önce, bu yönlendirmenin neden önemli olduğunu anlamak gerekir.

HTTP (Hypertext Transfer Protocol)

HTTP, bir web tarayıcısı ile sunucu arasında veri iletmek için kullanılan temel protokoldür. Ancak tüm verileri düz metin olarak iletir, yani oturum açma kimlik bilgileri, ödeme ayrıntıları, kişisel veriler gibi herhangi bir bilgi, ortadaki adam (MITM) saldırısını kullanan saldırganlar tarafından ele geçirilebilir. HTTP hiçbir şifreleme, kimlik doğrulama veya veri bütünlüğü garantisi sunmaz.

HTTPS (HTTP Secure)

HTTPS, HTTP’nin güvenli uzantısıdır. Standart HTTP protokolünü SSL/TLS şifrelemesi içine sararak, istemci ve sunucu arasında şifreli bir tünel oluşturur. Bu şunları sağlar:

  • Gizlilik — Veriler aktarım sırasında üçüncü taraflar tarafından okunamaz.
  • Bütünlük — Veriler iletim sırasında değiştirilemez.
  • Kimlik Doğrulama — Kullanıcılar meşru sunucuyla iletişim kurduklarını doğrulayabilir.
  • SEO Avantajı — Google, HTTPS’yi bir sıralama sinyali olarak kullanır ve güvenli sitelere ölçülebilir bir avantaj sağlar.
  • Tarayıcı Güveni — Chrome, Firefox ve Edge, HTTPS siteleri için bir kilit simgesi ve HTTP siteleri için “Güvenli Değil” uyarısı gösterir.

Sonuç olarak: günümüzün ortamında bir web sitesini HTTPS olmadan çalıştırmak ciddi bir güvenlik ve iş riski oluşturur.

2. Ön Koşullar

Bu kılavuzu takip etmeden önce, aşağıdakilerin yerinde olduğundan emin olun:

  • Nginx çalıştıran bir Linux sunucusu (Ubuntu 20.04/22.04, Debian 11/12 veya benzeri)
  • Sunucunuzun IP adresine işaret eden kayıtlı bir alan adı
  • Sunucunuza root veya sudo erişimi
  • Linux komut satırı hakkında temel bilgi

Web sitenizi barındırmak için güvenilir bir sunucu ortamı arıyorsanız, AlexHost’tan VPS Hosting web uygulamaları için optimize edilmiş, SSD depolama ve yüksek kullanılabilirlik ağı ile tam yönetilen ve yönetilmeyen Linux VPS planları sağlar.

Ayrıca geçerli bir SSL sertifikasına ihtiyacınız olacak. Bu kılavuz, Certbot aracılığıyla ücretsiz Let’s Encrypt sertifika yetkilisini kullanır. İşletme kullanımı için genişletilmiş doğrulama (EV) veya kuruluş tarafından doğrulanan (OV) sertifikaya ihtiyacınız varsa, AlexHost’tan SSL Sertifikaları‘nı keşfetmeyi düşünün.

3. Adım 1: Let’s Encrypt ile SSL Sertifikası Yükleme

Let’s Encrypt, ücretsiz, otomatik ve açık kaynaklı bir sertifika yetkilisidir. Certbot, Let’s Encrypt’ten SSL/TLS sertifikaları alma ve yenileme işlemini otomatikleştiren ve web sunucunuzu yapılandıran resmi istemcidir.

Certbot ve Nginx Eklentisini Yükleme

Paket dizininizi güncelleyin ve Certbot’u Nginx eklentisiyle birlikte yükleyin:

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

SSL Sertifikanızı Alma ve Yükleme

Certbot’u --nginx bayrağıyla çalıştırarak otomatik olarak bir sertifika alın ve Nginx’i kullanacak şekilde yapılandırın:

sudo certbot --nginx -d example.com -d www.example.com

example.com yerine gerçek alan adınızı yazın. Certbot şunları yapacaktır:

  1. ACME sorgusu aracılığıyla alan adı sahipliğini doğrulama
  2. Let’s Encrypt’ten imzalı bir sertifika alma
  3. HTTPS’yi 443 numaralı bağlantı noktasında etkinleştirmek için Nginx yapılandırmasını otomatik olarak değiştirme
  4. İsteğe bağlı olarak otomatik HTTP-to-HTTPS yönlendirmesi ayarlama (tam kontrol için bu adımı Certbot’ta atlayabilir ve aşağıda gösterildiği gibi manuel olarak yapılandırabilirsiniz)

Otomatik Sertifika Yenilemeyi Etkinleştirme

Let’s Encrypt sertifikaları her 90 günde bir sona erer. Certbot, yenilemeleri otomatik olarak işlemek için bir systemd zamanlayıcısı veya cron işi yükler. Etkin olup olmadığını doğrulayın:

sudo systemctl status certbot.timer

Ayrıca bir deneme yenileme testi gerçekleştirebilirsiniz:

sudo certbot renew --dry-run

4. Adım 2: Nginx’i HTTP’den HTTPS’ye Yönlendirmek için Yapılandırın

SSL sertifikanız yüklendikten sonra, Nginx’i tüm HTTP (port 80) trafiğini HTTPS (port 443) adresine kalıcı olarak yönlendirecek şekilde yapılandırmanız gerekir. Bu, SEO için doğru yönlendirme türü olan 301 Moved Permanently yönlendirmesi kullanılarak yapılır — bağlantı değerini sayfalarınızın HTTPS sürümüne aktarır.

Nginx Server Block Yapılandırmanızı Açın

Nginx site yapılandırmaları tipik olarak /etc/nginx/sites-available/ içinde depolanır. Etki alanınız için yapılandırma dosyasını açın:

sudo nano /etc/nginx/sites-available/example.com

HTTP’den HTTPS’ye Yönlendirme Bloğunu Yapılandırın

Yapılandırma dosyanız bir veya daha fazla server bloğu içerecektir. Port 80 (HTTP) üzerinde dinleyen bloğu bulun ve aşağıdaki yönlendirme kuralı ile değiştirin veya güncelleyin:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # Permanently redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}

HTTPS server bloğunuz (port 443), Certbot tarafından muhtemelen otomatik olarak yapılandırılmış, şuna benzer görünmelidir:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/example.com/html;
    index index.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

> Neden rewrite yerine return 301 kullanılır?

> return 301 yönergesi, rewrite kuralından daha hızlı ve verimlidir. Nginx’in ek konum bloklarını işlemesini gerektirmeden yönlendirme yanıtını hemen döndürerek sunucu yükünü azaltır ve yanıt süresini iyileştirir.

Yönlendirme Yönergesini Anlama

BileşenAçıklama
listen 80Nginx, HTTP port 80 üzerinde gelen bağlantıları dinler
listen [::]:80Port 80 üzerinde IPv6 desteğini etkinleştirir
server_nameBu bloğun hangi alan adlarına uygulanacağını tanımlar
return 301Kalıcı yönlendirme verir (SEO için en iyisi)
https://$hostYönlendirmede orijinal ana bilgisayar adını korur
$request_uriTam orijinal URI yolunu ve sorgu dizesini korur

5. Adım 3: Nginx Yapılandırmanızı Test Edin

Yapılandırmanızı test etmeden önce Nginx’i asla yeniden yüklemeyiniz veya yeniden başlatmayınız. Yapılandırma dosyanızdaki bir söz dizimi hatası Nginx’in başlamasını başarısız kılacak ve web sitenizi çevrimdışı bırakacaktır.

Yerleşik Nginx yapılandırma testini çalıştırın:

sudo nginx -t

Başarılı bir test aşağıdaki çıktıyı üretir:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Herhangi bir hata görürseniz, çıktıyı dikkatle gözden geçirin. Nginx, sorunun tespit edildiği dosya ve satır numarasını gösterecektir. Yaygın sorunlar şunları içerir:

  • Direktiflerin sonunda eksik noktalı virgüller
  • Kapalı olmayan küme parantezleri {}
  • SSL sertifikaları için yanlış dosya yolları
  • Yinelenen server_name girişleri

Devam etmeden önce bildirilen hataları düzeltin.

6. Adım 4: Nginx’i Yeniden Yükleyerek Değişiklikleri Uygulayın

Yapılandırma testi başarılı olduktan sonra, değişikliklerinizi uygulamak için Nginx’i yeniden yükleyin. reload yerine restart kullanmak tercih edilir çünkü yeni yapılandırmayı etkin bağlantıları kesmeden zarif bir şekilde uygular:

sudo systemctl reload nginx

Yeniden yükleme sonrasında Nginx’in doğru şekilde çalıştığını doğrulamak için:

sudo systemctl status nginx

Çıktıda active (running) görmelisiniz.

7. Adım 5: Yönlendirmenin Çalışıp Çalışmadığını Doğrulayın

Nginx yeniden yüklendikten sonra, yönlendirmenin doğru şekilde çalışıp çalışmadığını doğrulamanın zamanı gelmiştir.

Yöntem 1: Tarayıcı Testi

  1. Web tarayıcınızı açın.
  2. http://example.com adresine gidin (HTTPS değil HTTP kullanarak).
  3. Tarayıcının sizi otomatik olarak https://example.com adresine yönlendirdiğini gözlemleyin.
  4. Adres çubuğunda kilit simgesinin göründüğünü doğrulayın; bu geçerli bir SSL bağlantısını gösterir.

Yöntem 2: curl ile Komut Satırı Testi

Sayfa gövdesini indirmeden yalnızca HTTP yanıt başlıklarını almak için curl ile -I bayrağını kullanın:

curl -I http://example.com

Doğru şekilde yapılandırılmış bir yönlendirme aşağıdaki yanıtı üretir:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Jan 2025 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/
Connection: keep-alive

Doğrulanacak önemli göstergeler:

  • Durum kodu 301 Moved Permanently — Kalıcı bir yönlendirmenin yerinde olduğunu doğrular.
  • Location: https://example.com/ — Trafiğin HTTPS sürümüne yönlendirildiğini doğrular.

Yöntem 3: Çevrimiçi Yönlendirme Denetleyicisi

redirect-checker.org veya httpstatus.io gibi ücretsiz çevrimiçi araçları kullanarak tam yönlendirme zincirini izleyebilir ve yönlendirme döngüleri veya gereksiz atlamaların olmadığını doğrulayabilirsiniz.

8. Yaygın Sorunlar ve Sorun Giderme

Yönlendirme Döngüsü

Belirti: Tarayıcı “Çok fazla yönlendirme” hatası gösterir.

Neden: HTTPS sunucu bloğunuz aynı zamanda HTTP’ye geri bir yönlendirme tetikleyerek sonsuz bir döngü oluşturuyor.

Çözüm: return 301 yönergesinin yalnızca HTTP (port 80) sunucu bloğunda bulunduğundan ve HTTPS (port 443) bloğunda bulunmadığından emin olun.

Karışık İçerik Uyarıları

Belirti: Yönlendirme çalışsa bile kilit simgesi bir uyarı gösterir.

Neden: HTML sayfalarınız hala HTTP kaynaklarına (resimler, betikler, stil sayfaları) http:// URL’leri kullanarak başvuruyor.

Çözüm: Tüm dahili kaynak URL’lerini https:// veya protokol-bağımsız URL’ler (//) kullanacak şekilde güncelleyin. WordPress siteleri için Really Simple SSL gibi bir eklenti kullanın.

SSL Sertifikası Bulunamadı

Belirti: Nginx eksik sertifika dosyaları hakkında bir hata ile başlamayı başarısız olur.

Neden: ssl_certificate ve ssl_certificate_key içinde belirtilen yollar gerçek sertifika dosyası konumlarıyla eşleşmiyor.

Çözüm: Sertifika yollarını şu komutla doğrulayın:

sudo ls /etc/letsencrypt/live/example.com/

Certbot Yenileme Başarısız Olur

Belirti: Otomatik yenileme bir bağlantı hatası ile başarısız olur.

Neden: Port 80 bir güvenlik duvarı tarafından engellenebilir ve Let’s Encrypt’in HTTP-01 sınamasının tamamlanmasını önler.

Çözüm: Port 80’in güvenlik duvarınızda açık olduğundan emin olun:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

9. Sonuç

Linux sunucunuzda Nginx kullanarak HTTP’yi HTTPS’ye yönlendirmek basit ancak kritik derecede önemli bir yapılandırma görevidir. Kalıcı bir 301 yönlendirme uygulayarak, sitenize nasıl erişirse erişsin her ziyaretçinin otomatik olarak şifreli, güvenli sürümü almasını sağlarsınız. Bu, hassas kullanıcı verilerini korur, ziyaretçi güvenini oluşturur, modern tarayıcı güvenlik gereksinimlerini karşılar ve ölçülebilir bir SEO faydası sağlar.

Bu kılavuzda ele alınan temel adımları özetlemek için:

  1. Certbot’u yükleyin ve Let’s Encrypt’ten ücretsiz bir SSL sertifikası alın.
  2. Nginx HTTP sunucu bloğunu yapılandırın ve return 301 yönlendirmesini HTTPS’ye ayarlayın.
  3. Yapılandırmanızı test edin ve sudo nginx -t ile değişiklikleri uygulamadan önce kontrol edin.
  4. Nginx’i yeniden yükleyin ve sudo systemctl reload nginx komutunu çalıştırın.
  5. Yönlendirmeyi doğrulayın tarayıcınızı, curl veya çevrimiçi bir yönlendirme denetleyicisini kullanarak.
  6. Sertifika yenilemeyi izleyin ve SSL sertifikanızın hiçbir zaman süresi dolmasın.

En iyi sonuçlar için Nginx web sunucunuzu yüksek performanslı, güvenilir bir barındırma platformunda çalıştırın. AlexHost, tam kök erişimi, SSD NVMe depolaması ve esnek Linux dağıtımları ile VPS Barındırma sunmaktadır — Nginx destekli web siteleri barındırmak için idealdir. Önceden yapılandırılmış bir kontrol paneli ortamına ihtiyacınız varsa, cPanel VPS seçeneğini keşfedin veya iş akışınız için uygun yönetim arayüzünü bulmak için tüm mevcut VPS Kontrol Panelleri seçeneklerine göz atın. Yüksek trafikli veya kaynak yoğun uygulamalar için, Özel Sunucular altyapınızın talep ettiği maksimum performans ve izolasyonu sağlar.

SSL sertifikanızın geçerliliğini düzenli olarak denetleyin, Nginx’i güncel tutun ve güçlü ve güvenilir bir web varlığını korumak için sunucu güvenlik yapılandırmanızı periyodik olarak gözden geçirin.