NGINX禁止指定UA访问的方法

UA是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等,全称为User Agent。他在HTTP协议中存在于请求头的位置被发往服务器,因此我们的web服务器可以通过一定规则来禁止某些特定的“用户”来访问。
在Nginx中,UA使用的是其内置变量$http_user_agent,我们在配置文件中加入if判断即可达到禁止一些UA访问。


通用格式

 if ($http_user_agent ~* "UA key word") {
        return 403;
    }

PS:其中~*在Nginx的location中为不区分大小写的匹配


具体事例

如果想禁止百度等搜索引擎的蜘蛛的话,那就是

    if ($http_user_agent ~* "qihoobot|Baidu|Baiduspider|Baiduspider-image|Baiduspider-video|Baiduspider-news|Baiduspider-favo|Baiduspider-cpro|Baiduspider-ads|Baiduboxapp|YisouSpider|EasouSpider|YodaoBot|YoudaoBot|Sosospider|Sogou|^$") {
        return 403;
    }

如果想禁止指定的游览器访问,那就是(只列出了部分国产游览器)

if ($http_user_agent ~* "sogou|theworld|qiyu|green|qq|qqbrowser|tt|liebao|lbbrowser|taobao|uc|mi|xiaomi|baidu|360|360SE|360EE|2345Explorer|maxthon|yandex|micromessenger|wechat|weibo|douban|suning|iqiyi|alipay") {
        return 403;
    }

我们还可以禁止一些特定下载工具的访问,例如scrapy爬虫或者wget等等

if ($http_user_agent ~* "Scrapy|HttpClient|Curl|Wget|Idm|Aria2|Axel|Thunder|Youtube-dl|Movgrab|rtorrent|ctorrent|Transmission-cli|vuze") {
    return 444;
    }

当然单纯的通过UA来禁用的话只是初步的一个小墙,现在伪造UA已经是非常轻松的事情了。不过初步的这些UA禁用已经可以为我们阻挡大部分的蜘蛛等流量入侵了。

Last modification:May 6th, 2020 at 12:14 am
如果觉得我的文章对你有用,请随意赞赏