• Nginx优化


    一 软件优化

        优化前

    [root@centos7 ~]# curl -I http://192.168.10.242
    HTTP/1.1 200 OK
    Server: nginx/1.15.2
    Date: Sat, 11 Aug 2018 03:26:17 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Fri, 10 Aug 2018 03:58:00 GMT
    Connection: keep-alive
    ETag: "5b6d0d48-264"
    Accept-Ranges: bytes

    1.1.1 隐藏Nginx软件版本号(http标签内)

    [root@centos7 ~]# vim /usr/local/nginx/conf/nginx.conf
        server_tokens off;

    验证:

    [root@centos7 ~]# vim /usr/local/nginx/conf/nginx.conf
    [root@centos7 ~]# nginx -t
    nginx: the configuration file /usr/local/nginx-1.15.2/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx-1.15.2/conf/nginx.conf test is successful
    [root@centos7 ~]# systemctl restart nginx
    [root@centos7 ~]# curl -I http://192.168.10.242
    HTTP/1.1 200 OK
    Server: nginx
    Date: Sat, 11 Aug 2018 03:28:36 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Fri, 10 Aug 2018 03:58:00 GMT
    Connection: keep-alive
    ETag: "5b6d0d48-264"
    Accept-Ranges: bytes

    1.1.2 优化Nginx软件名称

    修改源码

    vim /root/nginx-1.15.2/src/core/nginx.h
    /*
     * Copyright (C) Igor Sysoev
     * Copyright (C) Nginx, Inc.
     */
    #ifndef _NGINX_H_INCLUDED_
    #define _NGINX_H_INCLUDED_
    #define nginx_version      1015002
    #define NGINX_VERSION      "8.09.2"   #修改版本号
    #define NGINX_VER          "Yan/" NGINX_VERSION
    #ifdef NGX_BUILD
    #define NGINX_VER_BUILD    NGINX_VER " (" NGX_BUILD ")"
    #else
    #define NGINX_VER_BUILD    NGINX_VER
    #endif
    #define NGINX_VAR          "Yan"
    #define NGX_OLDPID_EXT     ".oldbin"
    #endif /* _NGINX_H_INCLUDED_ */
    
    
    vim /root/nginx-1.15.2/src/http/ngx_http_header_filter_module.c
    49 static u_char ngx_http_server_string[] = "Server: Yan" CRLF;
    
    vim /root/nginx-1.15.2/src/http/ngx_http_special_response.c 
     36 "<hr><center>Yan</center>" CRLF

    验证:

    [root@centos7 sbin]# curl -I  http://192.168.10.247
    HTTP/1.1 200 OK
    Server: Yan/8.09.2
    Date: Sat, 11 Aug 2018 04:10:14 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Sat, 11 Aug 2018 04:08:10 GMT
    Connection: keep-alive
    ETag: "5b6e612a-264"
    Accept-Ranges: bytes

    1.1.3 定义Nginx运行的用户和用户组

    user  nginx nginx;

    二 优化Nginx性能

    2.1.1 优化nginxworker进程数(初始可设置为CPU总核数)也可以设置为auto nginx会自动根据核心数为生成对应数量的worker进程

    worker_processes  2;

    2.1.2 CPU亲和力 把不同的进程绑定在不用的cup  0001 代表cpu掩码

    worker_cpu_affinity 0001 0010 0100 1000                          #四核cpu
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 1000
    0000                                                             #八核cpu

    2.1.3 Nginx事件处理模型(events)事件里配置  Nginx默认选择最佳模型

    具体模型资料可以看下官网或者:https://blog.csdn.net/ghost_leader/article/details/72902580

        use epoll;

    2.1.4 Nginx单个进程允许客户端最大链接数(events)

        worker_connections  4096;

    2.1.5 Nginx work进程最大打开文件数 放置主标签段

    worker_rlimit_nofile 65535;
    events {
        use epoll;
        worker_connections 20480;
    }

    2.1.6 开启文件高效传输,防止网络以及磁盘I/O阻塞,提升Nginx工作效率 tcp_nopush和tcp_nodelay同时使用

    官网:http://nginx.org/en/docs/http/ngx_http_core_module.html#sendfile

    放置位置:http,server,location  (拷贝函数实现内核零拷贝)

        sendfile        on;    
        tcp_nopush      on;    #可以把http response header和文件到开始放在一个文件里发布,减少网络报文数量。
    tcp_nodelay on; #提高I/o性能,

    2.1.7  服务器端链接超时(http标签)

        keepalive_timeout  65;

    2.1.8 Nginx读取客户端请求头部信息超时(http标签)

    client_header_timeout 15s;

    2.1.9 Nginx读取客户端请求主体超时(http标签)

    client_body_timeout 60s;

    2.2.0 Nginx指定形影客户端超时时间(http标签)

    send_timeout 60s;

    2.2.1 客户端上传文件大小控制(具体看业务)(http标签)

        client_max_body_size 8m;

    2.2.2 指定字符集(server标签)

        charset utf-8;

    2.2.3 404优雅提示

            error_page  404 403              /404.html;
            error_page  404 403              http://www.baidu.com;

    三 fastcgi相关优化

    官网地址:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html

    3.1.1 Nginx服务器和后端FastCGI服务器连接的超时时间

        fastcgi_connect_timeout 30;

    3.1.2 Nginx允许FastCGI服务端返回数据的超时时间

     fastcgi_send_timeout 15;

    3.1.3 Nginx从FastCGI服务端读取响应信息的超时时间

    fastcgi_read_timeout 15;

    3.1.4 Nginx读取响应信息的超时时间

    fastcgi_read_timeout 15;

    3.1.5 读取从FastCGI服务端收到的第一部分响应信息的缓冲区大小

    fastcgi_buffer_size 64k;

    3.1.6 读取从FastCGI服务端收到的响应信息的缓冲区大小以及缓冲区数量

    fastcgi_buffers 4 64k;

    3.1.7 系统很忙时可以使用的fastcgi_buffers大小,推荐大小为fastcgi_buffers *2。

    fastcgi_busy_buffers_size 128k;

    3.1.8 fastcti临时文件的大小,可设置128-256K

    fastcgi_temp_file_write_size 512k;

    3.2.9 设置fastcgi_cache存储路径

    #fastcgi_temp_path:生成fastcgi_cache临时文件目录 cache的目录,采用二级目录hash,256*256目录分级,设置缓存内存空间为100m,官方文档给出的1m能够容纳8000个cache key,最大硬盘占用空间为10g,是所有cache文件所占用硬盘的限制值   
         fasrcgi_cache_path /tmp/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:100m inactive=1d max_size=10g;  

    3.2.0 fastcgi_cache

          location ~.*.(php|php5)?% {
    #设置fastcg的临时目录,cache存放的时候是首先放到这个目录然后移动到cache目录中,官方文档要求这两个目录位于同一个分区以保证性能
             #fastcgi_temp_path /tmp/ngx_fcgi_tmp 1 2;
    #fscg路径
           fastcgi_pass 127.0.0.1:9000;
    #指定index
           fastcgi_index index.php;  
     #导入配置文件 
           include fastcgi.conf;
    #当一次请求过来需要写一个cache key的时候,会把这个key锁住,目的是当多个请求同时请求写同一个key的时候只有一个可以去写,其它的等待该key写成功后直接从cache中取,防止了大量请求下穿透cache给后端fastcgi造成过大的压力 
          fastcgi_cache_lock on; 
    #设置锁过期的时间
           fastcgi_cache_lock_timeout 1s;
     #用哪个缓存空间(在http层中我们定义的keys_zone
              fastcgi_cache ngx_fcgi_cache;    
    #定义哪些http头要缓存 示例中200 302 都是1h 缓存301d等 其他的状态是1分钟缓存
              fastcgi_cache_valid 200 302 1h; #
              fastcgi_cache_valid 301 1d;
              fastcgi_cache_valid any 1m;
    #请求几次之后缓存
              fastcgi_cache_min_uses 1;
    #定义那些情况下使用过期缓存
              fastcgi_cache_use_stale error timeout invalid_header http_500;
    #定义fastcgi_cache的key
              fastcgi_cache_key http://$host$request_uri;
    
    }

    四 Nginx压缩优化

    功能介绍:

        Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容发送出去到用户端前Nginx会根据一些策略来进行压缩,节约出站口带宽,加快了输出传输效率,提升了用户体验。

        传文本压缩比高 如html,js,css

        图片,视频等文件尽量不压缩,压缩会消耗大量cpu,内存等资源。

    4.1.1 开启gzip压缩

        gzip  on;

    4.1.2 允许压缩页面的最小字节,页面字节数从header头的content-lenget中获取

        gzip_min_length  1k;

    4.1.3 压缩缓冲区

        gzip_buffers     4 16k;

    4.1.4 压缩版本识别http协议版本

        gzip_http_version 1.1;

    4.1.5 压缩级别 1压缩比最小处理最快;9压缩级别比最大,传输速度快但是处理慢,消耗资源

        gzip_comp_level 6;

    4.1.6 指定类型

        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    查看媒体类型

    [root@centos7 ~]# cd /usr/local/nginx/conf/
    [root@centos7 conf]# less mime.types

    4.1.7 vary header支持。可以让前端的cnd缓存服务器可以缓存gzip页面而不解压

        gzip_vary on;

    4.1.8 对ie6浏览器不压缩 IE6对Gzip不怎么友好,不给它Gzip了

        gzip_disable    "MSIE [1-6].";

    五 Nginx expires缓存优化

       通过用户访问网站内容进行缓存,用户下次访问如果没达到过期时间就不进行更新下载,使用本地缓存,也可以说是浏览器缓存

    作用:

        降低网站带宽

        提高网站速速,提升用户体验

       降低了服务器访问量,减轻了服务器压力

    5.1.1 对后缀名进行缓存

            location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
              expires 365d;
            } 

    5.1.2 对js,css文件进行缓存

            location ~ .*.(js|css)?$ {
              expires 30d;
            }

    5.1.3 对目录进行缓存

            location ~ ^/(images|js|css|media|static)/ {
               expires 360d;
            }

     六 对服务器目录以及文件URL访问控制

    6.1.1 禁止指定目录

        location ~ ^/images/.*.(php|php5|.sh|.pl|.py)$ {
          deny all;
    }   

    6.1.2 禁止指定目录

        location ~* ^/data/(images|data)/.*.(php|php5)$ {
          deny all;
    }

    6.1.3 禁止访问目录

        location ~ ^/(static|app) {
          deny all;
    }

    七 限制网站来源IP访问

        location ~ ^/data/ {
          allow 192.68.10.5;
          deny all;
    }
        location ~ {
         deny 192.168.1.1;
         allow 192.168.1.0/24;
         deny all;
    }
    if ( $remote_addr = 192.168.10.10 ) {
        return 403;
    }

    八  禁止非法域名解析访问企业网站

        server {
            listen 80 default_server;
            server_name_;
            return 501;
        }

    九 图片以目录防盗链

          location ~* ^.+.(jpg|png|swf|flv|rar|zip)$ {
                valid_referers none blocked *.yanshao.com yanshao.com;
                if ($invalid_referer) {
                   rewrite ^/ http://www.yanshao.com/img/nolink.gif;
                }
                root html/www;
            }
  • 相关阅读:
    数据库的事务
    二路归并排序C++ 递归实现
    2020cocoapods安装和更新repo
    iOS 一个对象的等同性
    chrome插件离线安装程序包无效
    OC 直接使用使用实例变量和通过属性来访问实例变量的区别
    数据结构与算法(八),查找
    数据结构与算法(七),排序
    数据结构与算法(六),图
    数据结构与算法(五),优先队列
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/9460246.html
Copyright © 2020-2023  润新知