فارسی (Farsi)
€EUR

محافظت از پوشه با رمز عبور و htpasswd روی VPS

2 min
سرور مجازی (VPS/VDS)

احراز هویت پایه سریع‌ترین راه برای پنهان‌کردن یک سایت آزمایشی، پوشهٔ مدیریت یا ابزار خصوصی پشت پنجرهٔ ورود است. این راهنما هم 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

🔐 ساخت فایل رمز عبور

فایل را بیرون از ریشهٔ وب نگه دارید تا کسی نتواند آن را دانلود کند:

Bash
sudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER

-B از bcrypt استفاده می‌کند. -c فایل را می‌سازد: فقط برای کاربر اول به کار ببرید، چون روی فایل موجود همه‌چیز را بازنویسی می‌کند (مخرب). کاربران بعدی را بدون -c اضافه کنید:

Bash
sudo 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:

Apache
AuthType 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>

سپس آزمایش و بارگذاری مجدد کنید:

Bash
sudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky

اگر نمی‌خواهید از .htaccess استفاده کنید، چهار خط احراز هویت را مستقیماً در بلاک <Directory> یا <Location> بگذارید: سریع‌تر و امن‌تر است.

🚀 گزینهٔ ب: Nginx با auth_basic

Nginx فایل .htaccess را نمی‌خواند. دستورها را به بلاک server اضافه کنید:

Nginx
1server { 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; اضافه کنید. سپس:

Bash
sudo nginx -t && sudo systemctl reload nginx

✅ آزمایش

بدون اطلاعات ورود باید 401 و با آن‌ها 200 بگیرید:

Bash
curl -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 ارائه می‌شوند.

با آخرین پیشنهادها، تخفیف‌ها و تبلیغات ویژه به‌روز بمانید.

مشاهده تخفیف‌ها

ما از کوکی استفاده می‌کنیم

ما از کوکی‌های تحلیلی برای بهبود تجربه شما در سایت خود استفاده می‌کنیم. هیچ داده‌ای به اشخاص ثالث فروخته نمی‌شود. اطلاعات بیشتر در سیاست حفظ حریم خصوصی ما.