一、基础性能调优

1.多线程处理(跟服务器的核数有关)

worker_processes 8; #数字建议与CPU核心线程数相同

2.配置nginx进程打开的最多文件数目

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.阻塞数据包发送;

tcp_nopush on;

<!--more-->

二、安全防护调优

备注:如果会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";

三、内核参数调优

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

原文请点击这里