为什么我们不推荐做独立的手机版网站?
是否需要给手机做一个独立的网站,我们从多个角度进行分析介绍,您需要的是响应式网站还是独立手机网站?
网站制作上线后,域名就像一个大门一样向全世界都敞开着。但是我们的网站很多时候并不需要面向全球发布,比如企业网站,本身客户只是国内的,那么境外的蜘蛛拼命的访问爬取就是浪费服务器的带宽和资源。更何况,有一部分搜索引擎不按套路出牌,经常性的每秒好多请求过来。
为了解决以上的问题,我们来可以通过判断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.com HTTP/1.1 200 OK Server: nginx Date: Thu, 14 Nov 2019 01:41:45 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding Set-Cookie: PHPSESSID=rb4kndd2anpc7ifn91a0q2pln6; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache Cache-control: private X-Powered-By: UpStream X-Frame-Options: SAMEORIGIN
这个是屏蔽生效后的请求
[root@WEB ~]# curl -I -A "AhrefsBot" www.wzcoder.com HTTP/1.1 403 Forbidden Server: nginx Date: Thu, 14 Nov 2019 01:43:37 GMT Content-Type: text/html Content-Length: 146 Connection: keep-alive Vary: Accept-Encoding
有些同学会说,搜索引擎有时候也在变化,有可能有新的User-Agent出来,那么这个时候我们就要去分析网站日志了。
首先是Nginx配置开启访问日志情况,如在vhosts中修改
server { ... access_log /data/logs/wzcoder.com.access.log; ... }
开启后我们能正常看到访问日志,如下图
我们可以分析访问日志,将一些不想要的都给屏蔽了。
总结
网站做完上线后要时刻关注其状态,出于安全考虑需要进行补丁,优化等,出于自己的资源消耗情况也需要对不必要的请求,非法请求做优化屏蔽。当然,如果老板说咱能用钱解决的简单点,直接上WAF,那当然也是妥妥的!
相关阅读