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。

    

原文地址:https://www.cnblogs.com/wrhbk/p/15672550.html