Nginx: allow access only to referrer that match location name

只愿长相守 提交于 2019-12-05 02:46:26

问题


Is there a way, in nginx, to allow access to a "location" only to clients with a referrer that matches the current location name?

This is the scenario:

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

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

etc etc

I want the contents of the bar.org location available only if the referrer is bar.org. The same goes for zeta.net

I know I can do this "statically", but there are a lot of those locations and I need to find a way to do this defining only one "dynamic" location.

Sorry for my bad english.

SOLUTION

I've solved this way:

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

回答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;
    }
}

I solved my problem using slight changes, Thanks



来源:https://stackoverflow.com/questions/18900508/nginx-allow-access-only-to-referrer-that-match-location-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!