Введение
При настройке веб-сервера часто есть разделы сайта, к которым вы хотите ограничить доступ. Веб-приложения часто предоставляют свои собственные методы аутентификации и авторизации, но сам веб-сервер может использоваться для ограничения доступа, если они неадекватны или недоступны.
Установка nginx
sudo apt-get update
sudo apt-get install nginx
Создайте файл паролей
Для начала нам нужно создать файл, в котором будут храниться наши комбинации имени пользователя и пароля. Вы можете сделать это с помощью утилит OpenSSL, которые уже могут быть доступны на вашем сервере. Кроме того, вы можете использовать специальную htpasswd
утилиту, включенную в apache2-utils
пакет (файлы паролей Nginx используют тот же формат, что и Apache). Выберите метод ниже, который вам больше нравится.
Создайте файл паролей с помощью утилит OpenSSL
Если на вашем сервере установлен OpenSSL, вы можете создать файл паролей без дополнительных пакетов. Мы создадим скрытый файл с именем .htpasswd
в /etc/nginx
каталоге конфигурации для хранения наших комбинаций имени пользователя и пароля.
Вы можете добавить имя пользователя в файл с помощью этой команды. Мы используем sammy
в качестве имени пользователя, но вы можете использовать любое другое имя:
sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"
Затем добавьте зашифрованный пароль для имени пользователя, набрав:
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
Вы можете повторить этот процесс для дополнительных имен пользователей. Вы можете увидеть, как имена пользователей и зашифрованные пароли хранятся в файле, набрав:
cat /etc/nginx/.htpasswd
Output
sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1
Создайте файл паролей с помощью утилит Apache
Хотя OpenSSL может шифровать пароли для аутентификации Nginx, многим пользователям проще использовать специально созданную утилиту. Утилита htpasswd
, находящаяся в apache2-utils
комплекте, хорошо справляется с этой функцией.
Установите apache2-utils
пакет на свой сервер, набрав:
sudo apt-get update
sudo apt-get install apache2-utils
Теперь у вас есть доступ к htpasswd
команде. Мы можем использовать это для создания файла паролей, который Nginx может использовать для аутентификации пользователей. Для этой цели мы создадим скрытый файл, который называется .htpasswd
в нашем /etc/nginx
каталоге конфигурации.
При первом использовании этой утилиты нам нужно добавить -c
возможность создания указанного файла. Мы указываем имя пользователя ( sammy
в этом примере) в конце команды, чтобы создать новую запись в файле:
sudo htpasswd -c /etc/nginx/.htpasswd sammy
Вам будет предложено ввести и подтвердить пароль для пользователя.
Оставьте -c
аргумент для любых дополнительных пользователей, которых вы хотите добавить:
sudo htpasswd /etc/nginx/.htpasswd another_user
Если мы просмотрим содержимое файла, мы увидим имя пользователя и зашифрованный пароль для каждой записи:
cat /etc/nginx/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Настроить аутентификацию по паролю Nginx
Теперь, когда у нас есть файл с нашими пользователями и паролями в формате, который может прочитать Nginx, нам нужно настроить Nginx для проверки этого файла перед обслуживанием нашего защищенного контента.
Начните с открытия файла конфигурации блока сервера, к которому вы хотите добавить ограничение. В нашем примере мы будем использовать default
файл блока сервера, установленный через пакет Ubuntu Nginx:
sudo nano /etc/nginx/sites-enabled/default
Копировать
Внутри, без комментариев, файл должен выглядеть примерно так:/etc/nginx/sites-enabled/по умолчанию
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
}
Чтобы настроить аутентификацию, вам нужно выбрать контекст для ограничения. Помимо прочего, Nginx позволяет вам устанавливать ограничения на уровне сервера или внутри определенного места. В нашем примере мы ограничим весь корень документа блоком местоположения, но вы можете изменить этот список, чтобы указать только конкретный каталог в веб-пространстве:
В этом блоке местоположения используйте auth_basic
директиву, чтобы включить аутентификацию и выбрать имя области, которое будет отображаться пользователю при запросе учетных данных. Мы будем использовать auth_basic_user_file
директиву, чтобы указать Nginx на созданный нами файл паролей:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Сохраните и закройте файл, когда закончите. Перезапустите Nginx, чтобы применить политику паролей:
sudo service nginx restart
Копировать
Указанный вами каталог теперь должен быть защищен паролем.
Подтвердите аутентификацию пароля
Чтобы убедиться, что ваш контент защищен, попробуйте получить доступ к контенту с ограниченным доступом в веб-браузере. Вам должно быть представлено приглашение имени пользователя и пароля, которое выглядит следующим образом:
Если вы введете правильные учетные данные, вам будет разрешен доступ к содержимому. Если вы введете неправильные учетные данные или нажмете «Отмена», вы увидите страницу с ошибкой «Требуется авторизация»:
Заключение
Теперь у вас должно быть все необходимое для настройки базовой аутентификации для вашего сайта. Имейте в виду, что защита паролем должна сочетаться с шифрованием SSL, чтобы ваши учетные данные не отправлялись на сервер в виде простого текста. Чтобы узнать, как создать самозаверяющий сертификат SSL для использования с Nginx, следуйте этому руководству . Чтобы узнать, как установить коммерческий сертификат, следуйте этому руководству .
Источник: https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-nginx-on-ubuntu-14-04
Was this helpful?
0 / 0