Nginx进阶篇(Nginx静态资源概述、Nginx静态资源配置指令、Nginx静态资源优化配置、Nginx静态资源压缩)

article/2025/7/28 12:53:21

文章目录

  • 1. Nginx静态资源概述
  • 2. Nginx静态资源配置指令
    • 2.1 listen指令
    • 2.2 server_name指令
      • 2.2.1 精确匹配
      • 2.2.2 补充知识:hosts文件
      • 2.2.3 通配符匹配
      • 2.2.4 正则表达式匹配
      • 2.2.5 匹配的执行顺序
    • 2.3 location指令
      • 2.3.1 uri以指定模式开始(/)
      • 2.3.2 uri必须与指定的模式精确匹配(=)
      • 2.3.3 uri中包含正则表达式(`~、~*、^~`)
    • 2.4 设置请求资源的目录(root&alias)
    • 2.5 index指令
    • 2.6 error_page指令
  • 3. Nginx静态资源优化配置
    • 3.1 send_file指令
    • 3.2 tcp_nopush指令&tcp_nodelay指令
  • 4. Nginx静态资源压缩
    • 4.1 Gzip模块配置指令
      • 4.1.1 gzip指令
      • 4.1.2 gzip_types指令
      • 4.1.3 gzip_comp_level指令
      • 4.1.4 gzip_vary指令
      • 4.1.5 gzip_buffers指令
      • 4.1.6 gzip_disable指令
      • 4.1.7 gzip_http_version指令
      • 4.1.8 gzip_min_length指令
      • 4.1.9 gzip_proxied指令
    • 4.2 Gzip压缩功能配置示例
    • 4.3 Gzip和send_file共存的问题
      • 4.3.1 问题分析
      • 4.3.2 gzip_static指令的作用
      • 4.3.3 测试gzip_static指令
        • 4.3.3.1 下载axios.min.js文件
        • 4.3.3.2 添加server块
        • 4.3.3.3 开启gzip_static指令
        • 4.3.3.4 正式测试

如果想了解更多与Nginx相关的内容,可以查看Nginx专栏中的文章: Nginx

视频教程:31-Nginx的server块和location块的简单说明

1. Nginx静态资源概述

上网搜索资源并访问资源对于我们来说并不陌生,客户端发送一个HTTP请求到服务器端获取所需要内容,浏览器把内容回显展示在页面的

我们所请求的内容分为两种类型,一类是静态资源、一类是动态资源

  • 静态资源即指在服务器端真实存在并且能直接拿来展示的一些文件,比如常见的HTML页面、css文件、js文件、图片、视频等资源
  • 动态资源即指在服务器端真实存在但是要想获取需要经过一定的业务逻辑处理,根据不同的条件展示在页面不同这 一部分内容,比如说报表数据展示、根据当前登录用户展示相关具体数据等资源

在学习Nginx处理静态资源的内容时,我们重点以下几个方面:

  1. 静态资源的配置指令
  2. 静态资源的配置优化
  3. 静态资源的压缩配置指令
  4. 静态资源的缓存处理
  5. 静态资源的访问控制,包括跨域问题和防盗链问题

2. Nginx静态资源配置指令

2.1 listen指令

视频教程:07-Nginx配置指令之listen


listen指令用于配置监听的端口

语法默认值位置
listen address[:port] [default_server] …;listen *:80 | *:8000server
listen port [default_server] …;

listen的设置比较灵活,我们通过几个例子熟悉常用的设置方式:

设置格式描述
listen 127.0.0.1:8000;监听指定的 IP 和端口
listen 127.0.0.1;监听指定 IP 的所有端口
listen 8000;监听指定端口上的连接
listen *:8000;监听指定端口上的连接

在 Nginx 配置中,default_server 属性是用来标识默认虚拟主机的。如果没有匹配到对应的 address:port,则会默认执行这个被标识为默认的虚拟主机

所谓的默认主机指的是如果没有匹配到对应的address:port时,Nginx将会把该请求转发到标识为默认主机的虚拟主机。如果没有指定默认虚拟主机,将会使用第一个server块

2.2 server_name指令

server_name指令用于设置虚拟主机服务名称

语法默认值位置
server_name specific_name …;server_name “”;server

其中specific_name可以提供多个,支持127.0.0.1 、 localhost 、域名等形式,中间用空格分隔


