Когда возникает необходимость защитить какой-либо контент на сайте, но при этом бремя реализации вы не хотите возлагать на специализированное стороннее приложение, важно знать, что веб-сервер Nginx предоставляет очень простой способ защиты файлов и каталогов с помощью HTTP-аутентификации.
Для этого цели удобно использовать одну из специальных утилит Apache. Резонно звучит вопрос: “При чём здесь Apache? Я использую Nginx!” Дело в том, что, чтобы использовать HTTP-аутентификацию, веб-серверу Nginx нужен файл, в котором хранятся имя пользователя и зашифрованный пароль. Вышеупомянутая утилита, которая называется htpasswd
, как-раз и является самым простым способом сделать это, хотя, необходимо признать, что альтернативы данному методу есть. Следует уточнить, что в систему инсталлируется не весь пакет Apache, а только пакет apache2-utils
, в состав которого и входит htpasswd
.
Для установки парольной защиты сайта в нашем примере мы будем использовать виртуальный выделенный сервер, работающий на Ubuntu 22.04. На сервере произведены работы по предварительной его настройке и запущен веб-сервер Nginx, где функционирует сайт с доменным именем your-domain.host
.
Установка apache2-utils и создание пользователя
Итак, на первом шаге зарегистрируйтесь в системе пользователем, обладающим полномочиями администратора, и установите apache2-utils
с использованием пакетного менеджера apt
:
$ sudo apt install apache2-utils
По окончании инсталляции создайте нового пользователя при помощи установленной утилиты. В нашем примере мы в корневой директории Nginx создаём файл .htpasswd
, содержащий имя и пароль учётной записи, которая называется user
. Естественно, вы можете использовать свои названия для создаваемого пользователя и данного файла, и даже поместить этот файл в любую другую директорию, но помните, что не стоит сохранять его в каталоге, доступном из сети.
$ sudo htpasswd -c /etc/nginx/.htpasswd user
Флаг -c
в команде используется при создании утилитой нового файла. При добавлении новых пользователей в уже существующий файл данный флаг применять не нужно.
Убедиться в успешном создании файла можно с помощью команды ls -la
предварительно перейдя в каталог /etc/nginx/
:
$ cd /etc/nginx/
$ ls -la
В нашем случае вывод выглядел следующим образом:

Следующей командой можно увидеть содержимое созданного файла:
$ cat .htpasswd

Настройка парольной защиты сайта
На следующем шаге откройте для редактирования файл default, расположенный в директории сайта, обозначенной как дефолтная директория при установке Nginx:
$ cd /etc/nginx/sites-enabled/
$ sudo nano default
В раздел server
внесите следующие строки, позволяющие установить парольную защиту для всего сайта:
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
То есть, блок server
должен выглядеть следующим образом:

После внесения изменений закройте файл с сохранением и перезапустите службу nginx
:
$ sudo systemctl restart nginx
Строка location /
говорит о том, что защита распространяется на весь сайт начиная с его стартовой страницы. Чтобы проверить это, перейдите в браузере на ваш сайт введя в адресную строку IP-адрес или доменное имя сайта. В ответ браузер должен попросить вас ввести имя пользователя и пароль. Наш пример предполагает использование учётной записи user
, которую мы создали при помощи утилиты htpasswd
. Только при внесении корректных учётных данных вы сможете получить доступ к содержимому страницы.

Если же стоит задача защитить паролем какую-то определённую страницу, то данную строку следует привести к виду, например, location /mypage
, где /mypage
– каталог сайта, на который необходимо установить парольную защиту.
