Nginx 优化配置

基本配置优化(优化后配置样例,能够改后直接上生产)javascript

 1 #头部配置
 2 user  nginx nginx;    #定义nginx的启动用户,不建议使用root
 3 worker_processes  4;  #定位为cpu的内核数量,由于个人环境配置是4核,因此就写4。不过这值最多也就是8,8个以上也就没什么意义了,想继续提高性能只能参考下面一项配置
 4 worker_cpu_affinity 0001 0010 0100 1000;  #此项配置为开启多核CPU,对你先弄提高性能有很大帮助nginx默认是不开启的,1为开启,0为关闭,所以先开启第一个倒过来写,
 5 第一位0001(关闭第四个、关闭第三个、关闭第二个、开启第一个)
 6 第二位0010(关闭第四个、关闭第三个、开启第二个、关闭第一个)
 7 第三位0100(关闭第四个、开启第三个、关闭第二个、关闭第一个)
 8 后面的依次类推,有智商的应该均可以看懂了吧?  那么若是是16核或者8核cpu,就注意为0000000一、000000十、00000100,总位数与cpu核数同样。
 9  
10 error_log  /data/logs/nginx/error.log crit;      #这两项基本不用我说
11 pid        /usr/local/nginx/nginx.pid;
12  
13 #Specifies the value for maximum file descriptors that can be opened by this process.
14 worker_rlimit_nofile 65535;    #这个值为nginx的worker进程打开的最大文件数,若是不配置,会读取服务器内核参数(经过ulimit -a查看),若是内核的值设置过低会让nginx报错(too many open
15 file),可是在此设置后,就会读取本身配置的参数不去读取内核参数
16  
17 events
18 {
19   use epoll;    #客户端线程轮询方法、内核2.6版本以上的建议使用epoll
20   worker_connections 65535;  #设置一个worker能够打开的最大链接数
21 }
22 http {
23         include       mime.types;
24         default_type  application/octet-stream;
25  
26         #charset  gb2312;
27         server_tokens  off;    #为错误页面上的nginx版本信息,建议关闭,提高安全性
28  
29         server_names_hash_bucket_size 128;
30         client_header_buffer_size 32k;
31         large_client_header_buffers 4 32k;
32         client_max_body_size 8m;
33  
34         sendfile on;      #开启sendfile()函数,sendfile能够再磁盘和tcp socket之间互相copy数据。
35         tcp_nopush     on;  #告诉nginx在数据包中发送全部头文件,而不是一个一个的发
36  
37         #keepalive_timeout 15;
38         keepalive_timeout 120;
39  
40         tcp_nodelay on;
41  
42         proxy_intercept_errors on;
43         fastcgi_intercept_errors on;
44         fastcgi_connect_timeout 1300;
45         fastcgi_send_timeout 1300;
46         fastcgi_read_timeout 1300;
47         fastcgi_buffer_size 512k;
48         fastcgi_buffers 4 512k;
49         fastcgi_busy_buffers_size 512k;
50         fastcgi_temp_file_write_size 512k;
51  
52         proxy_connect_timeout      20s;
53         proxy_send_timeout         30s;
54         proxy_read_timeout         30s;
55  
56  
57  
58         gzip on;            #gzip是告诉nginx采用gzip后的数据来传输文件,会大量减小咱们的发数据的量
59         gzip_min_length  1k;
60         gzip_buffers     4 16k;
61         gzip_http_version 1.0;
62         gzip_comp_level 2;
63         gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
64         gzip_vary on;
65         gzip_disable msie6;
66         #limit_zone  crawler  $binary_remote_addr  10m;
67  
68 log_format  main  '$http_host $remote_addr - $remote_user [$time_local] "$request" '
69                   '$status $body_bytes_sent "$http_referer" '
70                   '"$http_user_agent" "$http_x_forwarded_for" '
71                   '$request_time $upstream_response_time';
72  
73  #proxy_temp_path和proxy_cache_path指定的路径必须在同一分区,由于它们之间是硬连接的关系
74  #proxy_temp_path /var/cache/nginx/proxy_temp_dir;
75  #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
76  #proxy_cache_path /var/cache/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
77  
78         include /usr/local/nginx/conf/vhosts/*.conf;
79  
80         error_page  404   = https://www.niu.com/404/;
81         #error_page   500 502 503 504 = http://service.niu.com/alien/;
82  
83  }

 

若是是高并发架构,须要在nginx的服务器上添加以下的内核参数

这些参数追加到/etc/sysctl.conf,而后执行sysctl -p 生效。php

#每一个网络接口接收数据包速度比内核处理速度快的时候,容许发送队列数目数据包的最大数
net.core.netdev_max_backlog = 262144css

#调节系统同时发起的tcp链接数
net.core.somaxconn = 262144html

#该参数用于设定系统中最多容许存在多少TCP套接字不被关联到任何一个用户文件句柄上,主要目的为防止Ddos攻击
net.ipv4.tcp_max_orphans = 262144java

#该参数用于记录还没有收到客户端确认信息的链接请求的最大值
net.ipv4.tcp_max_syn_backlog = 262144node

#nginx服务上建议关闭(既为0)
net.ipv4.tcp_timestamps = 0nginx

#该参数用于设置内核放弃TCP链接以前向客户端发送SYN+ACK包的数量,为了创建对端的链接服务,服务器和客户端须要进行三次握手,第二次握手期间,内核须要发送SYN并附带一个回应前一个SYN的ACK,这个参
数主要影响这个过程,通常赋予值为1,即内核放弃链接以前发送一次SYN+ACK包。
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1sql

 

 

反爬虫配置

增长反爬虫配额文件:vim

 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设置

http://www.javashuo.com/article/p-thehooqt-t.html

相关文章
相关标签/搜索