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

相關文章
相關標籤/搜索