जब कोई पेज दूसरी जगह जाता है, आप डोमेन बदलते हैं या HTTPS अनिवार्य करते हैं, तब रीडायरेक्ट आपके विज़िटर और सर्च रैंकिंग को बचाए रखते हैं। यह गाइड दिखाती है कि अपने VPS Linux Infrawire पर साफ़-सुथरे Nginx रीडायरेक्ट कैसे लिखें और उन्हें प्रोडक्शन में जाने से पहले कैसे जांचें।
📋 पूर्वापेक्षाएँ
- root SSH एक्सेस वाला Linux VPS (Ubuntu 24.04 / Debian 12 या AlmaLinux 9 / Rocky 9)। IP और root पासवर्ड आपके कस्टमर एरिया में मिलते हैं।
- Nginx इंस्टॉल हो और कम से कम एक साइट चला रहा हो (
sudo apt install nginxयाsudo dnf install nginx)। - एक डोमेन (
example.com) जिसके DNS A/AAAA रिकॉर्डVPS_IPकी ओर इशारा करते हों।
🧭 301 या 302: कौन सा चुनें
- 301 (Moved Permanently): बदलाव अंतिम है। ब्राउज़र और सर्च इंजन इसे कैश करते हैं और रैंकिंग नए URL को सौंप देते हैं।
- 302 (Found): बदलाव अस्थायी है (मेंटेनेंस, A/B टेस्ट)। पुराना URL ही संदर्भ बना रहता है।
संदेह हो तो पहले 302 इस्तेमाल करें: गलत 301 ब्राउज़र कैश में लंबे समय तक रह सकता है।
⚙️ return या rewrite
return को प्राथमिकता दें: यह तेज़ और पढ़ने में आसान है, क्योंकि Nginx तुरंत प्रोसेसिंग रोक देता है।
Nginxlocation = /old-page { return 301 /new-page; }
rewrite तभी इस्तेमाल करें जब URL का कोई हिस्सा रेगुलर एक्सप्रेशन से पकड़ना हो:
Nginxrewrite ^/blog/(\d+)/(.*)$ /articles/$2 permanent;
फ़्लैग permanent 301 भेजता है और redirect 302 भेजता है।
🌐 www से बिना www पर रीडायरेक्ट
सिर्फ़ रीडायरेक्ट करने वाला अलग server ब्लॉक बनाएँ। /etc/nginx/sites-available/example.com (Debian/Ubuntu) या /etc/nginx/conf.d/example.com.conf (AlmaLinux/Rocky) संपादित करें:
Nginx1server { 2 listen 80; 3 listen [::]:80; 4 server_name www.example.com; 5 return 301 $scheme://example.com$request_uri; 6}
उलटी दिशा के लिए दोनों होस्ट नाम आपस में बदल दें। $request_uri पाथ और क्वेरी स्ट्रिंग को बनाए रखता है।
🔒 HTTP से HTTPS पर रीडायरेक्ट
सर्टिफ़िकेट इंस्टॉल होने के बाद सारा सादा ट्रैफ़िक HTTPS पर भेजें:
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}
असली साइट तीसरे ब्लॉक में रहती है जो server_name example.com; के साथ 443 पर सुनता है। ध्यान दें कि http2 on; के लिए Nginx 1.25.1 या नया चाहिए, जो Ubuntu 24.04 में है।
🔗 पुराने URL से नए URL पर
कुछ ही पेजों के लिए सबसे तेज़ सटीक मिलान (=) इस्तेमाल करें:
Nginxlocation = /about-us.html { return 301 /about; } location = /promo { return 302 /offers/current; }
उप-पाथ बनाए रखते हुए पूरे फ़ोल्डर के लिए:
Nginxlocation /docs/ { rewrite ^/docs/(.*)$ /help/$1 permanent; }
🏠 पूरे डोमेन को रीडायरेक्ट करना
जब आप old-example.com छोड़कर example.com अपनाते हैं, तो सभी पाथ बनाए रखें:
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}
अगर पुराने डोमेन पर भी HTTPS है, तो उसके अपने सर्टिफ़िकेट वाला listen 443 ssl; ब्लॉक जोड़ें, वरना ब्राउज़र रीडायरेक्ट से पहले सर्टिफ़िकेट एरर दिखाएंगे।
✅ जांचें और सुरक्षित रूप से रीलोड करें
रीलोड से पहले हमेशा सिंटैक्स जांचें। reload चालू कनेक्शन बनाए रखता है, restart नहीं।
Bashsudo nginx -t sudo systemctl reload nginx
फिर रीडायरेक्ट का पीछा किए बिना हेडर देखें:
Bashcurl -I http://www.example.com/old-page
अपेक्षित आउटपुट (संक्षिप्त):
HTTP/1.1 301 Moved Permanently
Server: nginx
Location: https://example.com/old-page
पूरी श्रृंखला का पीछा करने और हर कदम देखने के लिए curl -IL http://www.example.com/old-page इस्तेमाल करें। आदर्श रूप से एक ही कदम हो: HTTP, फिर www, फिर HTTPS जैसी श्रृंखलाओं से बचें।
🛠️ समस्या निवारण
बहुत ज़्यादा रीडायरेक्ट (लूप)। कोई नियम अपने ही गंतव्य से मेल खा रहा है, अक्सर इसलिए कि प्रॉक्सी या CDN पहले ही HTTPS समाप्त कर चुका है। curl -I से Location हेडर देखें और सुनिश्चित करें कि लक्ष्य ब्लॉक दोबारा रीडायरेक्ट नहीं करता।
बदलाव का असर नहीं दिखता। आपने ऐसी फ़ाइल संपादित की जो सक्षम नहीं है। Debian/Ubuntu पर /etc/nginx/sites-enabled/ में लिंक जांचें, फिर sudo nginx -t और sudo systemctl reload nginx चलाएँ। ब्राउज़र 301 भी कैश करते हैं: curl या प्राइवेट विंडो से जांचें।
क्वेरी स्ट्रिंग गायब। rewrite ... ? या निश्चित लक्ष्य के साथ पैरामीटर गायब हो जाते हैं। return में $request_uri इस्तेमाल करें या $args को स्पष्ट रूप से जोड़ें।
गलत ब्लॉक जवाब दे रहा है। Nginx ब्लॉक का चयन server_name से करता है। sudo nginx -T | grep server_name से सूची देखें और डुप्लिकेट खोजें।
🎉 आपके रीडायरेक्ट चालू हैं: जहाँ बदलाव अंतिम है वहाँ स्थायी, जहाँ नहीं वहाँ अस्थायी, और आपके विज़िटर को कुछ पता चलने से पहले curl से जांचे हुए।