Вступление
При настройке веб-сервера часто существуют разделы сайта, доступ к которым вы хотите ограничить. Веб-приложения часто предоставляют свои собственные методы аутентификации и авторизации, но сам веб-сервер может использоваться для ограничения доступа, если они неадекватны или недоступны.
В этом руководстве мы покажем, как защитить паролем ресурсы на веб-сервере Nginx, работающем в Ubuntu 14.04.
Предпосылки
Для начала вам понадобится доступ к серверной среде Ubuntu 14.04. Для выполнения административных задач вам понадобится пользователь без полномочий root с привилегиями + sudo +
. Чтобы узнать, как создать такого пользователя, следуйте нашему Ubuntu 14.04 начальному руководству по установке сервера.
Если вы еще этого не сделали, установите 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 ':' >> /etc/nginx/.htpasswd"
Затем добавьте зашифрованную запись пароля для имени пользователя, набрав:
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
Вы можете повторить этот процесс для дополнительных имен пользователей. Вы можете увидеть, как имена пользователей и зашифрованные пароли хранятся в файле, набрав:
cat /etc/nginx/.htpasswd
Outputsammy:$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
Вам будет предложено предоставить и подтвердить пароль для пользователя.
Оставьте аргумент + -c +
для любых дополнительных пользователей, которых вы хотите добавить:
sudo htpasswd /etc/nginx/.htpasswd
Если мы просмотрим содержимое файла, мы увидим имя пользователя и зашифрованный пароль для каждой записи:
cat /etc/nginx/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Настройте проверку подлинности с помощью пароля Nginx
Теперь, когда у нас есть файл с нашими пользователями и паролями в формате, который может прочитать Nginx, нам нужно настроить Nginx для проверки этого файла перед обслуживанием нашего защищенного содержимого.
Начните с открытия файла конфигурации блока сервера, к которому вы хотите добавить ограничение. В нашем примере мы будем использовать файл блока сервера + default +
, установленный через пакет Uginntu Nginx:
sudo nano /etc/nginx/sites-enabled/
Внутри, с удаленными комментариями, файл должен выглядеть примерно так:
/ И т.д. / 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;
}
}
Чтобы настроить аутентификацию, вам нужно выбрать контекст для ограничения. Помимо прочего, Nginx позволяет вам устанавливать ограничения на уровне сервера или внутри определенного места. В нашем примере мы ограничим весь корневой каталог документа блоком местоположения, но вы можете изменить этот список, чтобы он был предназначен только для определенного каталога в веб-пространстве:
В этом блоке местоположения используйте директиву + auth_basic , чтобы включить аутентификацию и выбрать имя области, которое будет отображаться пользователю при запросе учетных данных. Мы будем использовать директиву ` auth_basic_user_file +`, чтобы указать Nginx на файл паролей, который мы создали:
/ И т.д. / 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;
}
}
Сохраните и закройте файл, когда вы закончите. Перезапустите Nginx для реализации вашей политики паролей:
sudo service nginx restart
Указанный вами каталог теперь должен быть защищен паролем.
Подтвердите аутентификацию по паролю
Чтобы подтвердить, что ваш контент защищен, попробуйте получить доступ к вашему ограниченному контенту в веб-браузере. Вы должны получить приглашение с именем пользователя и паролем, которое выглядит следующим образом:
изображение: https: //assets.digitalocean.com/articles/nginx_password_1404/password_prompt.png [запрос пароля Nginx]
Если вы введете правильные учетные данные, вам будет разрешен доступ к содержимому. Если вы введете неправильные учетные данные или нажмете «Отмена», вы увидите страницу ошибки «Требуется авторизация»:
изображение: https: //assets.digitalocean.com/articles/nginx_password_1404/unauthorized_error.png [несанкционированная ошибка Nginx]
Заключение
Теперь у вас должно быть все необходимое для настройки базовой аутентификации для вашего сайта. Помните, что защиту паролем следует сочетать с шифрованием SSL, чтобы ваши учетные данные не отправлялись на сервер в виде простого текста. Чтобы узнать, как создать самозаверяющий сертификат SSL для использования с Nginx, следуйте https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu -14-04 [это руководство]. Чтобы узнать, как установить коммерческий сертификат, следуйте th руководства.