Nginx — Как мне узнать, когда $ http_referer не установлен или пуст?

#nginx #request #http-referer

#nginx #запрос #http-refererer

Вопрос:

Как мне узнать, когда переменная nginx $ http_referer не установлена или пуста?

Я получаю некоторые запросы, у которых нет http-ссылки. В журналах nginx $ http_referer отображается следующим образом: «-«. Что я пытаюсь сделать, так это «вернуть 403;», если $ http_referer не установлен или не пуст, как в этом случае.

Спасибо!

Комментарии:

1. Я пытался использовать регулярные выражения, но, похоже, не работает — или отклоняет все с 403. Я искал метод, который сообщал бы мне, установлена ли переменная nginx или нет …. но я его пока не нашел.

2. Что, если мой браузер настроен на то, чтобы никогда не отправлять заголовки referer для любого сайта?

3. Хм … что мне действительно нужно, так это запретить каждый доступ к ресурсам запросов, которые являются простыми получениями, например, и у них нет «кого-либо», отправляющего их … например, http_referer …

Ответ №1:

http://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers

 valid_referers server_names ~.;
if ($invalid_referer) {
    return   403;
}
  

Комментарии:

1. Спасибо.. но я получил сообщение об ошибке: ‘[emerg]: в директиве «valid_referers» указаны ссылки «none» или «blocked» без какого-либо действительного ссылки’

2. Исправленная версия @Clawsy блокирует каждый запрос с пустым референтом. Любой непустой реферер считается правильным.

3. server_names ~. работает в отличие от valid_referers none; , который выдает ошибку, о которой упоминает @Clawsy. Рабочая методика @Tim устанавливает список допустимых server_names значений в соответствии с любым сервером, задавая для него значение регулярного выражения с использованием ~ и любого символа с использованием . . Смотрите также: nginx.org/en/docs/http/ngx_http_referer_module.html

Ответ №2:

Как насчет этого?

 if ($http_referer ~ /^$/) {
    return 403;
}
  

Ответ №3:

Это работает для меня, нравится ниже:

 set $flag 0;
if ($http_referer = "-") {
    set $flag 1;
}
if ($flag = 1) {
    return 403;
}