Введение
В этой статье мы покажем, как ограничить доступ к веб-серверу Nginx, работающему в Ubuntu 17.10.
Предпосылки
Прежде чем приступить к работе с этим руководством, на вашем сервере должен быть установлен пользователь без полномочий root с привилегиями sudo. Следуйте этому руководству: Первоначальная настройка в Ubuntu 16.04-17.10
Если вы еще этого не сделали, установите Nginx на свой сервер, набрав в консоли:
sudo apt-get update
sudo apt-get install nginx
Создайте файл паролей
Для начала нам нужно создать файл, который будет содержать наши данные для входа: имя пользователя и пароль. Вы можете сделать это с помощью инструмента OpenSSL, который уже может быть доступен на сервере. Кроме того, вы можете использовать инструмент htpasswd, включенный в пакет.
Создайте файл паролей с помощью OpenSSL
Если на вашем сервере установлен OpenSSL, вы можете создать файл паролей без дополнительных пакетов. Мы создадим скрытый файл с именем .htpasswd в каталоге конфигурации /etc/nginx для хранения наших данных для входа: имени пользователя и пароля.
Вы можете добавить имя пользователя в файл с помощью этой команды. Мы используем grok в качестве имени пользователя, но вы можете использовать любое другое имя:
sudo sh -c "echo -n 'grok:' >> /etc/nginx/.htpasswd"
Затем добавьте зашифрованный пароль для выбранного имени пользователя, набрав:
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"
Вы можете повторить этот процесс для дополнительных пользователей. Вы можете увидеть, как пользователи и зашифрованные пароли хранятся в файле, набрав:
cat /etc/nginx/.htpasswd
Output
grok:$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 для создания указанного файла. В этом примере мы можем использовать то же имя пользователя, предварительно указав «grok» в конце команды, чтобы создать новую запись в файле:
sudo htpasswd -c /etc/nginx/.htpasswd grok
Вам будет предложено ввести и подтвердить пароль для пользователя.
Если вы хотите добавить больше пользователей, больше не используйте параметр -c, например:
sudo htpasswd /etc/nginx/.htpasswd nuovo_utente
Мы можем видеть имя пользователя и зашифрованный пароль для каждой записи:
cat /etc/nginx/.htpasswd
Output
grok:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
nuovo_utente:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Настройте Nginx с паролем аутентификации
Теперь, когда у нас есть файл с нашими пользователями и паролями в формате, который может прочитать Nginx, нам нужно настроить Nginx для чтения этого файла.
Начните с открытия файла конфигурации блока сервера, на который вы хотите добавить ограничение. В нашем примере мы будем использовать файл блокировки сервера по умолчанию, установленный через пакет Ubuntu Nginx:
Из консоли:
sudo nano /etc/nginx/sites-enabled/default
Найдите следующий блок:
...nginx
location /{
try_files $uri $uri/=404;
}...
Добавьте следующие элементы:
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
Окончательный результат должен быть следующим:
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
Указанный вами каталог теперь должен быть защищен паролем.
Подключитесь к вашему общедоступному IP-адресу или локальному хосту:
http://localhost/
Вам будет предложено ввести имя пользователя и пароль.
Настройка Nginx с паролем аутентификации в Ubuntu завершена.