قفل کردن سایت یا پوشه با رمز عبور در nginx (Basic Auth)
برای سایتهای در حال توسعه (staging)، پنلهای داخلی یا صفحات مدیریتی میتوانید یک لایهٔ رمز عبور ساده در خود nginx بگذارید؛ حتی قبل از رسیدن درخواست به برنامه.
۱نصب htpasswd
این ابزار در بستهٔ apache2-utils است. روی RHEL نام بسته httpd-tools است.
sudo apt install -y apache2-utils۲ساخت فایل رمز و اولین کاربر
گزینهٔ -c فقط اولین بار برای ساخت فایل لازم است؛ برای کاربران بعدی آن را نزنید وگرنه فایل بازنویسی میشود. رمز بهصورت تعاملی پرسیده میشود.
sudo htpasswd -c /etc/nginx/.htpasswd admin
sudo htpasswd /etc/nginx/.htpasswd editor
sudo chmod 640 /etc/nginx/.htpasswd
sudo chown root:www-data /etc/nginx/.htpasswdاگر نمیخواهید apache2-utils نصب کنید: printf 'admin:%s\n' "$(openssl passwd -apr1)" | sudo tee -a /etc/nginx/.htpasswd
۳قفل کردن کل سایت (مثلاً staging)
دو خط auth_basic را در بلوک server بگذارید.
server {
...
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}۴قفل کردن فقط یک مسیر
برای پنل مدیریت. location های دیگر همچنان آزاد میمانند.
location /admin/ {
auth_basic "Admin area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:3000;
}
# مسیر بدون رمز داخل یک قسمت قفلشده (مثلاً webhook)
location /admin/webhook {
auth_basic off;
proxy_pass http://127.0.0.1:3000;
}۵رمز یا IP مجاز (satisfy any)
با satisfy any کاربری که از IP مجاز است رمز نمیخواهد و بقیه باید رمز بدهند.
location /admin/ {
satisfy any;
allow 203.0.113.5;
deny all;
auth_basic "Admin area";
auth_basic_user_file /etc/nginx/.htpasswd;
}۶اعمال و تست
بدون رمز باید 401 و با رمز درست 200 بگیرید.
sudo nginx -t && sudo systemctl reload nginx
curl -I https://example.com/admin/
curl -I -u admin:PASSWORD https://example.com/admin/Basic Auth رمز را با base64 (نه رمزنگاری) ارسال میکند؛ فقط روی HTTPS استفاده کنید و آن را جایگزین احراز هویت واقعی برنامه ندانید.
پرسشهای پرتکرار دربارهٔ قفل کردن سایت یا پوشه با رمز عبور در nginx (Basic Auth)
آیا Basic Auth امن است؟
روی HTTPS برای محافظت ساده مناسب است ولی محدودیتی در تعداد تلاشها ندارد. آن را با limit_req و fail2ban ترکیب کنید و برای سیستمهای حساس از احراز هویت واقعی مثل SSO یا VPN استفاده کنید.