बेसिक ऑथेंटिकेशन किसी स्टेजिंग साइट, एडमिन फ़ोल्डर या निजी टूल को लॉगिन प्रॉम्प्ट के पीछे छिपाने का सबसे तेज़ तरीका है। यह गाइड आपके VPS Linux Infrawire पर Apache और Nginx दोनों को कवर करती है, htpasswd से बनी पासवर्ड फ़ाइल के साथ।
📋 पूर्वापेक्षाएँ
- root SSH एक्सेस वाला Linux VPS (Ubuntu 24.04 / Debian 12 या AlmaLinux 9 / Rocky 9)। IP और root पासवर्ड कस्टमर एरिया में हैं।
- Apache या Nginx जो पहले से कोई साइट चला रहा हो।
example.comके लिए मान्य HTTPS सर्टिफ़िकेट। बेसिक ऑथेंटिकेशन पासवर्ड को Base64 में एन्कोड करके भेजता है, जो एन्क्रिप्शन नहीं है: इसे कभी सादे HTTP पर इस्तेमाल न करें।
📦 htpasswd टूल इंस्टॉल करें
Nginx इस्तेमाल करने पर भी htpasswd कमांड एक छोटे पैकेज से आता है:
Bash# Debian / Ubuntu sudo apt install -y apache2-utils # AlmaLinux / Rocky sudo dnf install -y httpd-tools
🔐 पासवर्ड फ़ाइल बनाएँ
फ़ाइल को किसी भी वेब रूट से बाहर रखें, ताकि कोई उसे डाउनलोड न कर सके:
Bashsudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER
-B bcrypt इस्तेमाल करता है। -c फ़ाइल बनाता है: इसे केवल पहले उपयोगकर्ता के लिए इस्तेमाल करें, क्योंकि मौजूदा फ़ाइल पर यह सब कुछ मिटाकर दोबारा लिख देता है (विनाशकारी)। अन्य उपयोगकर्ता -c के बिना जोड़ें:
Bashsudo htpasswd -B /etc/htpasswd/example.com USER2
वेब सर्वर को फ़ाइल पढ़ने में सक्षम होना चाहिए:
Bash# Debian / Ubuntu (Apache और Nginx www-data के रूप में चलते हैं) sudo chown root:www-data /etc/htpasswd/example.com # AlmaLinux / Rocky: ग्रुप apache (Apache) या nginx (Nginx) sudo chmod 640 /etc/htpasswd/example.com
किसी उपयोगकर्ता को हटाने के लिए: sudo htpasswd -D /etc/htpasswd/example.com USER2।
🪶 विकल्प A: .htaccess के साथ Apache
सुरक्षित करने वाले फ़ोल्डर में .htaccess फ़ाइल रखें, जैसे /var/www/example.com/private/.htaccess:
ApacheAuthType Basic AuthName "प्रतिबंधित क्षेत्र" AuthUserFile /etc/htpasswd/example.com Require valid-user
जब तक वर्चुअल होस्ट अनुमति न दे, .htaccess फ़ाइलें अनदेखी की जाती हैं। अपने <Directory> ब्लॉक में (Debian/Ubuntu पर /etc/apache2/sites-available/ में, AlmaLinux/Rocky पर /etc/httpd/conf.d/ में फ़ाइल):
Apache<Directory /var/www/example.com> AllowOverride AuthConfig </Directory>
फिर जांचें और रीलोड करें:
Bashsudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky
अगर आप .htaccess से बचना चाहते हैं, तो ऑथेंटिकेशन की चारों पंक्तियाँ सीधे <Directory> या <Location> ब्लॉक में रखें: यह तेज़ और ज़्यादा सुरक्षित है।
🚀 विकल्प B: auth_basic के साथ Nginx
Nginx .htaccess नहीं पढ़ता। निर्देश server ब्लॉक में जोड़ें:
Nginx1server { 2 listen 443 ssl; 3 server_name example.com; 4 # ssl_certificate की पंक्तियाँ यहाँ 5 6 location /private/ { 7 auth_basic "प्रतिबंधित क्षेत्र"; 8 auth_basic_user_file /etc/htpasswd/example.com; 9 } 10}
पूरी साइट सुरक्षित करने के लिए ये दो पंक्तियाँ server ब्लॉक में रखें। सुरक्षित साइट के भीतर कोई पाथ सार्वजनिक रखना हो (जैसे webhook), तो उसके अपने location में auth_basic off; जोड़ें। फिर:
Bashsudo nginx -t && sudo systemctl reload nginx
✅ जांच
बिना क्रेडेंशियल के 401 और क्रेडेंशियल के साथ 200 मिलना चाहिए:
Bashcurl -I https://example.com/private/ curl -I -u USER https://example.com/private/
पहला अपेक्षित जवाब:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="प्रतिबंधित क्षेत्र"
केवल -u USER देने पर curl पासवर्ड पूछता है, जिससे वह आपकी शेल हिस्ट्री में नहीं रहता।
🛠️ समस्या निवारण
Apache में लॉगिन प्रॉम्प्ट नहीं आता। AllowOverride अब भी None है, या .htaccess गलत फ़ोल्डर में है। <Directory> ब्लॉक दोबारा जांचें और रीलोड करें।
सही पासवर्ड पर भी हमेशा 401। वेब सर्वर फ़ाइल नहीं पढ़ पा रहा (chown और chmod जांचें), या AuthUserFile / auth_basic_user_file का पाथ गलत है। एरर लॉग बताता है: /var/log/apache2/error.log, /var/log/httpd/error_log या /var/log/nginx/error.log।
.htaccess जोड़ने के बाद 500 एरर। कोई निर्देश अमान्य है या ज़रूरी मॉड्यूल गायब है। sudo apachectl configtest चलाएँ और संदेश पढ़ें।
HTTP पर पासवर्ड प्रॉम्प्ट। पहले HTTP को HTTPS पर रीडायरेक्ट करें, ताकि क्रेडेंशियल कभी सादे रूप में न गुज़रें।
🎉 आपका निजी फ़ोल्डर अब लॉगिन माँगता है, हैश किए गए पासवर्ड पहुँच से बाहर रखे गए हैं और केवल HTTPS पर परोसे जाते हैं।