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。