Иногда возникает потребность ограничить доступ к определенному сайту-проекту, например, на время разработки или к сайту, который должен быть доступен только для определенного круга лиц. При этом не всегда удобно добавлять модуль авторизации в сам проект.
На простом примере будет показана настройка доступа для веб-серверов Nginx и Apache.
Создание файла с ключами
Для создания пар пользователь-пароль воспользуемся утилитой htpasswd. Установить её можно следующей командой:
$ apt install apache2-utils
Создадим файл с ключами .htpasswd и добавим первого пользователя. Для этого запустим утилиту htpasswd с флагом -c и путем к файлу, где будут храниться ключи, а также именем первого пользователя.
Рекомендуется разместить этот файл в рабочей директории вашего веб-сервера /etc/nginx или /etc/apache2.
$ htpasswd -c /etc/nginx/.htpasswd user1
Во время выполнения команды вам будет предложено дважды ввести пароль пользователя user1.
Если файл с ключами уже создан и вы добавляете уже не первого пользователя, то не нужно больше передавать ключ -c. Создадим второго пользователя.
$ htpasswd /etc/nginx/.htpasswd user2
Когда все пользователи будут созданы, можно проверить, что находится в файле с ключами
$ cat /etc/nginx/.htpasswd
На каждой строчке есть имя пользователя и его зашифрованный пароль
user1:$apr1$cuyHIt1g$KBw/cVxx/0AwGg8Xab6yd/
user2:$apr1$FmoTpfYo$VTOJN10R98RRie7r7t46w1
Далее необходимо настроить веб-сервер Nginx или Apache, в зависимости от того, какой из них вы используете.
Настройка Nginx
Добавьте следующие директивы в конфигурационный файл вашего проекта.
- auth_basic — включение проверки авторизации
- auth_basic_user_file — путь к файлу с ключами
Их можно использовать в контекстах: http, server, location, limit_except. Это значит, что можно, например, ограничить доступ ко всему серверу (файл /etc/nginx/nginx.conf):
http {
...
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
...
}
к определенному проекту:
server {
...
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
...
}
или к конкретному адресу в проекте:
server {
...
location / {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
...
}
}
Настройка Apache
Документация по модулю mod_authn_core доступна на официальном сайте.
- AuthType — тип авторизации пользователя
- AuthName — название защищенной области
- AuthUserFile — путь к файлу с ключами
- Require — проверка доступа
Можно настроить обязательную проверку авторизации для всего сервера. Для этого в конфигурационном файле /etc/apache2/apache2.conf добавим в соответствующие теги Directory требование.
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
# Require all granted
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
Если необходимо настроить доступ только к определенному хосту, то редактируем его конфигурационный файл
<VirtualHost *:80>
DocumentRoot /var/www/html
...
<Directory "/var/www/html">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
Файл .htaccess
Вместо редактирования настроек хоста можно добавить параметры авторизации в файл .htaccess в самом проекте.
...
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
...
Чтобы Apache мог применять настройки файлов .htaccess в проектах, необходимо установить для AllowOverride значение "All" в соответствующей директории в настройках сервера.
<Directory /var/www/>
Options Indexes FollowSymLinks
# AllowOverride None
AllowOverride All
Require all granted
</Directory>
О том, как работать с файлом .htaccess можно прочитать в этой статье.
Результат
После перезагрузки сервера можно открыть страницу проекта и увидеть окно с просьбой авторизоваться.
Ссылки
Документация по модулю ngx_http_auth_basic_module для Nginx.
Документация по модулю mod_authn_core для Apache.