المصادقة الأساسية هي أسرع طريقة لإخفاء موقع تجريبي أو مجلد إدارة أو أداة خاصة خلف نافذة تسجيل دخول. يغطي هذا الدليل Apache وNginx على VPS Linux Infrawire الخاص بك، باستخدام ملف كلمات مرور ينشئه الأمر htpasswd.
📋 المتطلبات
- خادم Linux VPS (Ubuntu 24.04 / Debian 12 أو AlmaLinux 9 / Rocky 9) مع وصول SSH بصلاحية root. عنوان IP وكلمة مرور root في منطقة العميل.
- Apache أو Nginx يخدم موقعًا بالفعل.
- شهادة HTTPS صالحة للنطاق
example.com. ترسل المصادقة الأساسية كلمة المرور مرمّزة بـ Base64 وهذا ليس تشفيرًا: لا تستخدمها أبدًا عبر HTTP العادي.
📦 تثبيت أداة htpasswd
يأتي الأمر htpasswd من حزمة صغيرة حتى لو كنت تستخدم Nginx:
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.
🪶 الخيار أ: Apache مع .htaccess
ضع ملف .htaccess في المجلد المراد حمايته، مثل /var/www/example.com/private/.htaccess:
ApacheAuthType Basic AuthName "منطقة مقيّدة" AuthUserFile /etc/htpasswd/example.com Require valid-user
تُتجاهل ملفات .htaccess ما لم يسمح بها المضيف الافتراضي. في كتلة <Directory> (ملف في /etc/apache2/sites-available/ على Debian/Ubuntu، و/etc/httpd/conf.d/ على AlmaLinux/Rocky):
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>: فهذا أسرع وأكثر أمانًا.
🚀 الخيار ب: Nginx مع auth_basic
لا يقرأ 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) أضف auth_basic off; في location الخاص به. ثم:
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="منطقة مقيّدة"
يطلب curl كلمة المرور عندما تكتب -u USER وحده، فلا تبقى في سجل الصدفة.
🛠️ استكشاف الأخطاء
لا تظهر نافذة الدخول في 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.
خطأ 500 بعد إضافة .htaccess. توجيه غير صالح أو وحدة ناقصة. شغّل sudo apachectl configtest واقرأ الرسالة.
طلب كلمة المرور عبر HTTP. أعد توجيه HTTP إلى HTTPS أولًا حتى لا تمر بيانات الاعتماد بنص واضح أبدًا.
🎉 يطلب مجلدك الخاص الآن تسجيل دخول، مع كلمات مرور مجزّأة محفوظة بعيدًا عن المتناول ومقدَّمة عبر HTTPS فقط.