Uninote
Uninote

nginx-fastcgi优化项

  1. 系统-四层

    1. 系统-上游(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端口范围
    2. 客户端-系统
      • net.ipv4.tcp_max_syn_backlog 512(syn_recvd的最大个数)
      • net.ipv4.tcp_synack_retries 5(发送syn、ack重试次数)
      • net.core.somaxconn 4096(建立连接数)
    3. 应对syn
      • net.core.netdev_max_backlog 1000 (网卡接收但未被内核处理的队列)
      • net.ipv4.tcp_abort_on_overflow 1 (超过处理能力,发送RST,丢弃连接)
      • 1.2.1
    4. nginx慢或代理慢导致accept队列满
      • net.ipv4.tcp_syncookies = 1(达到处理能力时,发送cookie到客户端,用于下一次连接,cookie占用seq空间)
    5. 丢包重传
      • net.ipv4.tcp_retries1 = 3
      • net.ipv4.tcpretries2 = 15
    6. 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自动调整缓存
    7. 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数量为最大值不会产生新连接)
  2. nginx优化指令

    • 版本

      • server_tokens off;
    • 速度和并发

      1. with-http_realip_module
      2. http-limit_conn_module
      3. http-limit_req_module
    • keepalive

      1. tcp连接一段时间内复用
        • keepalive_requests number;
        • keepalive_timeout s;
      2. 对不支持的浏览器不启用keepalive功能
        • keepalive_disable none|msie6...;
    • 请求包体

      1. 后台:client_max_body_size 10m;
      2. 接口: client_max_body_size 1m;(location)
    • fastcgi

      1. (408)缓存请求包体
        • fastcgi_request_buffering on;
      2. 与上游之间的tcp连接
        • fastcgi_socket_keepalive on;系统层探测tcp连接
        • fastcgi_keep_conn on;
        • fastcgi_connect_timeout 60s;
        • fastcgi_send_timeout=300; #fastcgi请求超时时间
      3. 接收响应
        • 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| [...]];
    • 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;
  3. 系统-文件描述符

    • fs.file-max
    • fs.file-nr(分配、正使用、上限)
    • /etc/security/limits.conf
      • www soft nofile 65535
      • www hard nofile 65535
    • worker_rlimit_nofile number;(main)

nginxrewrite修改请求RUI

nginx学习汇总

点赞(0) 阅读(1) 举报
目录
标题