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
    
  • 相关阅读:
    一个简单的knockout.js 和easyui的绑定
    knockoutjs + easyui.treegrid 可编辑的自定义绑定插件
    Knockout自定义绑定my97datepicker
    去除小数后多余的0
    Windows Azure Web Site (15) 取消Azure Web Site默认的IIS ARR
    Azure ARM (1) UI初探
    Azure Redis Cache (3) 创建和使用P级别的Redis Cache
    Windows Azure HandBook (7) 基于Azure Web App的企业官网改造
    Windows Azure Storage (23) 计算Azure VHD实际使用容量
    Windows Azure Virtual Network (11) 创建VNet-to-VNet的连接
  • 原文地址:https://www.cnblogs.com/luchuangao/p/8400430.html
Copyright © 2011-2022 走看看