Нужно было оставить один из старых сайтов в онлайне, но ограничить к нему доступ, чтобы уменьшить вероятность взлома (старая CMS, и т.д.) – так что я решил закрыть сайт паролем.
Что это за nginx?
nginx (произносится Энжин-Икс) это веб-сервер, обратный прокси и мощный кэш для поддержки и раздачи трафика, он использщуется в одних из самых крупных сайтов сегодняшнего Интернета. nginx – очень легковесный сервер, может раздавать внушительные объёмы данных при массивной параллельности запросов и минимальных требованиях к севреру, где nginx запущен.
Компания nginx была приобретена компанией F5 в 2019 году.
Я буду очень много рассказывать про nginx в 2020м году – уже давно им пользуюсь в своих серверах и решениях, так что буду использовать каждую возможность задокументировать мои настройки и поделиться опытом.
Защита сайтов паролем в nginx
Есть несколько простых шагов для защиты сайта паролем в nginx (очень похожие шаги, но с чуть иным синтаксисом, используются в другом веб-сервере – Apache):
Решить, будем мы создавать или обновлять файл с паролями. И как он будет называться.
Решить, какие имя и пароль мы будем использовать для защиты
Сгенерировать шивроанный хэш на основе пароля, добавать его в файл с паролями
Обновить конфигурацию вебсервера, чтобы активировать защиту
Сайты – это всего лишь папки с файлами на каких-то серверах. Поэтому при включении защиты паролем, можно с одинаковой лёгкостью закрыть весь сайт – например, www.unixtutorial.org или только под-раздел типа www.unixtutorial.org/images.
ИНТЕРЕСНО: хотя и говорят обычно “закрыть сайт паролем”, на самом деле защита требует двух элементов: имени пользователя и правильного к нему пароля. Так что при успешной защите сайта мы видим диалоговое окно вроде такого, спрашивающего имя пользователя и пароль:
Файл с паролями и настройка логина
Большинство доступа контролируется файлами паролей, обычно они называются htpasswd. Можно создать общий файл /etc/nginx/htpasswd или конкретный файл для каждого из сайтов, типа /etc/nginx/unixtutorial.htpasswd.
Файл с паролями – обычный текстовый. Можно создать даже так:
#touch /etc/nginx/unixtutorial.htpasswd
Но ещё лучше – воспользоваться командой htpasswd. Она входит в состав Apache tools, так что может понадобиться установить соответствующий пакет:
$sudo yum install httpd-tools
Когда мы запускаем команду htpasswd, нужно указывать два параметра: имя файла с паролями и имя пользователя, для коготорого мы хотим создать пароль.
Если указан несуществующий файл, мы получим ошибку и подсказку:
$sudo htpasswd /etc/nginx/htpasswd unixtutorial
htpasswd: cannot modify file /etc/nginx/htpasswd;use '-c' to create it.
И да, используя опцию -c (от английского create – создавать), мы можем создать файл и добавить в него пароль для пользователя unixtutorial:
$sudo htpasswd -c /etc/nginx/htpasswd unixtutorial
New password:
Re-type new password:
Adding password for user unixtutorial
Если посмотреть теперь в файл /etc/nginx/passwd, там окажется наш пользователь unixtutorial и хэш его пароля:
ВАЖНО: самих паролей в этом файле нет, но хэши могут быть использованы для подбора паролей, так что рекомендую защищать эти файлы, как и любую другую важную информацию.
Активация защиты вебсайта паролем
Мой сайт настраивается вот таким фрагментом конфигурации nginx:
Как видно, мы указали имя файла с паролями, который только что создали. Есть ещё параметр для auth_basic, можно заменить слово Restricted на любое другое текстовое сообщение – его будет видно в диалоге запроса имени-пароля при доступе к сайту.
Заходите на страницу Facebook или присоединяйтесь к чату в Telegram:
Я использую браузер Brave
Попробуйте сами:
IT Консалтинг
У меня есть консалтинговая компания: Tech Stack Solutions. Я помогаю планировать и создавать облачные решения на базе AWS и помогаю с развёртыванием и поддержкой сервисов на Unix/Linux. Свяжитесь со мной тут.