Защитите свой сайт паролем за 5 минут: настраиваем Basic Auth в Nginx

Защитите свой сайт паролем за 5 минут: настраиваем Basic Auth в Nginx

Вспомните стандартное окошко с логином и паролем при входе в настройки вашего Wi-Fi роутера. Этот простой, но надежный механизм защиты можно в два счета перенести на ваш сайт! Речь идет о Basic Auth — встроенной аутентификации на уровне веб-сервера.

Хотите быстро ограничить доступ к админке, скрыть тестовую версию сайта от посторонних глаз или поставить пароль на весь проект? Nginx позволяет сделать это буквально парой директив. Вам не нужны сложные системы или базы данных — только файл с пользователями и несколько строк в конфигурации.

Мы наглядно разберем, как создать этот файл с помощью утилиты `htpasswd`, и куда именно вписать волшебные строки `auth_basic`. Вы научитесь защищать как весь сайт целиком, так и отдельные, особо важные маршруты, например, `wp-admin` в WordPress.

Отдельно разберем тонкости настройки для конкретных `location`-блоков, чтобы ваша авторизация работала безупречно и не конфликтовала с обработкой PHP-скриптов. Это проще, чем кажется, и займет у вас считанные минуты.

Готовы добавить вашему сайту еще один уровень безопасности? Переходите к статье — и уже через 5 минут ваш контент будет под надежной защитой!


Даже если вы ещё не знаете что такое Basic Auth, вы наверняка уже с ней сталкивались, например, при входе в интерфейс настройки роутера. Это механизм авторизации по имени пользователя и паролю на уровне веб-сервера. Такая авторизация поддерживается и в Apache и в Nginx.

В этой статье мы разберемся как настроить Basic Auth Nginx, для определённого маршрута или для всего сайта.

Настройка Basic Auth в Nginx

Окно авторизации Basic Auth выглядит вот так:

Защитите свой сайт паролем за 5 минут: настраиваем Basic Auth в Nginx

Думаю теперь вы знаете о чём идёт речь. Такую авторизацию можно настроить для определённого URL, для всего сайта или для всех сайтов. Но сначала надо создать файл со списком пользователей и паролей. Для этого используется утилита htpasswd. Синтаксис у команды такой:

$ sudo htpasswd -c /путь/к/файлу имя_пользователя

Опция -c используется для создания нового файла, для редактирования уже существующих её использовать не надо. Например:

sudo htpasswd -c /etc/nginx/auth.basic admin

Защитите свой сайт паролем за 5 минут: настраиваем Basic Auth в Nginx

Утилита два раза спросит пароль. Пароль вводится но не отображается. Это так должно быть для безопасности. После того, как файл будет создан можно переходить к настройке Nginx.

Для того чтобы защитить паролем все ваши сайты просто добавьте эти директиву в секцию http файла /etc/nginx/nginx.conf:

auth_basic "Restricted area";
auth_basic_user_file /etc/nginx/auth.basic;

Защитите свой сайт паролем за 5 минут: настраиваем Basic Auth в Nginx

Для защиты только определённой URL добавьте эти же директивы в нужный блок location. Например для /wp-admin/admin-ajax.php:

location /wp-admin/admin-ajax.php {
auth_basic "Restricted area";
auth_basic_user_file /etc/nginx/auth.basic;
}

Защитите свой сайт паролем за 5 минут: настраиваем Basic Auth в Nginx

Для WordPress такой location лучше размещать вложенным в location /. Тогда будут работать все правила описанные там, плюс ваше на защиту доступа. Если же наоборот надо разрешить доступ для определённого location то директива будут выглядеть так auth_basic "off". Например:

location /wp-admin/admin-ajax.php {
auth_basic "off";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9002;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}

Защитите свой сайт паролем за 5 минут: настраиваем Basic Auth в Nginx

Здесь разместить этот блок location вложенным уже не получиться, поэтому следует добавить в него обработку php иначе веб-сервер просто предложит пользователям скачать php скрипт, к которому они обращаются.

Выводы

Как видите, авторизация по паролю nginx настраивется не так уж сложно, надо только правильно сформулировать блок location. Если у вас остались вопросы, спрашивайте в комментариях!

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив