Как настроить аутентификацию по паролю с помощью Nginx

Введение

При настройке веб-сервера часто есть разделы сайта, к которым вы хотите ограничить доступ. Веб-приложения часто предоставляют свои собственные методы аутентификации и авторизации, но сам веб-сервер может использоваться для ограничения доступа, если они неадекватны или недоступны.

Установка 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

Копировать

Указанный вами каталог теперь должен быть защищен паролем.

Подтвердите аутентификацию пароля

Чтобы убедиться, что ваш контент защищен, попробуйте получить доступ к контенту с ограниченным доступом в веб-браузере. Вам должно быть представлено приглашение имени пользователя и пароля, которое выглядит следующим образом:

запрос пароля Nginx

Если вы введете правильные учетные данные, вам будет разрешен доступ к содержимому. Если вы введете неправильные учетные данные или нажмете «Отмена», вы увидите страницу с ошибкой «Требуется авторизация»:

Несанкционированная ошибка Nginx

Заключение

Теперь у вас должно быть все необходимое для настройки базовой аутентификации для вашего сайта. Имейте в виду, что защита паролем должна сочетаться с шифрованием 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