【问题标题】:Nginx: allow access only to referrer that match location nameNginx:只允许访问与位置名称匹配的引荐来源网址
【发布时间】:2013-09-24 21:09:59
【问题描述】:

在 nginx 中有没有办法只允许具有与当前位置名称匹配的引荐来源网址的客户端访问“位置”?

这是场景:

http://foooooo.com/bar.org/

http://foooooo.com/zeta.net/

等等等等

我希望 bar.org 位置的内容仅在引荐来源为 bar.org 时可用。 zeta.net 也是如此

我知道我可以“静态”地做到这一点,但是有很多这样的位置,我需要找到一种方法来做到这一点,只定义一个“动态”位置。

对不起,我的英语不好。

解决方案

我是这样解决的:

location ~/([a-zA-Z0-9\.\-]*)/* {
    set $match "$1::$http_referer";
    if ($match !~* ^(.+)::http[s]*://[www]*[.]*\1.*$ ) {
        return 403;
    }
}

【问题讨论】:

  • 位置是否有任何规则,例如总是在第一个斜杠之前的字符串(/)。如果是,我有一个解决方案。
  • 是的,位置都采用相同的格式。
  • 好的,我知道了。看看我的回答。有任何问题,请随时在这里发表评论。

标签: nginx http-referer


【解决方案1】:
location ~ ^/([a-zA-Z0-9\.\-]*)/(.*) {
    if ($http_referer !~ "^$1.*$"){
            return 403;
    }
}

【讨论】:

  • 好的,你给了我正确的方法,我将编辑我的答案以包含我使用的代码。
【解决方案2】:
location /india/xxxxx.js {
    if ($http_referer !~ "http://domain.xxx/"){
            return 403;
    }
}

我通过细微的改动解决了我的问题,谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2017-10-15
    • 2016-08-18
    • 2012-09-21
    • 2012-05-12
    • 2011-07-15
    相关资源
    最近更新 更多