Nginx — это легкий веб-сервер, способный обрабатывать огромное количество запросов в определенный момент времени, не загружая сервер. Он содержит сложные функции, такие как асинхронная обработка, поддержка ipv6, загрузчик кеша, поддержка http/2, горячая ссылка на блоки, пулы потоков, SPDY и SSL и многое другое. Среди них одна из самых важных функций для любого веб-сайта в целом — это блокировка хотлинкинга. Горячие ссылки — это злонамеренная практика, часто применяемая некоторыми мелкими веб-мастерами, когда они не могут позволить себе стоимость полосы пропускания и, таким образом, в конечном итоге берут ее откуда-то еще. Это мешает законным веб-мастерам использовать пропускную способность, за которую они заплатили. Вдобавок к этому связанный ресурс может быть недоступен для пользователей, которые посещают исходный веб-сайт, когда полоса пропускания, выделенная для исходного веб-мастера, исчерпана, а владелец сайта не платил за чрезмерно потребляемую пропускную способность. В общем, чтобы сохранить целостность, горячие ссылки на веб-сайты должны быть недоступны, и в этой статье рассказывается, как это легко сделать.
В подготовительном сегменте общие инструкции для обоих указанных ниже методов отменяются. Очевидно, что важно иметь консоль для доступа к серверу через SSH и правильный текстовый редактор, например nano, для открытия файла конфигурации Nginx. Как только оба будут получены, используйте следующие команды, чтобы открыть, сохранить и применить изменения. Следующие шаги предполагают, что пользователь уже получил доступ к серверу через SSH.
nano /etc/nginx/sites-available/default
nginx -t
sudo systemctl restart nginx
Общий метод очень легко реализовать и понять, поскольку он содержит только блок местоположения. Кроме того, он блокирует запросы только к определенным форматам файлов вместо того, чтобы блокировать каждый запрос от недействительных ссылок на сервер.
В следующем примере он блокирует запросы к файлам css, gif, ico, jpeg, js, png, woff, woff2, ttf, ttc, otf и eot. В блоке местоположения есть 10 условных операторов. Первый условный оператор позволяет напрямую просматривать ресурсы через веб-браузер, 2- й и 3- й блоки позволяют просматривать ресурсы через исходный сайт (как голые, так и субдомены www), остальные блоки, кроме поиска? q и последний блок позволяют сканерам поисковых систем получать доступ и индексировать ресурсы, что очень важно для индексации изображений как в изображениях Google, так и в изображениях Bing. Поиск? Q позволяет службе кеширования Google получать доступ и сохранять ресурсы вместе со страницей, и, таким образом, страница может быть доступна непосредственно через результат поиска Google, когда сайт находится в автономном режиме.
location ~* \.(css|gif|ico|jpeg|jpg|js|png|woff|woff2|ttf|ttc|otf|eot)$ { if ($http_referer !~ "^$"){ set $rule_0 1$rule_0; } if ($http_referer !~ "^http://nucuta.com/.*$"){ set $rule_0 2$rule_0; } if ($http_referer !~ "^http://nucuta.com$"){ set $rule_0 3$rule_0; } if ($http_referer !~* "google."){ set $rule_0 4$rule_0; } if ($http_referer !~* "search?q=cache"){ set $rule_0 5$rule_0; } if ($http_referer !~* "msn."){ set $rule_0 6$rule_0; } if ($http_referer !~* "yahoo."){ set $rule_0 7$rule_0; } if ($http_user_agent !~* "googlebot"){ set $rule_0 8$rule_0; } if ($http_user_agent !~* "msnbot"){ set $rule_0 9$rule_0; } if ($http_user_agent !~* "slurp"){ set $rule_0 10$rule_0; } if ($http_referer !~* "yandex."){ set $rule_0 11$rule_0; } if ($rule_0 = "10987654321"){ return 403; break; } }
Действительные рефералы — это наиболее удобный и широко признанный метод простой блокировки недействительных рефереров. Он содержит всего две строки по сравнению с предыдущим методом и очень гибкий. Однако его немного сложно переварить, поскольку в нем используются регулярные выражения и другой механизм для блокировки запросов от недопустимых референтов.
valid_referers none blocked server_names *.example.com example.* www.example.org/galleries/ ~\.google\.; if ($invalid_referer) { return 403; }
В основном он имеет два блока кода, valid_referers и условное выражение if с переменной invalid_referer. По умолчанию этот блок кода используется между и в самом начале блока местоположения перед выполнением любого другого кода, но его можно использовать и в любом другом месте, например, между блоком кода местоположения с регулярными выражениями для обнаруживать определенные форматы файлов, чтобы сделать блокировку релевантной для вышеупомянутых форматов файлов, как в методе 1. Как объяснялось ранее, метод содержит только два блока кода, первый блок кода содержит 3 ключевых слова, первое — «нет», когда Поле referer отсутствует в HTTP-запросе, второе поле «блокируется», когда поле referer удаляется какой-либо промежуточной стороной, такой как прокси, брандмауэр и т. д., третье ключевое слово предназначено для указания действительных доменных имен.
Когда имя домена начинается с символа «~», оно рассматривается как регулярное выражение, и поэтому могут использоваться очень сложные шаблоны, но может быть трудно понять, если регулярные выражения известны недостаточно хорошо. Если ни одно из условий не выполняется в операторе valid_referers, переменная invalid_referer устанавливается в пустую строку, в противном случае она устанавливается в 1, что это означает, если поступающий запрос не содержит поля referer или если nginx определил, что поле referer удалено брандмауэром или прокси-сервером, или если в поле referer заданы указанные домены (список допустимых доменных имен), то для недопустимой переменной referer устанавливается пустая строка, и, следовательно, ее условие if не выполняется. Однако, если запрос поступает из домена, который не указан в выражении valid_referers как допустимый домен, он блокируется.
Обязательно примите во внимание этот контент и не допускайте ссылок на свои сайты, размещенные на Nginx.