احراز هویت پایه سریعترین راه برای پنهانکردن یک سایت آزمایشی، پوشهٔ مدیریت یا ابزار خصوصی پشت پنجرهٔ ورود است. این راهنما هم 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)، در 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.
خطای 500 پس از افزودن .htaccess. یک دستور نامعتبر است یا ماژول لازم وجود ندارد. sudo apachectl configtest را اجرا کنید و پیام را بخوانید.
درخواست رمز عبور روی HTTP. ابتدا HTTP را به HTTPS ریدایرکت کنید تا اطلاعات ورود هرگز بهصورت آشکار منتقل نشوند.
🎉 پوشهٔ خصوصی شما اکنون ورود میخواهد، با رمزهای هششدهای که دور از دسترس نگهداری میشوند و فقط روی HTTPS ارائه میشوند.