關於Nginx性能調優記錄

1、基礎性能調優

1.多線程處理(跟服務器的核數有關)nginx

worker_processes 8; #數字建議與CPU核心線程數相同

2.配置nginx進程打開的最多文件數目web

worker_rlimit_nofile 65535; #數字建議與系統文件打開數量一致。

3.使用epoll的I/O模型,用這個模型來高效處理異步事件算法

use epoll;

4.配置http鏈接超時時間(時間過長會由於無效的鏈接一直佔用nginx鏈接數,服務會崩的)緩存

keepalive_timeout 60;

5.配置客戶端請求頭部的緩衝區大小安全

client_header_buffer_size 4k;

6.配置檢查一次緩存的有效信息時間間隔服務器

open_file_cache_valid 30s;

7.阻塞數據包發送;cookie

tcp_nopush on;

<!--more-->網絡

2、安全防禦調優

備註:若是會lua去維護軟waf(openresty)模塊會更方便。
http代碼區段下進行添加如下nginx模塊多線程

1.下降限制緩衝區溢出***的機率併發

client_body_buffer_size  1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

2.用timeout方式下降DoS***的機率

client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     65;
send_timeout          10;

3.經過限制用戶併發鏈接數下降DoS***的機率

limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;

4.隱藏版本號,下降發現版本漏洞進行

server_tokens off;

5.開啓SSL加密認證(在server區段插入)

ssl on;
    ssl_certificate /etc/nginx/server.crt;
    ssl_certificate_key /etc/nginx/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;    #這裏能夠添加更高的安全算法,以達到國家安全等級。

6.訪問黑白名單(若是是對公訪問就不用配置了,僅針對特殊文件目錄)

location /admin/ {
    allow   192.168.25.0/24;  #僅容許192.168.25.0/24訪問/admin目錄,其餘都禁止。
    deny    all;
}

7.配置蜘蛛爬蟲攔截

if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")  
{  
return 403;  
}

同時配置站點目錄的robots.txt(若是不會寫,能夠搜 robots.txt生成)

# robots.txt
User-agent: *
Disallow: /
Crawl-delay: 120
Disallow: /

8.設置資源防盜鏈(生產親測,很是有效)

location /images/ {
    valid_referers none blocked www.leoheng.com  leoheng.com;
    if ($invalid_referer) {
        return  403;
    }

}

9.防禦XSS(跨站***),配置hearder,提升站點穩定性

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

3、內核參數調優

1.下降timewait數值、減小等待時間。

net.ipv4.tcp_max_tw_buckets = 5000

2.容許系統打開端口的範圍。

net.ipv4.ip_local_port_range = 1024 65000

3.啓用TIME-WAIT狀態sockets快速回收功能(1表示啓用;0表示關閉。NAT模式下不建議使用。)

net.ipv4.tcp_tw_recycle = 0

備註:協同net.ipv4.tcp_timestamps一併開啓,能達到最佳效果,能夠快速回收socket。

4.啓動重用功能(可將TIME-WAIT狀態的sockets從新用於新的TCP鏈接)

net.ipv4.tcp_tw_reuse = 1

5.開啓SYN Cookies(當出現SYN等待隊列溢出時,啓用cookies來處理。)

net.ipv4.tcp_syncookies = 1

6.web應用中listen函數的backlog默認會給咱們內核參數的net.core.somaxconn限制到128,同時也意味着在高併發的場景下會致使鏈接超時或者觸發重傳。

net.core.somaxconn = 262144

7.當網絡接口接收數據包的速率比內核處理數據包的速率要快的時候,容許送到隊列的數據包的最大數目。

net.core.netdev_max_backlog = 262144

8.關於配置TCP的套接字,設置定值爲了防止DoS,但若是主機增長了內存,數值也應該相對應調大。

net.ipv4.tcp_max_orphans = 262144

9.防止內存溢出OOM

vm.overcommit_memory = 0

原文請點擊這裏

相關文章
相關標籤/搜索