Как настроить базовую HTTP-аутентификацию в Nginx
Базовая HTTP-аутентификация — это механизм безопасности, позволяющий ограничить доступ к вашему веб-сайту/приложению или некоторым его частям путем настройки простой аутентификации по имени пользователя и паролю. Его можно использовать по существу для защиты всего HTTP-сервера, отдельных блоков сервера (виртуальных хостов в Apache) или блоков местоположения.
Читайте также: Как настроить виртуальные хосты на основе имени и IP (серверные блоки) с помощью NGINX
Как следует из названия, это не безопасный метод, на который можно положиться; вам следует использовать его в сочетании с другими, более надежными мерами безопасности. Например, если ваше веб-приложение работает по протоколу HTTP, учетные данные пользователя передаются в виде обычного текста, поэтому вам следует рассмотреть возможность включения HTTPS.
Цель этого руководства — помочь вам добавить небольшой, но полезный уровень безопасности для защиты частного/привилегированного контента в ваших веб-приложениях (например, со стороны администратора, помимо прочего). Вы также можете использовать его для предотвращения доступа к веб-сайту или приложению, которое все еще находится на стадии разработки.
Требования
- Установите стек LEMP в CentOS/RHEL 7.
- Установите стек LEMP в Ubuntu/Debian
Создать файл пользователя HTTP-аутентификации
Вам следует начать с создания файла, в котором будут храниться пары имя пользователя:пароль
. Для создания этого файла мы будем использовать утилиту htpasswd с HTTP-сервера Apache.
Сначала убедитесь, что в вашей системе установлены пакеты apache2-utils или httpd-tools, предоставляющие утилиту htpasswd, в противном случае запустите соответствующую команду для ваш дистрибутив, чтобы установить его:
yum install httpd-tools [RHEL/CentOS]
sudo apt install apache2-utils [Debian/Ubuntu]
Затем выполните команду htpasswd ниже, чтобы создать файл паролей для первого пользователя. Опция -c
используется для указания файла пароля. Как только вы нажмете [Enter], вам будет предложено ввести пароль пользователя.
htpasswd -c /etc/nginx/conf.d/.htpasswd developer
Добавьте второго пользователя и не используйте здесь опцию -c
.
htpasswd /etc/nginx/conf.d/.htpasswd admin
Теперь, когда у вас есть готовый файл паролей, приступайте к настройке тех частей вашего веб-сервера, к которым вы хотите ограничить доступ. Чтобы просмотреть содержимое файла паролей (включая имена пользователей и зашифрованные пароли), используйте команду cat ниже.
cat /etc/nginx/conf.d/.htpasswd
Настройка HTTP-аутентификации для Nginx
Как мы упоминали ранее, вы можете ограничить доступ к вашему веб-серверу, отдельному веб-сайту (используя его блок сервера) или директиве местоположения. Для этого можно использовать две полезные директивы.
- auth_basic – включает проверку имени пользователя и пароля с использованием протокола «HTTP Basic Authentication».
- auth_basic_user_file – указывает файл паролей.
Защита паролем виртуальных хостов Nginx
Чтобы реализовать базовую аутентификацию для всего веб-сервера, которая применяется ко всем блокам сервера, откройте файл /etc/nginx/nginx.conf и добавьте следующие строки в контексте http:
http{
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
……...
}
Защита веб-сайта или домена Nginx паролем
Чтобы включить базовую аутентификацию для определенного домена или поддомена, откройте его файл конфигурации в /etc/nginx/conf.d/ или /etc/nginx/conf/sites-available . (в зависимости от того, как вы установили Nginx), затем добавьте приведенную ниже конфигурацию в блок или контекст сервера:
server {
listen 80;
server_name example.com;
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
location / {
……..
}
……...
}
Защита веб-каталога паролем в Nginx
Вы также можете включить базовую аутентификацию в директиве местоположения. В приведенном ниже примере всем пользователям, пытающимся получить доступ к блоку местоположения /admin
, будет предложено пройти аутентификацию.
server {
listen 80;
server_name example.com www.example.com;
location / {
……..
}
location /admin/ {
auth_basic "Restricted Access!";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
location /public/{
auth_basic off; #turns off basic http authentication off for this block
}
……..
}
Если вы настроили базовую HTTP-аутентификацию, всем пользователям, которые попытаются получить доступ к вашему веб-серверу, поддомену или определенной части сайта (в зависимости от того, где вы это реализовали), будет предложено ввести имя пользователя и пароль, как показано на снимке экрана ниже. .
В случае неудачной аутентификации пользователя будет отображена ошибка «401 Требуется авторизация», как показано ниже.
Дополнительную информацию можно найти в разделе «Ограничение доступа с помощью базовой HTTP-аутентификации».
Возможно, вам также будет интересно прочитать следующие полезные руководства, связанные с HTTP-сервером Nginx.
- Как защитить паролем веб-каталоги в Nginx
- Полное руководство по защите, усилению защиты и повышению производительности Nginx
- Настройка HTTPS с SSL-сертификатом Let’s Encrypt для Nginx
В этом руководстве мы показали, как реализовать базовую аутентификацию HTTP на веб-сервере HTTP Nginx. Чтобы задать любые вопросы, воспользуйтесь формой обратной связи ниже.