server_name的配置方式有三种,分别是:

  1. 精确匹配
  2. 通配符匹配
  3. 正则表达式匹配

2.2.1 精确匹配

server {listen 80;server_name www.itcast.cn www.itheima.cn;
}

2.2.2 补充知识:hosts文件

hosts文件是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址记录下来

当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析


hosts文件的默认存储位置:

  • windows系统:C:\Windows\System32\drivers\etc

  • Linux系统:/etc/hosts

因为域名要收取一定的费用,我们可以通过修改hosts文件来制作一些虚拟域名

vim /etc/hosts

2.2.3 通配符匹配

视频教程:09-server_name通配符匹配配置


server_name中支持通配符*,但需要注意的是通配符不能出现在域名的中间,只能出现在首部或尾部

server {listen 80;server_name  *.itcast.cn	www.itheima.*;
}

下面的配置会报错

server {listen 80;server_name  www.*.cn www.itheima.c*
}

2.2.4 正则表达式匹配

注意:~符号后面不能加空格

视频教程:10-server_name正则表达式匹配配置

server_name中可以使用正则表达式,使用~作为正则表达式字符串的开始标记


常见的正则表达式

代码说明
^匹配搜索字符串开始位置
$匹配搜索字符串结束位置
.匹配除换行符\n之外的任何单个字符
\转义字符,将下一个字符标记为特殊字符
[xyz]字符集,与任意一个指定字符匹配
[a-z]字符范围,匹配指定范围内的任何字符
\w与以下任意字符匹配 A-Z a-z 0-9 和下划线,等效于[A-Za-z0-9_]
\d数字字符匹配,等效于[0-9]
{n}正好匹配n次
{n,}至少匹配n次
{n,m}匹配至少n次至多m次
*零次或多次,等效于{0,}
+一次或多次,等效于{1,}
?零次或一次,等效于{0,1}

正则表达式匹配的配置示例如下:

注意:~符号后面不能加空格

server {listen 80;server_name ~^www\.(\w+)\.com$;default_type text/plain;return 200 $1  $2 ..;
}

2.2.5 匹配的执行顺序

由于server_name指令支持通配符和正则表达式,因此在包含多个虚拟主机的配置文件中,可能会出现一个名称被多个虚拟主机的server_name匹配成功的情况。当遇到这种情况时,请求交给谁来处理呢


在 Nginx 处理请求时会按照以下顺序进行:

  1. 精确匹配 (Exact Match):
    • Nginx 首先会尝试进行精确匹配,即请求的域名与 server_name 中指定的某个名称完全一致
    • 如果找到精确匹配,Nginx 会使用该 server block 处理请求,并停止进一步的匹配
  2. 最长前缀通配符匹配 (Wildcard Match - Longest Prefix)
    • 如果没有找到精确匹配,Nginx 会尝试通配符匹配
  3. 正则表达式匹配 (Regular Expression Match)
    • 如果没有找到精确匹配或通配符匹配,Nginx 会尝试正则表达式匹配
    • 正则表达式匹配的优先级低于精确匹配和通配符匹配
  4. 默认匹配 (Default Match)
    • 如果以上都没有匹配到,并且存在 server_name 为空或仅包含一个空字符串 ("") 的 server block,则该 server block 会被用作默认匹配
    • 如果没有默认匹配,则返回 404 或 444 错误(取决于 listen 指令中的 default_server 标志)

2.3 location指令

location指令用于定义一个处理HTTP请求的区块,它指定了如何处理匹配特定URI(统一资源标识符)的请求

server {listen 80;server_name localhost;location / {}location /niekeyi {}}
语法默认值位置
location [ = | ~ | ~* | ^~ | @ ] uri {…}server

uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式

nginx服务器在搜索匹配location的时候,会优先使用不包含正则表达式的location进行匹配,找到一个匹配度最高的一个

在不包含正则表达式的location中没有匹配项的情况下,才会匹配包含正则表达式的location

2.3.1 uri以指定模式开始(/)

location后面的uri不带符号,而且必须以指定模式开始

server {listen 80;server_name 192.168.200.133;location /abc {default_type text/plain;return 200 "access success";}
}

