Иногда возникает желание поставить аутентификацию (запаролить) сайт или же папку на сайте.
Например:
- Для области администрирования
- Проводятся работы по разработке и рано открывать область или функционал широкому кругу пользователей
- Область, предназначенная только для разработки
- Необходимо закрыть от индексирования (не через специальные файлы, а совсем)
- Есть желание предоставлять доступ к области только для ограниченного круга лиц
- Другие причины
Генерация аутентификационного файла
Такого рода аутентификация называется Basic auth (или Http auth), подразумевает ввод логина и пароля и выглядит следующим образом
При этом, если логин и пароль не введен или введен не верно — выдает 401ю ошибку
Обычно, файл, в котором хранятся логин и зашифрованный пароль, находится по пути:
/etc/nginx/.htpasswd
Проверим, существует ли уже такой файл
$ sudo su # cat /etc/nginx/.htpasswd
И если он не существует, создадим такой файл с пользователем user01
# htpasswd -c /etc/nginx/.htpasswd user01
Система предложит 2 раза ввести пароль, который мы заранее подготовили и сохранили. Именно этот логин (user01) и пароль будут использованы для аутентификации
Если же файл .htpasswd существует, можно добавить пользователя таким образом
# htpasswd -c /etc/nginx/.htpasswd user02
При этом, далее, можно в режиме редактирования файла убрать других пользователей, если это необходимо — удалением соответствующих строк.
Если введенные пользователь (user02) уже существует — таким образом, мы просто поменяем ему пароль…
Конфигурирование Nginx
Следующий шаг — внедрение аутентификации в конфигурацию сайта Nginx. При этом, можно закрыть как весь сайт, расположив строчки:
auth_basic "Restricted area"; auth_basic_user_file /etc/nginx/.htpasswd
На уровне server:
server { .… auth_basic "Restricted area"; auth_basic_user_file /etc/nginx/.htpasswd …. }
Так и на уровне какой то области (папки), в примере ниже в зоне «admin»:
server { .… location /admin { …. auth_basic "Restricted area"; auth_basic_user_file /etc/nginx/.htpasswd …. } …. }
После добавления в конфигурацию сайте — не забываем перезагрузить nginx.
Исключения для определенных IP
Бонусом, есть возможность добавить какие то айпишники в «белый список», чтобы для них не запрашивалась аутентификация, а для остальных — запрашивались логин и пароль. Делается это следующим образом:
{ … satisfy any; allow 11.22.33.44; # whitelisted IP 1 allow 22.33.44.55; # whitelisted IP 2 … deny all; auth_basic "Restricted area"; auth_basic_user_file /etc/nginx/.htpasswd; … }