基本配置优化(优化后配置样例,可以改后直接上生产)
如果是高并发架构,需要在nginx的服务器上添加如下的内核参数
这些参数追加到/etc/sysctl.conf,然后执行sysctl -p 生效。
#每个网络接口接收数据包速度比内核处理速度快的时候,允许发送队列数目数据包的最大数
net.core.netdev_max_backlog = 262144
#调节系统同时发起的tcp连接数
net.core.somaxconn = 262144
#该参数用于设定系统中最多允许存在多少TCP套接字不被关联到任何一个用户文件句柄上,主要目的为防止Ddos攻击
net.ipv4.tcp_max_orphans = 262144
#该参数用于记录尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
#nginx服务上建议关闭(既为0)
net.ipv4.tcp_timestamps = 0
#该参数用于设置内核放弃TCP连接之前向客户端发送SYN+ACK包的数量,为了建立对端的连接服务,服务器和客户端需要进行三次握手,第二次握手期间,内核需要发送SYN并附带一个回应前一个SYN的ACK,这个参
数主要影响这个过程,一般赋予值为1,即内核放弃连接之前发送一次SYN+ACK包。
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
反爬虫配置
增加反爬虫配额文件:
1 sudo vim /etc/nginx/anti_spider.conf 2 3 #禁止Scrapy等工具的抓取 4 if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) { 5 return 403; 6 } 7 8 #禁止指定UA及UA为空的访问 9 if ($http_user_agent ~ "WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|^$" ) { 10 return 403; 11 } 12 13 #禁止非GET|HEAD|POST方式的抓取 14 if ($request_method !~ ^(GET|HEAD|POST)$) { 15 return 403; 16 } 17 18 #屏蔽单个IP的命令是 19 #deny 123.45.6.7 20 #封整个段即从123.0.0.1到123.255.255.254的命令 21 #deny 123.0.0.0/8 22 #封IP段即从123.45.0.1到123.45.255.254的命令 23 #deny 124.45.0.0/16 24 #封IP段即从123.45.6.1到123.45.6.254的命令是 25 #deny 123.45.6.0/24 26 27 # 以下IP皆为流氓 28 deny 58.95.66.0/24;
在网站配置server段中都插入include /etc/nginx/anti_spider.conf. 你可以在默认的80端口配置上加上此句
重启Nginx服务
常见的爬虫UA:
1 FeedDemon 内容采集 2 BOT/0.1 (BOT for JCE) sql注入 3 CrawlDaddy sql注入 4 Java 内容采集 5 Jullo 内容采集 6 Feedly 内容采集 7 UniversalFeedParser 内容采集 8 ApacheBench cc攻击器 9 Swiftbot 无用爬虫 10 YandexBot 无用爬虫 11 AhrefsBot 无用爬虫 12 YisouSpider 无用爬虫(已被UC神马搜索收购,此蜘蛛可以放开!) 13 jikeSpider 无用爬虫 14 MJ12bot 无用爬虫 15 ZmEu phpmyadmin 漏洞扫描 16 WinHttp 采集cc攻击 17 EasouSpider 无用爬虫 18 HttpClient tcp攻击 19 Microsoft URL Control 扫描 20 YYSpider 无用爬虫 21 jaunty wordpress爆破扫描器 22 oBot 无用爬虫 23 Python-urllib 内容采集 24 Indy Library 扫描 25 FlightDeckReports Bot 无用爬虫 26 Linguee Bot 无用爬虫
使用curl -A 模拟抓取即可,比如:
# -A表示User-Agent # -X表示方法: POST/GET # -I表示只显示响应头部 curl -X GET -I -A 'YYSpider' localhost HTTP/1.1 403 Forbidden Server: nginx/1.10.3 (Ubuntu) Date: Fri, 08 Dec 2017 10:07:15 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive
HTTPS设置