nginx中禁止指定ip访问,禁止特定来源的用户访问,禁止爬虫访问的方法汇总

useragentinfo.com域名中午的时候,收到阿里云的邮件。说被用户举报,站点存在违规违法的内容。看后有些懵,怎么都没想出什么地方可能会存在问题。感觉大概率被个别公司举报了。

稍后在阿里云中工单提问原因,说电联回复,也一直没有结果。按照通常的逻辑思维,假定自己就存在问题,我该如何处理?逐开始排查问题,通过监控平台,发现个别用户尝试进行拖库。之前的处理逻辑是监控平台将黑名单入库,应用层拦截请求。感觉这种方法,需要更新代码,且其他应用无法复用。另外一种方式就是在ngxin层面阻止请求进入应用中,这样也可以减轻应用服务器的压力。通过配置就能解决问题。

nginx阻止个别ip用户访问配置

server {
  server subdomain.mysite.com;
  deny 192.168.0.1/24; #一段连续的ip禁用方法
  deny 192.168.0.25; #单个ip禁用方法
  # allow myip; 允许ip访问的方式
}

配置后检查下配置,无配置错误,重启服务即可。

nginx -t
systemctl restart nginx

禁止referer为特定条件的用户访问站点

分析使用服务的域名时,发现用户使用在了违规项目中。本着简单处理的逻辑.直接禁用个别网站的用户访问。ngnix中处理还是蛮简单的。

## 禁用特定referer用户访问
## The ~* makes it case insensitive as opposed to just a ~
if ($http_referer ~ "baidu\.com|google\.net|bing\.com")  {
  return 403;
}

配置后检查下配置,无配置错误,重启服务即可。

nginx -t
systemctl restart nginx

如果 Referer 条件非常多,可以使用以下方法来优化 Nginx 配置:

  1. 使用正则表达式匹配:使用正则表达式可以减少需要配置的规则数量。也就是上面的方法。

  2. 使用 map 模块:使用 map 模块可以将 Referer 条件映射到特定的变量,并在 Nginx 配置中使用该变量。

以下是一个使用 map 模块的示例:

map $http_referer $block_referer {
    hostnames;
    default 0;

    baidu.com 1;
    google.com 1;
    bing.com 1;
}

server {
    listen 80;
    server_name subdomain.mysite.com;

    location / {
        if ($block_referer) {
            return 403;
        }
    }
}

在上面的示例中,我们将 Referer 条件映射到 $block_referer 变量,并在 Nginx 配置中使用该变量。这样可以减少在配置中的代码量,并提高配置的可读性和可维护性。

有关 Nginx 内置变量的更多信息,请参阅 Nginx 官方文档:http://nginx.org/en/docs/varindex.html

注意,在 Nginx 中使用 map 模块需要重启 Nginx 使配置生效。

禁止爬虫访问站点

if ($http_user_agent ~* "Scrapy|Baiduspider|Curl|HttpClient|Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser
|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSp
ider|Ezooms|^$"){
    return 403;
}

配置后检查下配置,无配置错误,重启服务即可。

nginx -t
systemctl restart nginx

如需跳转其他页面,配置如下:

if ($http_user_agent ~* "Scrapy|Baiduspider|Curl|HttpClient|Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser
|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSp
ider|Ezooms|^$") {
    return 301 https://yoursite.com;
}

站点仅允许GET,HEAD和POST请求

#fbrbidden not GET|HEAD|POST method access
if ($request_method !~ ^(GET|HEAD|POST)$) {
        return 403;
}

配置后检查下配置,无配置错误,重启服务即可。

nginx -t
systemctl restart nginx

配置生效后,可采用postman等发包工具进行校验。

end
  • 作者:kali(作者介绍)
  • 更新时间:2022-07-20 18:09
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:转载站点文章,请附上原文链接
  • 翻译声明:翻译文章会不严谨,请务必附上原文链接
  • 扫描阅读:扫描二维码,手机阅读该文章