nginx-fastcgi优化项
-
系统-四层
- 系统-上游(syn_sent->syn队列 tcp_max_syn_backlog->syn_recvd->ack->accept队列(backlog))
- net.ipv4.tcp_syn_retries = 6主动连接(上游)
- net.ipv4.ip_local_port_range = 32768 60999端口范围
- 客户端-系统
- net.ipv4.tcp_max_syn_backlog 512(syn_recvd的最大个数)
- net.ipv4.tcp_synack_retries 5(发送syn、ack重试次数)
- net.core.somaxconn 4096(建立连接数)
- 应对syn
- net.core.netdev_max_backlog 1000 (网卡接收但未被内核处理的队列)
- net.ipv4.tcp_abort_on_overflow 1 (超过处理能力,发送RST,丢弃连接)
- 1.2.1
- nginx慢或代理慢导致accept队列满
- net.ipv4.tcp_syncookies = 1(达到处理能力时,发送cookie到客户端,用于下一次连接,cookie占用seq空间)
- 丢包重传
- net.ipv4.tcp_retries1 = 3
- net.ipv4.tcpretries2 = 15
- tcp读写缓存
- net.ipv4.tcp_rmem = 4096 87380 6291456 最小、默认、最大单位字节
- net.ipv4.tcp_wmem = 4096 163484 4194304
- net.ipv4.tcp_mem = 154164 2055528 3083292
- net.ipv4.tcp_moderate_rcvbuf = 1自动调整缓存
- time_wait优化(复用端口,导致连接不正常)
- net.ipv4.tc_tw_reuse = 1(使用time_wait状态端口)
- net.ipv4.tcp_timestamps = 1(拒绝延迟发送的报文)
- net.ipv4.tcp_tw_recycle = 1(使用time_wait端口)
- net.ipv4.tcp_max_tw_buckets = 55000(time_wait数量为最大值不会产生新连接)
- 系统-上游(syn_sent->syn队列 tcp_max_syn_backlog->syn_recvd->ack->accept队列(backlog))
-
nginx优化指令
-
版本
- server_tokens off;
-
速度和并发
- with-http_realip_module
- http-limit_conn_module
- http-limit_req_module
-
keepalive
- tcp连接一段时间内复用
- keepalive_requests number;
- keepalive_timeout s;
- 对不支持的浏览器不启用keepalive功能
- keepalive_disable none|msie6...;
- tcp连接一段时间内复用
-
请求包体
- 后台:client_max_body_size 10m;
- 接口: client_max_body_size 1m;(location)
-
fastcgi
- (408)缓存请求包体
- fastcgi_request_buffering on;
- 与上游之间的tcp连接
- fastcgi_socket_keepalive on;系统层探测tcp连接
- fastcgi_keep_conn on;
- fastcgi_connect_timeout 60s;
- fastcgi_send_timeout=300; #fastcgi请求超时时间
- 接收响应
- fastcgi_buffer_size=64k; #读取fastcgi应答需要多大缓冲区
- fastcgi_buffers 4 64k; #指定本地需要多少个和多大的缓冲区来缓冲fastcgi应答请求
- fastcgi_busy_buffers_size 128k; #默认值是fastcgi_buffer
- fastcgi_temp_file_write_size 128k; #写入缓存文件使用多大的数
- fastcgi_cache fastcgi_cache;#表示开启FastCGI缓存并为其指定一个名称
- fastcgi_temp_path ngx_fcgi_tmp;
- fastcgi_cache_path ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=;
- fastcgi_cache_valid any 1m;#指定缓存状态及失效时间
- fastcgi_cache_min_uses 1;#指定缓存成为过期数据
- fastcgi_cache_use_stale error timeout invalid_header http_500;#定义哪些情况下用过期缓存
- fastcgi_cache_key "$request_method://$host$request_uri";#指定缓存文件的标识,这个标识会 MD5 转码存储在缓存域的目录下
- ffastcgi_cache_methods GET HEAD;#指定缓存的请求方式
- fastcgi_store on | off | string;
- http://github.com/PRiCKLE/ngx_cache_purge
- --add-module添加
- 接收到指定请求后清除缓存
- proxy_cache_purge string(zone)|on|off| [from all| [...]];
- (408)缓存请求包体
-
worker进程和CPU核心数相同
-
连接数
- worker_connections 512(单一worker上游和下游总连接);(events)
- 超时时间
-
fast open
- 系统:net.ipv4.tcp_fastopen:TFO(0、1client、2server、3all)
- 应用:listen fastopen=number;限制TFO队列长度
-
接收和发送报文
- client_body_timeout 60s;
- send_timeout 60s;
- listen [rcvbuf=size] [sendbuf=size];
- tcp_nodelay off;启用,提升网络报文传输效率
- postpone_output 1460;若只剩最后一字节才发送小报文
-
tls/ssl优化
- ssl_session_cache share:name:1m;
- ssl_session_tickets on;加密session
- ssl_session_ticket_key ticket_file;
-
包体压缩
- gzip_buffers 32 4k|16k 8k;
- gzip on;
- gzip_comp_level 1;
- gzip_min_length 20;
- gzip_types text/html;
- gzip_http_version 1.1;
- gzip_vary off;
-
降低磁盘io
- sendfile on;
- access_log /home/wwwlogs/... gzip=1;
-
-
系统-文件描述符
- fs.file-max
- fs.file-nr(分配、正使用、上限)
- /etc/security/limits.conf
- www soft nofile 65535
- www hard nofile 65535
- worker_rlimit_nofile number;(main)