以下访问都能匹配到上面的location块

  • http://192.168.200.133/abc
  • http://192.168.200.133/abc?p1=TOM
  • http://192.168.200.133/abc/
  • http://192.168.200.133/abcdef

2.3.2 uri必须与指定的模式精确匹配(=)

用于不包含正则表达式的uri前,必须与指定的模式精确匹配

server {listen 80;server_name 127.0.0.1;location =/abc {default_type text/plain;return 200 "access success";}
}

可以匹配到

  • http://192.168.200.133/abc
  • http://192.168.200.133/abc?p1=TOM

匹配不到

  • http://192.168.200.133/abc/
  • http://192.168.200.133/abcdef

2.3.3 uri中包含正则表达式(~、~*、^~

  • ~ :用于表示当前uri中包含了正则表达式,并且区分大小写
  • ~*:用于表示当前uri中包含了正则表达式,并且不区分大小写

换句话说,如果uri包含了正则表达式,需要用上述两个符合来标识

server {listen 80;server_name 127.0.0.1;location ~^/abc\w$ {default_type text/plain;return 200 "access success";}
}server {listen 80;server_name 127.0.0.1;location ~*^/abc\w$ {default_type text/plain;return 200 "access success";}
}

^~:用于不包含正则表达式的uri前,功能和不加符号的一致,唯一不同的是,如果模式匹配,那么就停止搜索其他模式了

server {listen 80;server_name 127.0.0.1;location ^~/abc {default_type text/plain;return 200 "access success";}
}

2.4 设置请求资源的目录(root&alias)

  • root的处理结果是:root路径+location路径
  • alias的处理结果是:使用alias路径替换location路径

root指令用于设置请求的根目录

语法默认值位置
root path;root html;http、server、location

path为Nginx服务器接收到请求以后查找资源的根目录路径


alias指令用于用来更改location的URI

语法默认值位置
alias path;location

path为修改后的根路径


root指令和alias指令指令都可以来指定访问资源的路径,那么这个指令之间的区别是什么呢,我们通过一个例子来区别

/usr/local/nginx/html目录下创建一个 images 目录,并在目录下放入一张图片mv.png图片

location /images {root /usr/local/nginx/html;
}

访问图片的路径为

http://192.168.200.133/images/mv.png

如果把root改为alias

location /images {alias /usr/local/nginx/html;
}

再次访问上述地址,页面会出现404的错误,查看nginx的错误日志会发现是因为地址不对

  • root的处理结果是:root路径+location路径(/usr/local/nginx/html/images/mv.png)
  • alias的处理结果是:使用alias路径替换location路径(/usr/local/nginx/html/mv.png)

需要在alias后面路径改为

location /images {alias /usr/local/nginx/html/images;
}

如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求

将上述配置修改为

location /images/ {alias /usr/local/nginx/html/images;
}

访问就会出问题,查看nginx的错误日志发现还是路径不对,所以需要把alias后面加上 /


  • root的处理结果是:root路径+location路径
  • alias的处理结果是:使用alias路径替换location路径
  • 如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求

2.5 index指令

index指令用于设置网站的默认首页

语法默认值位置
index file …;index index.html;http、server、location

index后面可以跟多个设置,如果访问的时候没有指定具体访问的资源,则会从第一个设置依次进行查找,找到匹配的资源为止


举例说明:

location / {root /usr/local/nginx/html;index index.html index.htm;
}

通过 http://ip:port/ 访问该location的时候,地址后面如果不添加任何内容,则默认依次访问index.html和index.htm

2.6 error_page指令

error_page指令用于设置网站的错误页面

语法默认值位置
error_page code … [=[response]] uri;http、server、location…

error_page指令用于设置错误页面的响应,当服务器遇到指定的错误代码时,会返回相应的URI作为错误页面


指定具体跳转的地址

server {error_page 404 http://www.itcast.cn;
}

指定重定向地址

server{error_page 404 /50x.html;error_page 500 502 503 504 /50x.html;location =/50x.html{root html;}
}

使用location的@符号完成错误信息展示

server{error_page 404 @jump_to_error;location @jump_to_error {default_type text/plain;return 404 'Page Not Found ...';}
}

可选项=[response]的作用是更改响应代码

注意:404后面需要加空格,200前面不能加空格

server{error_page 404 =200 /50x.html;location =/50x.html{root html;}

当返回404找不到对应的资源的时候,在浏览器上可以看到,最终返回的状态码是200

3. Nginx静态资源优化配置

3.1 send_file指令

视频教程:16-Nginx静态资源优化配置之sendfile


send_file指令用于开启高效的文件传输模式

语法默认值位置
sendfile on|off;sendfile off;http、server、location

请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求,请求处理完成以后,操作系统还需要将处理得到的结果通过网络适配器传递回去

例如在html目录下有一个welcome.html页面,访问地址为http://192.168.200.133/welcome.html

server {listen 80;server_name localhost;location / {root html;index index.html;}
}

在这里插入图片描述

在这里插入图片描述

3.2 tcp_nopush指令&tcp_nodelay指令

tcp_nopush指令必须在sendfile打开的状态下才会生效,主要是用来提升网络包的传输“效率”

语法默认值位置
tcp_nopush on|off;tcp_nopush off;http、server、location

tcp_nodelay指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的“实时性”

语法默认值位置
tcp_nodelay on|off;tcp_nodelay on;http、server、location

在这里插入图片描述

经过分析,tcp_nopushtcp_nodelay看起来是"互斥的",那么为什么要将这两个值都打开呢

在Linux 2.5.9及以后的版本中两者是可以兼容的,三个指令都开启的好处是,sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 这大大减少了网络开销,并加快了文件发送的速度


当到达最后一个可能因为没有“填满”而暂停的数据包时,Nginx会忽略tcp_nopush参数, 然后tcp_nodelay强制套接字发送数据

由此可知,tcp_nopush可以与tcp_nodelay一起设置,它比单独配置TCP_NODELAY具有更强的性能,所以我们可以使用如下配置来优化Nginx静态资源的处理

sendfile on;
tcp_nopush on;
tcp_nodelay on;

4. Nginx静态资源压缩

我们思考一个问题,假如在满足静态资源优化的前提下,我们传送一个1M的数据和一个10M的数据那个效率更高

答案显而易见,传输内容小,速度就会快。那么问题又来了,同样的内容,如果把大小降下来,我们脑袋里面要蹦出一个词就是"压缩",接下来,我们来学习Nginx的静态资源压缩模块


在Nginx的配置文件中可以通过配置gzip来对静态资源进行压缩,相关的指令可以配置在http块、server块和location块中,Nginx可以通过

  • ngx_http_gzip_module模块
  • ngx_http_gzip_static_module模块
  • ngx_http_gunzip_module模块

对这些指令进行解析和处理

4.1 Gzip模块配置指令

接下来我们所学习的指令都来自ngx_http_gzip_module模块,该模块会在nginx安装的时候内置到nginx的安装环境中,也就是说我们可以直接使用这些指令

4.1.1 gzip指令

gzip指令用于开启或者关闭gzip功能

语法默认值位置
gzip on|off;gzip off;http、server、location

注意只有gzip指令为打开状态,与gzip相关的指令才有效果

http {gzip on;
}

4.1.2 gzip_types指令

gzip_types指令可以根据响应页的MIME类型选择性地开启Gzip压缩功能

语法默认值位置
gzip_types mime-type …;gzip_types text/html;http、server、location

所选择的值可以从mime.types文件中进行查找,也可以使用"*"代表所有类型的文件

http{gzip_types application/javascript;
}

4.1.3 gzip_comp_level指令

gzip_comp_level指令用于设置Gzip的压缩程度,级别从1-9,1表示压缩程度最低,压缩效率最高,9刚好相反,压缩程度最高,但是效率最低,最费时间

语法默认值位置
gzip_comp_level level;gzip_comp_level 1;http、server、location
http {gzip_comp_level 6;
}

4.1.4 gzip_vary指令

gzip_vary指令用于设置使用Gzip进行压缩发送是否携带“Vary:Accept-Encoding”头域的响应头部。主要作用是告诉接收方,所发送的数据经过了Gzip压缩处理

语法默认值位置
gzip_vary on|off;gzip_vary off;http、server、location

4.1.5 gzip_buffers指令

gzip_buffers指令主要实现的功能是申请number个每个大小为size的内存空间。具体值的设定一般会和服务器的操作系统有关,所以建议此项不设置,使用默认值即可

gzip_buffers指令用于处理请求压缩的缓冲区数量和大小

语法默认值位置
gzip_buffers number size;gzip_buffers 32 4k|16 8k;http、server、location
  • number:Nginx服务器向系统申请缓存空间个数
  • size:每个缓存空间的大小

4.1.6 gzip_disable指令

gzip_disable指令的作用:针对不同种类客户端发起的请求,选择性地开启和关闭Gzip功能

语法默认值位置
gzip_disable regex …;http、server、location

regex:根据客户端的浏览器标志(user-agent)来设置,支持使用正则表达式

指定的浏览器标志不使用Gzip,该指令一般是用来排除一些明显不支持Gzip的浏览器

以下的gzip_disable指令就是告诉 Nginx 不要对使用 IE 1 到 6 的浏览器发送 gzip 压缩的内容。这是因为这些旧版本的 IE 浏览器可能不支持 gzip 压缩,或者支持得不好,可能会导致页面无法正确显示

gzip_disable "MSIE [1-6]\.";

4.1.7 gzip_http_version指令

gzip_http_version指令的作用:针对不同的HTTP协议版本,可以选择性地开启和关闭Gzip功能

语法默认值位置
gzip_http_version 1.0 | 1.1;gzip_http_version 1.1;http、server、location

gzip_http_version指令指定使用Gzip的HTTP最低版本,一般采用默认值即可

4.1.8 gzip_min_length指令

gzip_min_length指令的作用:针对传输数据的大小,可以选择性地开启和关闭Gzip功能

语法默认值位置
gzip_min_length length;gzip_min_length 20;http、server、location

在 Nginx 配置中,可以使用不同的单位来指定大小。这些单位包括字节(bytes)、千字节(kilobytes,简称 KB)和兆字节(megabytes,简称 MB)


以下是一些常见的单位及其缩写:

  1. 字节(bytes):最基本的单位,表示一字节。在 Nginx 配置中,可以直接使用数字表示字节数,例如 1024 表示 1024 字节
  2. 千字节(kilobytes,KB):通常使用 kK 作为缩写。1 KB 等于 1024 字节。在 Nginx 配置中,可以使用 10k10K 表示 10 千字节(即 10 * 1024 字节)。
  3. 兆字节(megabytes,MB):通常使用 mM 作为缩写。1 MB 等于 1024 KB 或 1,048,576 字节。在 Nginx 配置中,可以使用 10m10M 表示 10 兆字节(即 10 * 1024 * 1024 字节)

以下是一些具体的例子:

  • 1024:表示 1024 字节
  • 10k10K:表示 10 千字节,即 10 * 1024 = 10240 字节
  • 10m10M:表示 10 兆字节,即 10 * 1024 * 1024 = 10,485,760 字节

Gzip压缩功能对大数据的压缩效果明显,但是如果要压缩的数据比较小的话,可能出现越压缩数据量越大的情况,因此我们需要根据响应内容的大小来决定是否使用Gzip功能。但是如何使用了Chunk编码动态压缩,该指令将被忽略

响应页面的大小可以通过头信息中的Content-Length来获取,建议设置为1K或以上

4.1.9 gzip_proxied指令

gzip_proxied指令用于设置是否对服务端返回的结果进行Gzip压缩

语法默认值位置
gzip_proxied off | expired | no-cache | no-store | private | no-last-modified | no-etag | auth | any;gzip_proxied off;http、server、location

以下是一些gzip_proxied指令常见的参数及其含义

参数含义
off不进行 gzip 压缩
expired如果响应已经过期,则进行 gzip 压缩
no-cache如果响应头部包含 Cache-Control: no-cache,则进行 gzip 压缩
no-store如果响应头部包含 Cache-Control: no-store,则进行 gzip 压缩
private如果响应头部包含 Cache-Control: private,则进行 gzip 压缩
no-last-modified如果响应头部没有 Last-Modified,则进行 gzip 压缩
no-etag如果响应头部没有 ETag,则进行 gzip 压缩
auth如果响应头部包含 Authorization,则进行 gzip 压缩
any无论什么情况都进行 gzip 压缩

4.2 Gzip压缩功能配置示例

gzip on;                # 开启 gzip 功能
gzip_types *;           # 压缩所有文件类型
gzip_comp_level 6;      # 设置 gzip 压缩级别为 6
gzip_min_length 1024;   # 仅压缩内容长度大于 1024 字节的数据
gzip_buffers 4 16K;     # 设置 gzip 压缩缓冲区大小为 4 个 16K 的缓冲区
gzip_http_version 1.1;  # 仅压缩 HTTP/1.1 请求
gzip_vary on;           # 在响应头中添加 Vary: Accept-Encoding
gzip_disable "MSIE [1-6]\."; # 禁止对 IE6 及以下版本进行 gzip 压缩
gzip_proxied off;       # 不压缩从后端服务器返回的数据

这些配置在很多地方可能都会用到,所以我们可以将这些内容抽取到一个配置文件中,然后通过include指令把配置文件再次加载到nginx.conf配置文件中


nginx_gzip.conf

gzip on;                # 开启 gzip 功能
gzip_types *;           # 压缩所有文件类型
gzip_comp_level 6;      # 设置 gzip 压缩级别为 6
gzip_min_length 1024;   # 仅压缩内容长度大于 1024 字节的数据
gzip_buffers 4 16K;     # 设置 gzip 压缩缓冲区大小为 4 个 16K 的缓冲区
gzip_http_version 1.1;  # 仅压缩 HTTP/1.1 请求
gzip_vary on;           # 在响应头中添加 Vary: Accept-Encoding
gzip_disable "MSIE [1-6]\."; # 禁止对 IE6 及以下版本进行 gzip 压缩
gzip_proxied off;       # 不压缩从后端服务器返回的数据

nginx.conf

include nginx_gzip.conf

4.3 Gzip和send_file共存的问题

4.3.1 问题分析

前面在讲解send_file的时候提到过,开启send_file以后,在读取磁盘上的静态资源文件的时候,可以减少拷贝的次数,可以不经过用户进程将静态文件通过网络设备发送出去

在这里插入图片描述

但gzip要想对资源压缩,是需要经过用户进程进行操作的,如何解决两个设置的共存问题呢?我们可以使用ngx_http_gzip_static_module模块的gzip_static指令来解决

4.3.2 gzip_static指令的作用

gzip_static指令的作用:

  • gzip_static 启用时,Nginx 会检查请求的文件对应的 .gz 压缩文件是否存在。如果存在,Nginx 会直接发送这个压缩文件,而不是原始文件
  • 启用gzip_static指令要求事先使用 gzip 工具或其他方法压缩静态文件,并将压缩文件与原始文件放在同一目录下,而且文件名带有.gz 扩展名
语法默认值位置
gzip_static on | off | always;gzip_static off;http、server、location

4.3.3 测试gzip_static指令

4.3.3.1 下载axios.min.js文件

运行以下指令下载axios.min.js文件,用于测试gzip_static指令

curl -o axios.min.js https://unpkg.com/axios@1.9.0/dist/axios.min.js

接着将axios.min.js文件移动到/home/www/web/js文件夹下

mkdir -p /home/www/web/js
mv axios.min.js /home/www/web/js/axios.min.js

修改/home/www/web/js目录的归属用户和归属用户组,确保Nginx的工作进程能够成功访问axios.min.js文件

chown www:www -R /home/www/web/js
4.3.3.2 添加server块

在nginx.conf文件中添加以下内容

  • 将127.0.0.1改成你的服务器的IP地址
  • listen指令和server_name指令不要和现有的server块完全相同,否则会产生冲突
server {listen 8040;server_name 127.0.0.1;location /gzip/axios.min.js {alias /home/www/web/js;index axios.min.js;}
}
4.3.3.3 开启gzip_static指令
gzip on;

第一步:把nginx.conf文件http作用域中的gzip on;改成gzip off;,不再让Nginx帮我们自动压缩文件,而是由我们自己压缩文件


第二步:在nginx.conf文件的http作用域中添加以下内容

gzip_static on;

在这里插入图片描述

第三步:保存nginx.conf文件

4.3.3.4 正式测试

在浏览器访问http://127.0.0.1/gzip/axios.min.js/网址

http://127.0.0.1/gzip/axios.min.js/

可以看到,原始文件的大小约为54.5kB

在这里插入图片描述

请求的响应头信息如下

在这里插入图片描述


接下来我们使用gzip工具压缩axios.min.js文件

gzip -c /home/www/web/js/axios.min.js > /home/www/web/js/axios.min.js.gz 

压缩完成后再次访问http://127.0.0.1/gzip/axios.min.js/网址

http://127.0.0.1/gzip/axios.min.js/

可以看到,文件的大小已经变成了19.2kB

在这里插入图片描述

请求头中也多出了Content-encoding和Vary两个属性

  • Content-Encoding: gzip 表示服务器已经使用gzip算法对响应的内容进行了压缩,客户端在接收到这样的响应后,需要对其进行解压才能读取原始数据
  • Vary: Accept-Encoding 表示服务器会根据客户端发送的 Accept-Encoding 请求头来决定是否以及如何压缩响应内容

在这里插入图片描述


http://www.hkcw.cn/article/pikOsbwUsU.shtml

相关文章

SAP 生产订单收货数量超额报错问题研究

工单收货接口报错有点奇怪,明明是生产订单收货,报错消息中却一直说采购订单收货。 其实之前有发现,只是知道原因(收货数量超过工单总数量),没太关注描述问题,这次好好研究下。 首先检查消息号&…

【连接器专题】SD卡座规格书审查需要审哪些方面?

在审查SD卡座规格书时,我们需要考虑哪些方面? 首先在拿到一份SD卡座的详细规格书时,一般供应商给到的规格书中包括了一些基础信息、产品图纸信息、技术参数信息,同时有些供应商会给出产品可靠性测试报告。因此我们会从这几个要素去看规格书。 基础信息 基础信息一般会给变更…

sward V1.1.4版本发布,支持文档审批及文档导出

sward是一款国产开源企业级知识管理工具,包含知识库管理、文档管理、文档协作、文档分享等模块,支持普通文档、markdown等格式,产品简洁易用、开源免费。本周sward发布V1.1.4版本,增加了文档审批和文档导出为word的功能&#xff0…

谷云科技发布业内首份 Oracle OSB 迁移到 iPaaS 技术白皮书

随着企业数字化转型的加速推进,从传统企业服务总线ESB向现代化集成平台iPaaS迁移已成为行业发展的必然趋势。Oracle Service Bus(OSB)在ESB产品市场中长期以来一直占据着较高的市场份额。然而,许多用户由于担心技术迁移的复杂性和…

特伦斯 S75 电钢琴:重塑音乐感知,臻享艺术之境

在音乐文化蓬勃发展的当下,电钢琴已成为音乐爱好者探索旋律世界的热门之选。在这方充满无限可能的音乐领域,特伦斯 S75 电钢琴以其超凡的设计与卓越的性能,打破传统电钢琴的局限,为用户带来无与伦比的音乐体验,宛如一颗…

立控信息智能装备柜:科技赋能军队装备管理现代化

在军事装备管理领域,高效、安全、智能化的存储解决方案至关重要。传统的人工管理模式不仅效率低下,还容易因人为疏忽导致装备丢失或管理混乱。​LKONE智能装备柜凭借先进的物联网技术、生物识别安全系统和智能管理功能,为军队提供了一套高效、…

【freertos-kernel】queue(接收)

文章目录 xQueueReceivexQueueReceiveFromISRxQueuePeekxQueuePeekFromISR xQueueReceive 从队列中接收一个数据项。 和发送数据的过程有点类似,不逐行解释代码了。 vTaskPlaceOnEventList把当前任务放进队列的等待链表的同时也会把当前任务从就绪列表移除&#x…

Clish中xml文件配置的使用方法

1&#xff0c;引入 之前介绍了klish的源码如何安装和使用&#xff0c;本次介绍一下klish的xml配置文件是如何使用的&#xff0c;介绍其中的<COMMAND>/<PARAM>/<PTYPE>等基础配置&#xff0c;方便以后查看。 2&#xff0c;clish中xml文件的基本语法 1&#…

Compose仿微信底部导航栏NavigationBar :底部导航控制滑动并移动

文章目录 1、准备工作1.1 参考1.2 依赖添加&#xff1a;1.3 主要控件NavigationBarHorizontalPager、VerticalPager 2、功能描述&#xff1a;3、实现过程3.1 创建一个数据类3.2 创建一个list变量3.3 具体实现3.3.1 创建共享的Pager状态3.3.2 将页面索引与页面标题同步3.3.3 创建…

由反汇编代码确定结构体的完整声明

C程序中遇到下面的代码 typedef struct {int left;a_struct a[CNT];int right; } b_struct;void test( int i, b_struct *bp) {int nbp->leftbp->right;a_struct *ap&bp->a[i];ap->x[ap->idx]n; } 下面是test函数的反汇编代码 结合C程序中的代码与test函数…

生成式人工智能:重塑社会的双刃剑与人类文明的抉择

普罗米修斯之火与文明的抉择 当古希腊神话中的普罗米修斯盗取天火赠予人间时&#xff0c;人类文明开启了从蒙昧走向理性的征程。今天&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;正以类似的方式重塑人类认知的边界——它既是照亮未来的火炬&#xff0c;也是可能灼…

TestHubo V1.1.0版本发布,新增用例评审功能,确保测试用例质量,提升测试用例覆盖率

TestHubo是一款开源免费的测试管理工具&#xff0c;提供一站式测试解决方案&#xff0c;涵盖功能测试、接口测试、性能测试以及 Web 和 App 测试等多个维度。本周TestHubo V1.1.0版本发布&#xff0c;新增用例评审功能。 1、版本更新日志 新增 ➢ 用例评审&#xff1a;通过评…

正点原子Z15I ZYNQ 开发板发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富!

正点原子Z15I ZYNQ 开发板发布&#xff01;板载PCIe2.0、SPFx2、MIPI CSI等接口&#xff0c;资料丰富&#xff01; 正点原子Z15I ZYNQ开发板&#xff0c;核心板全工业级设计&#xff0c;主控芯片的型号是XC7Z015CLG485-2I。开发板由核心板&#xff0b;底板组成&#xff0c;外设…

易路 iBuilder:解构企业 AI 落地困境,重构智能体时代生产力范式

一、从大模型到智能体的产业跃迁 2024 年堪称中国人工智能产业的 "战略拐点" 之年。当 DeepSeek R1 模型以 "技术 价格" 双重普惠模式掀起行业震荡时&#xff0c;各企业纷纷意识到&#xff0c;大模型的真正价值不在于技术炫技&#xff0c;而在于成为企业…

DiTAR: Diffusion Transformer Autoregressive Modeling for Speech Generation

kaiming 文章的codepaper abstract LLM 预测连续embedding&#xff0c;直接接DiT。和kaiming-Autoregressive Image Generation without Vector Quantization的文章思路一样。- LLM是casual attention&#xff0c;和diffusion 一起训练&#xff0c;相比于full attention会有性…

AC220V整流滤波电路Multisim仿真

一、仿真电路&#xff1a; 二、遇到的问题 1、仿真运行保险丝会熔断&#xff0c;然后输出电压不对。 解&#xff1a;这里可能是整流桥的模型不对&#xff0c;更换了一个新的模型&#xff0c;仿真就可以正常运行了。 2、整流桥的电流方向和问题 正半周&#xff1a; 负半周&a…

【后端高阶面经:架构篇】50、数据存储架构:如何改善系统的数据存储能力?

一、数据存储架构设计核心原则 (一)分层存储架构:让数据各得其所 根据数据访问频率和价值,将数据划分为热、温、冷三层,匹配不同存储介质,实现性能与成本的平衡。 热数据层:访问频率>100次/秒。采用Redis集群存储高频访问数据(如用户登录态、实时交易数据),配合…

安卓逆向篇Smail 语法反编译签名重打包Activity 周期Hook 模块

常见安卓逆向工具及环境&#xff1a; 1 、安卓模拟器&#xff08;最好 root 的真机&#xff09; 2 、 Magisk&XP&LSP 框架 HOOK 环境 安装参考&#xff1a; https://blog.csdn.net/danran550/article/details/132256027 3 、 Jadx-Gui 反编译 Java 代码查看…

AWS云创建安全审计用户组

目标 创建一个安全审计的用户组。 解决

拉深工艺模块——回转体拉深件毛坯尺寸的确定(一)

回转体拉深件毛坯尺寸的确定 一、 坯料形状和尺寸确定的依据 体积不变原则&#xff1a;若拉深前后料厚不变&#xff08;体积表面积厚度&#xff09;&#xff0c;拉伸前坯料表面积与拉伸后冲件表面积近似相等&#xff0c;得到坯料尺寸。 相似原则&#xff1a;拉深前坯料的形状…