Yönlendirmeler, bir sayfa taşındığında, alan adı değiştirdiğinizde ya da HTTPS'i zorunlu kıldığınızda ziyaretçilerinizi ve arama sıralamanızı korur. Bu rehber, VPS Linux Infrawire sunucunuzda temiz Nginx yönlendirmeleri yazmayı ve bunları canlıya almadan önce test etmeyi gösterir.
📋 Ön koşullar
- Root SSH erişimli bir Linux VPS (Ubuntu 24.04 / Debian 12 veya AlmaLinux 9 / Rocky 9). IP adresini ve root parolasını müşteri alanınızda bulursunuz.
- Kurulu ve en az bir siteyi sunan Nginx (
sudo apt install nginxveyasudo dnf install nginx). - DNS A/AAAA kayıtları
VPS_IPadresine işaret eden bir alan adı (example.com).
🧭 301 mi 302 mi
- 301 (Moved Permanently): Taşınma kalıcıdır. Tarayıcılar ve arama motorları bunu önbelleğe alır ve sıralamayı yeni URL'ye aktarır.
- 302 (Found): Taşınma geçicidir (bakım, A/B testi). Eski URL referans olmaya devam eder.
Şüpheniz varsa önce 302 kullanın: yanlış bir 301 tarayıcı önbelleğinde uzun süre kalabilir.
⚙️ return mü rewrite mı
return tercih edin: Nginx işlemeyi hemen bıraktığı için daha hızlı ve okunaklıdır.
Nginxlocation = /old-page { return 301 /new-page; }
rewrite komutunu yalnızca URL'nin bir bölümünü düzenli ifadeyle yakalamanız gerektiğinde kullanın:
Nginxrewrite ^/blog/(\d+)/(.*)$ /articles/$2 permanent;
permanent bayrağı 301, redirect bayrağı 302 gönderir.
🌐 www'dan www'suza yönlendirme
Yalnızca yönlendirme yapan ayrı bir server bloğu oluşturun. /etc/nginx/sites-available/example.com (Debian/Ubuntu) veya /etc/nginx/conf.d/example.com.conf (AlmaLinux/Rocky) dosyasını düzenleyin:
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 server_name www.example.com; 5 return 301 $scheme://example.com$request_uri; 6}
Tersi yön için iki ana makine adını değiştirin. $request_uri yolu ve sorgu dizesini korur.
🔒 HTTP'den HTTPS'e yönlendirme
Sertifika kurulduktan sonra tüm düz metin trafiği HTTPS'e gönderin:
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com www.example.com; 5 return 301 https://example.com$request_uri; 6} 7 8server { 9 listen 443 ssl; 10 listen [::]:443 ssl; 11 http2 on; 12 server_name www.example.com; 13 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 14 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 15 return 301 https://example.com$request_uri; 16}
Gerçek site, 443 portunu server_name example.com; ile dinleyen üçüncü bir blokta yer alır. http2 on; için Nginx 1.25.1 veya üstü gerekir; Ubuntu 24.04'te bu sağlanır.
🔗 Eski URL'den yeni URL'ye
Birkaç sayfa için en hızlı olan tam eşleşmeleri (=) kullanın:
Nginxlocation = /about-us.html { return 301 /about; } location = /promo { return 302 /offers/current; }
Alt yolları koruyarak taşınan bir klasörün tamamı için:
Nginxlocation /docs/ { rewrite ^/docs/(.*)$ /help/$1 permanent; }
🏠 Tüm alan adını yönlendirme
old-example.com alan adını bırakıp example.com kullanıyorsanız tüm yolları koruyun:
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 server_name old-example.com www.old-example.com; 5 return 301 https://example.com$request_uri; 6}
Eski alan adında da HTTPS varsa, kendi sertifikasıyla eşleşen bir listen 443 ssl; bloğu ekleyin; aksi hâlde tarayıcılar yönlendirmeden önce sertifika hatası gösterir.
✅ Test edin ve düzgünce yeniden yükleyin
Yeniden yüklemeden önce sözdizimini her zaman doğrulayın. Reload mevcut bağlantıları korur, restart korumaz.
Bashsudo nginx -t sudo systemctl reload nginx
Ardından yönlendirmeyi izlemeden başlıkları kontrol edin:
Bashcurl -I http://www.example.com/old-page
Beklenen çıktı (kısaltılmış):
HTTP/1.1 301 Moved Permanently
Server: nginx
Location: https://example.com/old-page
Tüm zinciri izleyip her adımı görmek için curl -IL http://www.example.com/old-page kullanın. İdeal olan tek adımdır: HTTP, sonra www, sonra HTTPS gibi zincirlerden kaçının.
🛠️ Sorun giderme
Çok fazla yönlendirme (döngü). Bir kural kendi hedefiyle eşleşiyor; çoğu zaman bir proxy veya CDN HTTPS'i zaten sonlandırdığı içindir. curl -I ile Location başlığını kontrol edin ve hedef bloğun tekrar yönlendirmediğinden emin olun.
Değişikliğin etkisi yok. Etkinleştirilmemiş bir dosyayı düzenlediniz. Debian/Ubuntu'da /etc/nginx/sites-enabled/ içindeki bağlantıyı kontrol edin, sonra sudo nginx -t ve sudo systemctl reload nginx çalıştırın. Tarayıcılar 301'leri de önbelleğe alır: curl veya gizli pencere ile test edin.
Sorgu dizesi kayboldu. rewrite ... ? ya da sabit hedefle parametreler kaybolur. return içinde $request_uri kullanın veya $args değerini açıkça ekleyin.
Yanlış blok yanıt veriyor. Nginx bloğu server_name ile seçer. sudo nginx -T | grep server_name ile listeleyip yinelenenleri arayın.
🎉 Yönlendirmeleriniz yayında: kesin olduğunda kalıcı, olmadığında geçici ve ziyaretçileriniz bir şey fark etmeden önce curl ile test edilmiş.