Проект: Защищаем вебсайт паролем в nginx
Перевод: Password Protect a Website with nginx
nginx webserver and load balancer
Нужно было оставить один из старых сайтов в онлайне, но ограничить к нему доступ, чтобы уменьшить вероятность взлома (старая 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.
Файл с паролями – обычный текстовый. Можно создать даже так:
Но ещё лучше – воспользоваться командой htpasswd. Она входит в состав Apache tools, так что может понадобиться установить соответствующий пакет:
Когда мы запускаем команду htpasswd, нужно указывать два параметра: имя файла с паролями и имя пользователя, для коготорого мы хотим создать пароль.
Если указан несуществующий файл, мы получим ошибку и подсказку:
И да, используя опцию -c (от английского create – создавать), мы можем создать файл и добавить в него пароль для пользователя unixtutorial:
Если посмотреть теперь в файл /etc/nginx/passwd, там окажется наш пользователь unixtutorial и хэш его пароля:
ВАЖНО: самих паролей в этом файле нет, но хэши могут быть использованы для подбора паролей, так что рекомендую защищать эти файлы, как и любую другую важную информацию.
Активация защиты вебсайта паролем
Мой сайт настраивается вот таким фрагментом конфигурации nginx:
Защита паролем делается на уровне подраздела (location). В моём случае location / означает, что весь сайт (а не подраздел) будет защищён паролем.
Так что прямо перед элементом proxy_pass я добавляю защиту паролем:
Как видно, мы указали имя файла с паролями, который только что создали. Есть ещё параметр для auth_basic, можно заменить слово Restricted на любое другое текстовое сообщение – его будет видно в диалоге запроса имени-пароля при доступе к сайту.
Вот как будет выглядеть это дело:
Сохраняем файл и перезапускаем nginx:
Порядок! Теперь сайт https://forum.reys.net защищён паролем!
Ссылки
- Официальный сайт nginx
- Проекты Unix Tutorial
- Install Ubuntu on Dell XPS laptop (моя статья на английском)
- Project: NAS storage with Helios 4 (моя статья на анлийском)
nginx webserver and load balancer
Нужно было оставить один из старых сайтов в онлайне, но ограничить к нему доступ, чтобы уменьшить вероятность взлома (старая 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.
Файл с паролями – обычный текстовый. Можно создать даже так:
Но ещё лучше – воспользоваться командой htpasswd. Она входит в состав Apache tools, так что может понадобиться установить соответствующий пакет:
Когда мы запускаем команду htpasswd, нужно указывать два параметра: имя файла с паролями и имя пользователя, для коготорого мы хотим создать пароль.
Если указан несуществующий файл, мы получим ошибку и подсказку:
И да, используя опцию -c (от английского create – создавать), мы можем создать файл и добавить в него пароль для пользователя unixtutorial:
Если посмотреть теперь в файл /etc/nginx/passwd, там окажется наш пользователь unixtutorial и хэш его пароля:
ВАЖНО: самих паролей в этом файле нет, но хэши могут быть использованы для подбора паролей, так что рекомендую защищать эти файлы, как и любую другую важную информацию.
Активация защиты вебсайта паролем
Мой сайт настраивается вот таким фрагментом конфигурации nginx:
Защита паролем делается на уровне подраздела (location). В моём случае location / означает, что весь сайт (а не подраздел) будет защищён паролем.
Так что прямо перед элементом proxy_pass я добавляю защиту паролем:
Как видно, мы указали имя файла с паролями, который только что создали. Есть ещё параметр для auth_basic, можно заменить слово Restricted на любое другое текстовое сообщение – его будет видно в диалоге запроса имени-пароля при доступе к сайту.
Вот как будет выглядеть это дело:
Сохраняем файл и перезапускаем nginx:
Порядок! Теперь сайт https://forum.reys.net защищён паролем!
Ссылки
- Официальный сайт nginx
- Проекты Unix Tutorial
- Install Ubuntu on Dell XPS laptop (моя статья на английском)
- Project: NAS storage with Helios 4 (моя статья на анлийском)