До основного вмісту

Basic Auth: пароль на розділ сайту в Nginx і Apache

Безпека · 31.10.2026 · 4 хв читання
Ілюстрація до статті «Basic Auth: пароль на розділ сайту в Nginx і Apache»

HTTP Basic Auth дає змогу закрити паролем каталог, службову сторінку чи всю тестову копію сайту, не змінюючи жодного рядка коду застосунку. Браузер сам покаже вікно входу. Нижче: як створити файл паролів, налаштувати Nginx і Apache, закрити сторінку входу WordPress і чим такий захист обмежений.

Коли підходить Basic Auth

Це вбудований механізм вебсервера: він перевіряє логін і пароль до того, як запит дійде до PHP чи іншого застосунку. Він добре підходить у таких випадках:

  • закрити тестову копію сайту від пошукових роботів і випадкових відвідувачів;
  • сховати службові сторінки: панель бази даних, статистику, сторінку входу в адмінку;
  • додати другий рубіж перед формою входу застосунку.

Для публічних сторінок із реєстрацією клієнтів він не годиться: немає виходу з облікового запису, немає відновлення пароля й немає блокування добору.

Створюємо файл паролів

Файл створює утиліта htpasswd. Вона входить до пакета apache2-utils у Debian і Ubuntu та до httpd-tools у родині RHEL. Ключ -c створює файл і затирає наявний, тому для другого й наступних користувачів його не вказуйте. Ключ -B обирає bcrypt. Не передавайте пароль у командному рядку ключем -b: він потрапить в історію команд.

sudo apt install apache2-utils
sudo dnf install httpd-tools
sudo htpasswd -B -c /etc/nginx/.htpasswd admin
sudo htpasswd -B /etc/nginx/.htpasswd editor

Файл не повинен лежати в каталозі сайту. Дозвольте читання лише власникові та групі, під якою працює вебсервер (наприклад, www-data у Debian і Ubuntu), і перевірте вхід вручну: якщо обраний алгоритм сервер не приймає, вхід не пройде.

Налаштування в Nginx

Додайте дві директиви в блок server або в потрібний location. Усе, що входить у префікс /admin/, вимагатиме пароль.

location /admin/ {
    auth_basic "Restricted area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Сторінку входу WordPress закривають точним збігом. Директиви авторизації треба додати в той блок, який передає запит у PHP, інакше сторінка відкриється без пароля.

location = /wp-login.php {
    auth_basic "Restricted area";
    auth_basic_user_file /etc/nginx/.htpasswd;
    # ... existing PHP directives
}

Перевірте конфігурацію й перечитайте її. Виняток для окремого шляху (наприклад, для приймання сповіщень від платіжної системи) робиться директивою auth_basic off у його location.

sudo nginx -t
sudo systemctl reload nginx

Налаштування в Apache

В Apache правила кладуть у файл .htaccess потрібного каталогу, якщо в конфігурації дозволено AllowOverride AuthConfig. Роботу з цим файлом описано й у статті Редирект через .htaccess.

AuthType Basic
AuthName "Restricted area"
AuthUserFile /home/user/.htpasswd
Require valid-user

Шлях в AuthUserFile має бути абсолютним. Для одного файлу замість каталогу використайте блок Files.

<Files "wp-login.php">
    AuthType Basic
    AuthName "Restricted area"
    AuthUserFile /home/user/.htpasswd
    Require valid-user
</Files>

Обмеження та захист від добору

Basic Auth простіший за будь-який вхід через форму, і в нього є слабкі місця. Перш ніж на нього покладатися, врахуйте таке. Випуск сертифіката описано в статті Nginx і Certbot.

  • Логін і пароль кодуються, але не шифруються, і йдуть із кожним запитом. Без HTTPS їх побачить кожен, хто слухає канал.
  • Блокування добору немає: добирати паролі можна скільки завгодно.
  • Якщо закрити весь сайт WordPress, перестануть працювати запити до REST API з паролями застосунків, бо вони теж використовують заголовок Authorization. Захищайте окремі шляхи.

Для добору поставте fail2ban: він уміє читати журнал помилок вебсервера й банити адреси після невдалих входів. Налаштування описано в статті Налаштування fail2ban, а загальні заходи для Nginx зібрано в статті Зміцнення Nginx.

Часті питання

Як поставити пароль на сайт у Nginx?

Створіть файл паролів командою htpasswd, потім додайте в потрібний server або location директиви auth_basic із текстом запрошення та auth_basic_user_file зі шляхом до файлу. Перевірте конфігурацію командою nginx -t і перечитайте її. Після цього браузер запитуватиме логін і пароль перед показом сторінок.

Як закрити паролем сайт на WordPress?

Найпростіше закрити паролем лише сторінку входу wp-login.php і каталог wp-admin, а не весь сайт. Так відвідувачі та REST API продовжать працювати. Для тестової копії припустимо закрити все цілком. Пам'ятайте, що без HTTPS пароль передається у відкритому вигляді, тому спершу підключіть сертифікат.

Чи безпечний Basic Auth без HTTPS?

Ні. Логін і пароль передаються в кожному запиті в кодуванні base64, яке не є шифруванням. Кожен, хто перехопить трафік, прочитає їх за секунду. Використовуйте Basic Auth лише поверх HTTPS і доповнюйте його блокуванням добору через fail2ban, інакше пароль можна добирати нескінченно.

Чому браузер не запитує пароль після правки?

Найчастіше не перечитано конфігурацію Nginx, в Apache не дозволено AllowOverride AuthConfig, або директиви стоять не в тому блоці: запит обробляє інший location, наприклад той, що передає його в PHP. Перевірте, який блок справді відповідає за адресу, і перечитайте конфігурацію вебсервера.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці