Поиск по сайту:

Как настроить базовую HTTP-аутентификацию в Nginx


Базовая HTTP-аутентификация — это механизм безопасности, позволяющий ограничить доступ к вашему веб-сайту/приложению или некоторым его частям путем настройки простой аутентификации по имени пользователя и паролю. Его можно использовать по существу для защиты всего HTTP-сервера, отдельных блоков сервера (виртуальных хостов в Apache) или блоков местоположения.

Читайте также: Как настроить виртуальные хосты на основе имени и IP (серверные блоки) с помощью NGINX

Как следует из названия, это не безопасный метод, на который можно положиться; вам следует использовать его в сочетании с другими, более надежными мерами безопасности. Например, если ваше веб-приложение работает по протоколу HTTP, учетные данные пользователя передаются в виде обычного текста, поэтому вам следует рассмотреть возможность включения HTTPS.

Цель этого руководства — помочь вам добавить небольшой, но полезный уровень безопасности для защиты частного/привилегированного контента в ваших веб-приложениях (например, со стороны администратора, помимо прочего). Вы также можете использовать его для предотвращения доступа к веб-сайту или приложению, которое все еще находится на стадии разработки.

Требования

  1. Установите стек LEMP в CentOS/RHEL 7.
  2. Установите стек 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.

  1. Как защитить паролем веб-каталоги в Nginx
  2. Полное руководство по защите, усилению защиты и повышению производительности Nginx
  3. Настройка HTTPS с SSL-сертификатом Let’s Encrypt для Nginx

В этом руководстве мы показали, как реализовать базовую аутентификацию HTTP на веб-сервере HTTP Nginx. Чтобы задать любые вопросы, воспользуйтесь формой обратной связи ниже.