• nginx 【匹配规则】【开启gzip压缩】


    匹配规则

      概括

    1.     普通匹配(遵循最大前缀匹配规则, 优先度比正则低)
    2. =     精确(严格)匹配, 优先度最高,后续不再匹配正则
    3. ^~    非正则匹配(依然遵循最大前缀匹配规则),后续不再匹配正则
    4. ~     表示区分大小写的正则匹配 
    5. ~*    表示不区分大小写的正则匹配
    6. /     通用匹配,任何请求都会匹配到(本质上等同于语法 空)
    常用正则符
    . : 匹配除换行符外的任意字符
    ? : 重复0次或1次 : 重复1次或更多次 : 重复0次或更多次 d :匹配数字 ^ : 匹配字符串的开始 $ : 匹配字符串的结束 {n} : 重复n次 {n,} : 重复n次或更多次 [c] : 匹配单个字符,如此处的字符 c [a-z] : 匹配a-z小写字母的任意一个 (a|b|c):匹配a或b或c</span>

      案例

        =

    location /aaa  普通匹配 
    http:192.1680.0.1/aaa 匹配

         ^~

    location ^~ /aaa  普通匹配 
    http:192.1680.0.1/aaa 匹配

         ~

    location ^ /(.*js)$  正则匹配
    //http:192.1680.0.1/aaa.js 匹配
    //http:192.1680.0.1/bbb.js 匹配
    //http:192.1680.0.1/BBB.js 不匹配

        ~*

    location ^ /(.*js)$  正则匹配
    //http:192.1680.0.1/aaa.js 匹配
    //http:192.1680.0.1/bbb.js 匹配
    //http:192.1680.0.1/BBB.js 匹配
    //http:192.1680.0.1/BB.css 不匹配

        /

    location /  正则匹配
    //http:192.1680.0.1/aaa.js 匹配
    //http:192.1680.0.1/bbb.js 匹配
    //http:192.1680.0.1/BBB.js 匹配
    //http:192.1680.0.1/BB.css 匹配

    gzip压缩

      nginx开启gzip压缩有两种方式

        1.动态压缩,在响应请求前,将原有资源压缩成gz文件放回给客户端,缺点是每次请求都会进行压缩,会消耗gpu性能

        2.静态压缩,在服务器提前准备好压缩文件,在客户端请求时,判断是否有对应的gz文件,有的话则响应gz文件,没有则响应原文件。

        3.图片、视频、pdf类,不应使用动态压缩,原因是,文件的压缩应当在上传致服务器之前进行压缩处理,而压缩处理后的文件在经过gzip压缩。并不能有效的压缩其体积,反而会白白损耗cpu的性能

      常用nginx gzip配置

    //...http块
    gzip on; #决定是否开启gzip模块,on表示开启,off表示关闭; gzip_min_length 1k; #设置允许压缩的页面最小字节(从header头的Content-Length中获取) ,当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩。建议大于1k gzip_buffers 4 16k; #设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间,param2:int(k) 后面单位是k。这里设置以16k为单位,按照原始数据大小以16k为单位的4倍申请内存 gzip_http_version 1.1; #识别http协议的版本,早起浏览器可能不支持gzip自解压,用户会看到乱码 gzip_comp_level 2; #设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大;等级1-9,最小的压缩最快 但是消耗cpu gzip_types text/plain application/x-javascript text/css application/xml; #设置需要压缩的MIME类型,非设置值不进行压缩,即匹配压缩类型 gzip_vary on; #启用应答头"Vary: Accept-Encoding" gzip_proxied off; nginx做为反向代理时启用,off(关闭所有代理结果的数据的压缩),expired(启用压缩,如果header头中包括"Expires"头信息),no-cache(启用压缩,header头中包含"Cache-Control:no-cache"), no-store(启用压缩,header头中包含"Cache-Control:no-store"),private(启用压缩,header头中包含"Cache-Control:private"),no_last_modefied(启用压缩,header头中不包含 "Last-Modified"),no_etag(启用压缩,如果header头中不包含"Etag"头信息),auth(启用压缩,如果header头中包含"Authorization"头信息) gzip_disable msie6;

      开启动态压缩

    http{
      ...
       #修改配置为
    gzip on;                     #开启gzip压缩功能
    gzip_min_length 10k;         #设置允许压缩的页面最小字节数; 这里表示如果文件小于10个字节,就不用压缩,因为没有意义,本来就很小.
    gzip_buffers 4 16k;          #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存
    gzip_http_version 1.1;       #压缩版本
    gzip_comp_level 2;           #设置压缩比率,最小为1,处理速度快,传输速度慢;9为最大压缩比,处理速度慢,传输速度快; 这里表示压缩级别,可以是0到9中的任一个,级别越高,压缩就越小,节省了带宽资源,但同时也消耗CPU资源,所以一般折中为6
    gzip types text/css text/xml application/javascript;      #制定压缩的类型,线上配置时尽可能配置多的压缩类型!
    gzip_disable "MSIE [1-6]\.";       #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip vary on;    #选择支持vary header;改选项可以让前端的缓存服务器缓存经过gzip压缩的页面; 这个可以不写,表示在传送数据时,给客户端说明我使用了gzip压缩
      ...
    }

      开启静态压缩

        安装静态压缩模块

          nginx包中,已经包含静态压缩需要使用http_gzip_static_module这个模块,我们只需要编译安装即可,模块 ngx_http_gzip_static_module 允许发送以“.gz”作为文件扩展名的预压缩文件,以替代发送普通文件。需要指定 --with-http_gzip_static_module编译选项:请注意,如果已经启动了nginx,那么需要先停止nginx,再进行编译

    ./configure --with-http_gzip_static_module #这里可以配合其他修饰符
    make
    make install

         开启配置

    location ~* \.(json)$ {
        gzip_static  on; //开启静态压缩
        gzip_proxied expired no-cache no-store private auth;               
    }

    #gzip_proxied
    #Nginx做为反向代理的时候启用:
    #off – 关闭所有的代理结果数据压缩
    #expired – 如果header中包含”Expires”头信息,启用压缩
    #no-cache – 如果header中包含”Cache-Control:no-cache”头信息,启用压缩
    #no-store – 如果header中包含”Cache-Control:no-store”头信息,启用压缩
    #private – 如果header中包含”Cache-Control:private”头信息,启用压缩
    #no_last_modified – 启用压缩,如果header中包含”Last_Modified”头信息,启用压缩
    #no_etag – 启用压缩,如果header中包含“ETag”头信息,启用压缩
    #auth – 启用压缩,如果header中包含“Authorization”头信息,启用压缩
    #any – 无条件压缩所有结果数据

        值得一提的是

    a)  文件可以使用 gzip 命令来进行压缩,或任何其他兼容的命令。建议压缩文件和原始文件的修改日期和时间保持一致。
    
    b)  gzip_static配置优先级高于gzip。
    
    c)  开启nginx_static后,对于任何文件都会先查找是否有对应的gz文件。
    
    d)  gzip_types设置对gzip_static无效。
    
    e)  gzip static默认适用HTTP 1.1。

        

  • 相关阅读:
    ACM-ICPC SouthWestern Europe Regional Contest 2017题解
    Ubuntu系统Anaconda下载安装与切换源教程
    HZNUOJ开发者学习计划
    Codeforces Round #473 (Div. 2)
    正方教务系统自动评教代码
    QQ空间自动点赞
    妈妈我要当全栈工程师
    基于Koa开发学生导师管理系统
    SSH框架实现登陆界面
    谈ACM生涯总结的经验
  • 原文地址:https://www.cnblogs.com/wrhbk/p/15672550.html
Copyright © 2020-2023  润新知