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

    1、Nginx配置文件优化

    #当实际环境中域名主机多了,会导致主配置文件的条目变多,看的时候会出现一定的误差,所以我们可以使用Include来优化配置文件
    #主配置文件nginx.conf的配置
    worker_processes  10;
    error_log /var/log/nginx/error.log crit;
    events {
        worker_connections  1024;
        use epoll;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        include    /usr/local/nginx/extra/nginx_vhosts.conf; #这里我给的绝对路径,也可以给相对路径
    }
    #包含文件nginx_vhosts.conf
    server{
        listen 80;
        server_name www.daniel.org daniel.org;
        error_log /var/log/nginx/daniel/daniel_error.log;
        access_log /var/log/nginx/daniel/daniel_access.log;
        location / {
            root /var/www/html/www;
            index index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root  /usr/lcoal/nginx/html;
            }
    
    }
    

      

    2、expires缓存优化

      什么是expires?当你访问百度的一张照片的时候,百度可以使用expires来决定这张图片字啊你本地缓存多久,就可以不用再下载了,比如一个小时。缺点就是,如果百度换图片了,那么用户还是显示的原来的内容,也可以解决这个问题,那就是在服务器端改名弥补过期缓存问题

    #案例1
    location ~.*.(gif|jpg|jpeg|png|bmp|swf)$ #以括号里为扩展名的缓存十年
    {
            root /var/www/html/www
            expires   3650d;
    }
    
    #案例2
    location ~.*.(js|css)?$  #以括号里为扩展名的缓存三十天
    { 
            root /var/www/html/www
            expires    30d;
    }
    
    #特别注意:location内容一般要放到虚拟主机配置中,即server标签中
    
    
    #location修饰符
    = 使用精确匹配并终止搜索
    ~ 区分大小写的正则表达式匹配
    ~* 不区分大小写的正则表达式匹配
    ^~ 如果该location是最佳的匹配,那么对于匹配这个location的字符串不再进行正则表达式检测。注意这不是一个正则表达式匹配-它的目的是优先于正在表达式的匹配
    
    #我们curl一下看看
    [root@localhost nginx]# curl -I www.daniel.org/a.jpg
    HTTP/1.1 200 OK
    Server: nginx/1.12.2
    Date: Tue, 30 Jan 2018 06:04:47 GMT
    Content-Type: image/jpeg
    Content-Length: 350272
    Last-Modified: Wed, 22 Nov 2017 14:34:08 GMT
    Connection: keep-alive
    ETag: "5a158ae0-55840"
    Expires: Fri, 28 Jan 2028 06:04:47 GMT #到期时间2028年
    Cache-Control: max-age=315360000
    Accept-Ranges: bytes
    #缓存时间可以是年(y)、天(d)、时(h),缓存对象可以是jpg、jpeg、png、jss、css等静态文件
    
    #也可以根据目录来设置缓存(expires功能)
    
    location ~^/(images|javascript|Js/css/flash/media/static)/{
        expires 360d;
    }
    
    #单个文件设置过效期
    location ~(daniel.txt) {
        log_not_found off;
        expires 7d;
        break;
    }
    #设置过期时间并不记录404错误日志
    

      

    3、压缩优化

       当用户请求一个视频的时候,服务器如果返回整个视频给用户的话就会导致流量占用过大、传输变慢的情况,如果先压缩(gzip)一下再传就好得多了,用户收到后(在浏览器端),就会解压,然后看到了视频。压缩的好处可以降低带宽,提升访问速度

    #此模块类似apache的mod_deflate压缩功能,nginx的是ngx_http_gzip_module默认已安装
    #压缩配置
    gizp on;  #开启
    gzip_min_length 1k;        #设置允许压缩的页面最小字节数,页面字节数header头的Content-length中获取。默认是0,不管多大都进行压缩。建议设置成大于1k。如果小于1k可能会越压越大
    gzip_buffers 4 16k;        #压缩缓冲区大小。表示申请四个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
    gzip_http_version 1.0;        #压缩版本(默认为1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
    gzip_comp_level 2;        #压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,处理最慢,也比较消耗cpu资源
    gzip_types text/plain application/x-javascript text/css application.xml;        #用来指定压缩的类型,“text/html”类型总是会被压缩
    gzip_vary on;
    vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如Squid缓存经过nginx压缩的数据。
    
    #压缩配置可以放在http,localtion,server里
    #实战配置
          
    server{
        listen 80;
        server_name www.daniel.org daniel.org;
        error_log /var/log/nginx/daniel/daniel_error.log;
        access_log /var/log/nginx/daniel/daniel_access.log;
        location / {
            root /var/www/html/www;
            index index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root  /usr/lcoal/nginx/html;
            }
        location ~.*.(gif|jpg|jpeg|png|bmp|swf|js|xml)$
       {
            root /var/www/html/www;
            expires   3650d;
        }
        gzip on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types text/plain application/x-javascript text/css application.xml;
        gzip_vary on;
    }#新建一个xml和js文件大于1k就行,然后我们curl一下查看
    [root@localhost nginx]# curl  -I daniel.org/4.js
    HTTP/1.1 200 OK
    Server: nginx/1.12.2
    Date: Tue, 30 Jan 2018 07:22:17 GMT
    Content-Type: application/javascript
    Content-Length: 392143
    Last-Modified: Tue, 30 Jan 2018 07:09:02 GMT
    Connection: keep-alive
    ETag: "5a701a0e-5fbcf"
    Expires: Fri, 28 Jan 2028 07:22:17 GMT #
    Cache-Control: max-age=315360000
    Accept-Ranges: bytes
    
    #压缩对象:
    1.大于1k的纯文本文件,图片、视频等不要压缩,因为不但不会减小,在压缩时消耗cpu,mem资源
    

      

    Nginx错误页面的显示配置

    #当用户访问的时候会出现一些错误,比如403,404,我们可以指定当这些错误出现时跳转到指定页面
    erver{
        listen 80;
        server_name www.daniel.org daniel.org;
        error_log /var/log/nginx/daniel/daniel_error.log;
        access_log /var/log/nginx/daniel/daniel_access.log;
        location / {
            root /var/www/html/www;
            index index.html index.htm;
            error_page 403 /403.html; #匹配错误并指定跳转页面 #/403.html只是相对路径,相对于上面的root /var/www/html/www
            location = /403.html {  #匹配页面,跳转到指定页面,这里是403.html
                root /var/www/html/error/;
                index 403.html;
    }
        }
        location ~.*.(gif|jpg|jpeg|png|bmp|swf|js|xml)$
       {
            root /var/www/html/www;
            expires   3650d;
        }
        gzip on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        gzip_http_version 1.0;
        gzip_comp_level 2;
        gzip_types text/plain application/x-javascript text/css application.xml;
        gzip_vary on;
    }
    
    #404跳转
    #404跳转比较特殊,必须要加fastcgi_intercept_errors on,自定义的404页面必须大于512节,否则可能会出现IE默认的404页面
            error_page 404 /404.html;
            fastcgi_intercept_errors on;
            location = /404.html{
                root /var/www/html/error;
                index 404.html;
            }
    
  • 相关阅读:
    2020第29周日
    pytest文档44-allure.dynamic动态生成用例标题
    python笔记46-史上最强大最好用的python日志模块nb_log
    pytest文档43-元数据使用(pytest-metadata)
    pytest文档42-fixture参数化params
    ASP.NET Core WebApi+EF Core入门到实战演练
    SqlParameter中的new SqlParameter("e",0)的陷阱坑,你知道?
    EF Linq中的左连接Left Join查询
    .NET Core EFCore零基础快速入门简单使用
    git报错,远程克隆和更新不下来解决方法
  • 原文地址:https://www.cnblogs.com/wazy/p/8386260.html
Copyright © 2011-2022 走看看