网站制作上线后,域名就像一个大门一样向全世界都敞开着。但是我们的网站很多时候并不需要面向全球发布,比如企业网站,本身客户只是国内的,那么境外的蜘蛛拼命的访问爬取就是浪费服务器的带宽和资源。更何况,有一部分搜索引擎不按套路出牌,经常性的每秒好多请求过来。
为了解决以上的问题,我们来可以通过判断User-Agent来进行过滤筛选。同时出于安全考虑,我们还会禁止部分非GET,POST等自己网站没有用到的请求方式抓取。
下面我们用Nginx来举例说明(此方式一般只支持云主机部署的网站,虚拟主机的不支持)
禁止Scrapy等工具的抓取
#禁止Scrapy等工具的抓取if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { return 403;}
禁止指定UA及UA为空的访问
#禁止指定UA及UA为空的访问if ($http_user_agent ~ "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|EasouSpider|LinkpadBot|Ezooms|^$" ){ return 403;}
禁止非GET|HEAD|POST方式的抓取
此处可以根据网站制作中涉及到的请求方式灵活修改
#禁止非GET|HEAD|POST方式的抓取if ($request_method !~ ^(GET|HEAD|POST)$) { return 403;}
以上配置完成后重启Nginx加载即可。
测试配置
我们测试可以通过查看实时访问日志来看效果,同时我们也可以采用curl模拟蜘蛛请求。
这个是正确的请求
[root@WEB ~]# curl -I -A "BaiduSpider" www.wzcoder.comHTTP/1.1 200 OKServer: nginxDate: Thu, 14 Nov 2019 01:41:45 GMTContent-Type: text/html; charset=utf-8Connection: keep-aliveVary: Accept-EncodingSet-Cookie: PHPSESSID=rb4kndd2anpc7ifn91a0q2pln6; path=/Expires: Thu, 19 Nov 1981 08:52:00 GMTPragma: no-cacheCache-control: privateX-Powered-By: UpStreamX-Frame-Options: SAMEORIGIN
这个是屏蔽生效后的请求
[root@WEB ~]# curl -I -A "AhrefsBot" www.wzcoder.com HTTP/1.1 403 ForbiddenServer: nginxDate: Thu, 14 Nov 2019 01:43:37 GMTContent-Type: text/htmlContent-Length: 146Connection: keep-aliveVary: Accept-Encoding
有些同学会说,搜索引擎有时候也在变化,有可能有新的User-Agent出来,那么这个时候我们就要去分析网站日志了。
首先是Nginx配置开启访问日志情况,如在vhosts中修改
server { ... access_log /data/logs/wzcoder.com.access.log; ...}
开启后我们能正常看到访问日志,如下图
我们可以分析访问日志,将一些不想要的都给屏蔽了。
总结
网站做完上线后要时刻关注其状态,出于安全考虑需要进行补丁,优化等,出于自己的资源消耗情况也需要对不必要的请求,非法请求做优化屏蔽。当然,如果老板说咱能用钱解决的简单点,直接上WAF,那当然也是妥妥的!
相关阅读
-
网站小程序开发启用Apache和Nginx的CORS
-
企业网站制作开发中如何禁止不想要的用户代理和请求来源
内容源于网络,如有侵权或违规我们会尽快整改