Задача возникла в контексте SEO, требовалось предотвратить индексацию тестовых сайтов поисковыми системами. На практике видно, что инструкции файла robots.txt выполняются поисковыми машинами не так, как ожидается. Т.е. при некоторых условиях страницы тестового сайта все равно попадают в поисковую выдачу.
Поэтому требуется более серьезный барьер, а именно блокировка контента. С этой целью можно использовать HTTP auth функцию веб сервера.
На деле это не сложная операция. Разберем её по шагам.
Формирование реквизитов
Для начала мы создадим файл, где будут храниться реквизиты для авторизации при подключении к сайту. Формируются он с помощью утилиты htpasswd.
1 |
htpasswd -c /etc/nginx/auth.htpasswd USERNAME |
Вместо USERNAME укажите имя пользователя (может быть произвольное, не связанное с UNIX имя), используемое для авторизации. Утилита потребует дважды ввести пароль. Файл с реквизитами мы создаём в каталоге с настройками nginx, которые обычно находятся в /etc/nginx.
Настройки сервера
Теперь нужно указать nginx, что требуется использовать http аутентификацию и показать, где находятся реквизиты. Инструкции должны быть вставлены в соответствующую секцию server { … } или location.
1 2 3 4 5 6 7 |
server { server_name my-example.net; ... auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/auth.htpasswd; ... } |
После auth_basic нужно указать произвольную строку или переменную, смысл которой не ясен (я полагаю, что любое значение приводимое к логической единице), или специальное значение off, которое отключает действие модуля авторизации при наследовании параметров в текущей секции конфигурации.
Проверка / применение новых настроек
С настройка мы закончили на этом этапе, остаётся проверить и применить их для запущенного сервера.
Для этого используйте штатные команды:
1 2 3 4 |
# проверка конфигурации nginx -t # загрузка новой конфигурации nginx -s reload |
В результате вы должны получать запрос на авторизацию при заходе на ваш сервер (или его определенные страницы):
При отказе от авторизации сервер будет возвращать 401-ю ошибку: Authorization Required.