zoukankan      html  css  js  c++  java
  • Nginx优化

    一. Nginx基本安全优化

    1、调整参数隐藏Nginx软件版本号信息

    Nginx配置文件nginx.conf中的http标签段内加入server_tokens off;
    

    2、更改远吗隐藏Nginx软件名及版本号

    # 修改:
    sed -i s'/#define NGINX_VERSION      "1.12.1"/#define NGINX_VERSION      ""/'g nginx-1.12.1/src/core/nginx.h
    sed -i s'/#define NGINX_VER          "nginx/" NGINX_VERSION/#define NGINX_VER          "KYE/" NGINX_VERSION/'g nginx-1.12.1/src/core/nginx.h
    
    # 查看修改:
    sed -n '13,14p' nginx-1.12.1/src/core/nginx.h
    
    # 效果:  
    
    [root@localhost conf]# curl -I http://192.168.182.151
    HTTP/1.1 200 OK
    Server: KYE
    Date: Wed, 31 Jan 2018 04:00:29 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Wed, 31 Jan 2018 03:45:43 GMT
    Connection: keep-alive
    ETag: "5a713be7-264"
    Accept-Ranges: bytes
    

    3、更改Nginx服务的默认用户

    user  nobody;  更改为 use  nginx;
    

    二. 根据参数优化Nginx服务器性能

    1、优化Nginx进程配置

    由 worker_processes  1; 更改为  worker_processes  1;  
    或者更改为 worker_processes  auto;
    

    2、优化绑定不同的Nginx进程到不通的CPU上

    四核:worker_cpu_affinity 0001 0010 0100 1000;
    八核:worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;  
    八核:worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;  
    

    3、 调整Nginx单个进程允许的客户端最大连接数

    worker_connections 20480;    
    Max client = worker_processes * worker_connections  
    操作系统:  
    ulimit -HSn 65535
    

    4、配置Nginx worker进程最大打开文件数

    worker_rlimit_nofile 65535;  
    设置为系统优化后的ulimit -HSn的结果。
    

    5、 开启高效文件传输模式

    sendfile on;  
    同时将tcp_nopush和tcp_nodelay两个指令设置为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率  
    tcp_nopush on;  
    此选项仅仅当开启sendfile时才生效,激活这个tcp_nopush参数可以允许把http response header和文件的开始部分放在一个文件里发布,其积极的作用是减少网络报文段的数量。  
    

    6、优化Nginx连接参数,调整连接超时时间

    • 设置参数:keepalive_timeout 60;
      用于设置客户端连接保持回话的超时时间为60秒。超过这个时间,服务器会关闭该连接,此数值为参考值。

    • 设置参数:tcp_nodelay on;
      用于激活tcp_nodelay功能,提供I/O性能。
      参数作用:默认情况下当数据发送时,内核并不会马上发送,可能会等待更多的字节组成一个数据包,这样可以提高I/O性能。但是,在每次只发送很少字节的业务场景中,使用tcp_nodelay功能,等待时间会比较长。

    • 设置参数:client_header_timeout 15;
      用于设置读取客户端请求头数据的超时时间。此处的数值15,其单位是秒,为经验参考值。
      参数作用:设置读取客户端请求头数据的超时时间。如果超过这个时间,客户端还没有发送完整的header数据,服务器端将返回“Request time out(408)”错误,指定一个超时时间,防止客户端利用http协议进行攻击。

    • 设置参数:client_body_timeout 15;
      用于设置读取客户端请求主体的超时时间,默认值是60。
      参考作用:设置读取客户端请求主题的超时时间。这个超时仅仅为两次成功的读取操作之间的一个超时,非请求整个主体数据的超时时间,如果在这个超时时间内,客户端没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60。

    • 设置参数:send_timeout 25;
      用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接,默认值为60秒,可以改为参考值25秒。
      参考作用:设置服务器端传送HTTP响应信息到客户端的超时时间,这个超时仅仅为两次成功握手后的一个超时,非请求整个响应数据的超时时间,如在这个超时时间内,客户端没有接收任何数据,连接将被关闭。

    7、上传文件大小的限制(动态应用)
    调整上传文件的大小(http Request body size)限制。
    在Nginx的主配置文件里加入如下参数:
    client_max_body_size 8m;
    具体大小根据公司的业务做调整,如果不清楚就先设置为8m。
    参数作用:设置最大的允许的客户端请求主体大小,在请求头域有“Content-Length”,如果超过了此配置值,客户端会收到413错误,意思是请求的条目过大,有可能浏览器不能正确显示。设置为0表示禁止检查客户端请求主题大小。此参数对提高服务器端的安全性有一定的作用。

    8、 配置Nginx gzip压缩实现性能优化

    gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 2;
    gzip_types text/plain application/javascript text/css application/xml text/javascript application/json;
    gzip_vary off;
    
    • 注意:application/javascript 和application/x-javascript的区别。推荐使用application/javascript支持得浏览器更多。

    三. Nginx代理location参数

    location /api {
        proxy_pass  http://IP地址;
        proxy_set_header X-B3-TraceId  $request_id;
        proxy_set_header  X-Span-Name    $uri;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    • 微服务必须添加这三个参数:
    proxy_set_header X-B3-TraceId  $request_id;  
    proxy_set_header  X-Span-Name    $uri;  
    proxy_set_header    X-Real-IP   $remote_addr;
    

    四. Nginx配置示例

    user  nginx;
    worker_processes  auto;
    worker_cpu_affinity 0001 0010 0100 1000;
    worker_rlimit_nofile 65535;
    events {
        worker_connections  16383;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format json '{"@timestamp":"$time_iso8601",'
                     '"host":"$server_addr",'
                     '"clientip":"$remote_addr",'
                     '"size":$body_bytes_sent,'
                     '"responsetime":$request_time,'
                     '"upstreamtime":"$upstream_response_time",'
                     '"upstreamhost":"$upstream_addr",'
                     '"http_host":"$host",'
                     '"url":"$uri",'
                     '"xff":"$http_x_forwarded_for",'
                     '"referer":"$http_referer",'
                     '"agent":"$http_user_agent",'
                     '"status":"$status"}';
        access_log  logs/access.log  json;
        sendfile        on;
        tcp_nopush     on;
        tcp_nodelay    on;
        server_tokens off;
        keepalive_timeout  65;
        client_header_timeout 15;
        client_body_timeout 15;
        send_timeout 25;
        client_max_body_size 8m;
        gzip  on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        gzip_comp_level 2;
        gzip_types text/plain application/javascript text/css application/xml text/javascript application/json;
        gzip_vary off;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    include /usr/local/nginx/conf/vhost/*.conf;
    }
    

    五. 测试命令

    ab -kc 20000 -n 20000 http://IP地址/index.html
    
  • 相关阅读:
    成为Java高手的25个学习目标
    JAVA程序员面试之《葵花宝典》
    成为Java高手的25个学习目标
    Java性能的十一个用法
    transit, transfer, convey>conveyance, transport>transportation
    托福常考的名词
    常见学科
    太傻Myoffer系统
    美国ARCO 权威托福考试参考词汇
    NTLDR和Bootfont.bin的作用
  • 原文地址:https://www.cnblogs.com/luchuangao/p/8400430.html
Copyright © 2011-2022 走看看