Разберу самый простой способ установить пароль на сайт на VPS — через HTTP Basic Authentication в Nginx.
Убедитесь, что у вас установлен Nginx и пакет apache2-utils (содержит утилиту htpasswd):
sudo apt update
sudo apt install nginx apache2-utils
Запустите и включите автозагрузку Nginx:
sudo systemctl start nginx
sudo systemctl enable nginx
Создайте файл .htpasswd и добавьте первого пользователя:
sudo htpasswd -c /etc/nginx/.htpasswd admin
Флаг -c создаёт новый файл. Система запросит ввести и подтвердить пароль для пользователя admin.
Чтобы добавить других пользователей (без -c):
sudo htpasswd /etc/nginx/.htpasswd developer
sudo htpasswd /etc/nginx/.htpasswd manager
Проверьте содержимое файла:
sudo cat /etc/nginx/.htpasswd
Вы увидите строки вида:
admin:$apr1$rOioh4..$GKUTVCr9fOUG9VT4P3KFf0
developer:$apr1$8KqVj2..$bSfWm9jC.xXHXA8gJCpNZ/
Откройте конфигурационный файл сайта:
sudo nano /etc/nginx/sites-available/default
Выберите вариант защиты:
Вариант 1. Защита всего сайта
Добавьте директивы в блок server:
server {
listen 80;
server_name your_domain.com;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
root /var/www/html;
index index.html;
}
}
Вариант 2. Защита конкретного раздела
Добавьте блок location с защитой:
server {
listen 80;
server_name your_domain.com;
location /admin {
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
root /var/www/html;
index index.html;
}
location / {
root /var/www/html;
index index.html;
}
}
Проверьте конфигурацию на ошибки:
sudo nginx -t
Если всё верно, перезагрузите Nginx:
sudo systemctl reload nginx
Откройте сайт в браузере. При доступе к защищённому разделу появится окно ввода логина и пароля. Введите учётные данные, созданные на шаге 2.
При правильных данных откроется сайт, при неправильных — ошибка 401 Authorization Required.
Используйте HTTPS. HTTP Basic Auth передаёт данные в кодировке Base64 (не шифрование!). Без SSL/TLS пароли могут быть перехвачены. Установите сертификат Let’s Encrypt.
Права доступа к файлу паролей:
sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
Не используйте для критичных данных. Метод подходит для:
защиты staging‑окружений;
ограничения доступа к админ‑панелям;
временной защиты контента.
Для сложных сценариев рассмотрите OAuth 2.0 или JWT.
Браузер бесконечно запрашивает пароль: проверьте путь к .htpasswd, синтаксис директив, конфликтующие блоки location.
Ошибка 403 Forbidden: убедитесь, что у Nginx есть права на чтение файла паролей.
Проблемы совместимости: для максимальной совместимости используйте алгоритм MD5:
sudo htpasswd -m -c /etc/nginx/.htpasswd username
Разберу самый простой способ установить пароль на сайт на VPS с Apache2 — через HTTP Basic Authentication.
Убедитесь, что Apache2 установлен и запущен:
sudo systemctl status apache2
Если не установлен, установите:
sudo apt update
sudo apt install apache2
Установите утилиту htpasswd (входит в пакет apache2-utils):
sudo apt install apache2-utils
Создайте файл .htpasswd и добавьте первого пользователя:
sudo htpasswd -c /etc/apache2/.htpasswd admin
Флаг -c создаёт новый файл. Система запросит ввести и подтвердить пароль для пользователя admin.
Чтобы добавить других пользователей (без -c):
sudo htpasswd /etc/apache2/.htpasswd developer
sudo htpasswd /etc/apache2/.htpasswd manager
Проверьте содержимое файла:
sudo cat /etc/apache2/.htpasswd
Вы увидите строки вида:
admin:$apr1$rOioh4..$GKUTVCr9fOUG9VT4P3KFf0
developer:$apr1$8KqVj2..$bSfWm9jC.xXHXA8gJCpNZ/
Выберите вариант защиты:
Вариант 1. Защита всего сайта через конфигурационный файл
Откройте конфигурационный файл виртуального хоста:
sudo nano /etc/apache2/sites-available/000-default.conf
Добавьте директивы в блок <Directory> или <Location>:
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
Вариант 2. Защита через файл .htaccess (проще для отдельных директорий)
Разрешите использование .htaccess в конфигурации Apache. Откройте файл виртуального хоста и измените AllowOverride None на AllowOverride All:
<Directory "/var/www/html">
AllowOverride All
# ... другие настройки
</Directory>
Создайте файл .htaccess в нужной директории (например, в /var/www/html):
sudo nano /var/www/html/.htaccess
Добавьте в него следующие строки:
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Убедитесь, что модуль auth_basic активирован:
sudo a2enmod auth_basic
Перезапустите Apache:
sudo systemctl restart apache2
Убедитесь, что Apache может прочитать файл паролей:
sudo chown www-data:www-data /etc/apache2/.htpasswd
sudo chmod 640 /etc/apache2/.htpasswd
Откройте сайт в браузере. При доступе к защищённому разделу появится окно ввода логина и пароля. Введите учётные данные, созданные на шаге 2.
При правильных данных откроется сайт, при неправильных — ошибка 401 Authorization Required.
Используйте HTTPS. HTTP Basic Auth передаёт данные в кодировке Base64 (не шифрование!). Без SSL/TLS пароли могут быть перехвачены. Установите сертификат Let’s Encrypt:
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
Не используйте для критичных данных. Метод подходит для:
защиты staging‑окружений;
ограничения доступа к админ‑панелям;
временной защиты контента.
Резервное копирование файла паролей. Храните копию /etc/apache2/.htpasswd в безопасном месте.
Регулярно меняйте пароли. Для смены пароля пользователя используйте:
sudo htpasswd /etc/apache2/.htpasswd username
Ошибка 500 Internal Server Error: проверьте синтаксис в .htaccess или конфигурационном файле. Убедитесь, что AllowOverride установлен в All.
Браузер бесконечно запрашивает пароль: проверьте путь к .htpasswd, правильность логина/пароля, права доступа к файлу.
Ошибка 403 Forbidden: убедитесь, что у Apache есть права на чтение файла паролей и директории сайта.
Директивы не применяются: проверьте, активирован ли модуль auth_basic, перезапустите Apache.
Ограничение по IP + пароль. Добавьте в .htaccess или конфигурацию:
Require ip 192.168.1.0/24
Несколько пользователей с разными правами. Используйте Require user username вместо Require valid-user.
Разные пароли для разных директорий. Создайте отдельные файлы .htpasswd для каждой защищённой директории.