【问题标题】:Nginx - How do I know when $http_referer is not set or empty?Nginx - 我如何知道 $http_referer 未设置或为空?
【发布时间】:2011-05-03 09:23:39
【问题描述】:

我如何知道 nginx 变量 $http_referer 何时未设置或为空?

我收到一些没有 http 引用的请求。在 nginx 日志中 $http_referer 看起来像这样:“-”。我想做的是“返回403;”如果 $http_referer 未设置或为空,如本例所示。

谢谢!

【问题讨论】:

  • 我尝试使用正则表达式,但似乎不起作用 - 或拒绝所有 403。我搜索了一种方法,可以告诉我是否设置了 nginx 变量....但我没有还没找到。
  • 如果我的浏览器被配置为从不发送任何网站的引用标头怎么办?
  • 嗯...我真正需要的是拒绝对例如纯 GET 请求的资源的每次访问,并且他们没有“任何人”发送它们...例如 http_referer。 ..

标签: nginx request 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;
}

【讨论】:

  • 谢谢.. 但我得到一个错误:'[emerg]:在“valid_referers”指令中指定了“none”或“blocked”引用,没有任何有效的引用'
  • @Clawsy 固定版本会阻止每个带有空引用者的请求。任何非空的referer都被认为是正确的。
  • 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      相关资源
      最近更新 更多