nginx-静态资源实践(压缩配置,常见静态资源配置)

Nginx 实战搭建一个静态资源web服务器

第一个阶段访问单个文件
listen  80; #监听的端口 
server_name  localhost; #服务名称
#配置路径映射
location /geotools/ {alias geotools/; #将geotools/ 和/geotools/路径一一对应起来
}

目录关系如下:
nginx下面建一个geotools文件
在这里插入图片描述
在这里插入图片描述
可以访问静态资源,但是是单个的,如果是html,txt等可以浏览的文件就是可以直接在浏览器进行显示,如果是jar,zip则是下载,不可以访问整个目录类似于文件系统随意访问子文件都是不可以的。
在这里插入图片描述

同时为了减小文件传输大小我们配置gzip开启,并设置常见配置。

gzip on; #开启gizp
gzip_min_length 1; #当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩。
gzip_comp_level 2; #设置gzip压缩级别,级别越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
gzip_types text/plain application/x-javascript text/css application/xmL text/javascript application/x-httpd-php image/jpeg image/gif image/png  application/xhtml+xml; #设置需要压缩的MIME类型,如果不在设置类型范围内的请求不进行压缩

gzip相关配置详细说明
防止失效多贴几个链接
可以看到再访问的时候就会进行gzip的压缩:
在这里插入图片描述
知识点补充:
关于root和alias 的区别,我们来看下面两个配置:

location /alias/ {alias geotools/;
}
location /rootdir/ {root geotools/;
}

在这里插入图片描述
如果使用的是alias,就是将geotools目录和alias映射起来,所以哦我只需要访问路径:http://111.229.199.81/alias/demo.html 就可以访问到demo.html
如果我是用的root, 那么rootdir也是路径的一部分,root里面的geotools相当于是它的父目录,这个时候如果需要访问demo.html则需要访问http://111.229.199.81/rootdir/demo.html 这个路径。其实访问的服务器路径为/geotools/rootdir/demo.html,这就是这两个关键字的区别;

第二阶段映射目录

模块官方文档
ngx_http_autoindex_module 官方给我们提供了autoindex模块,我们只需要开启库就可以实现向文件系统一样访问静态资源

location /alias/ {alias geotools/;autoindex on; #开启autoindex#index  index.html index.htm;
}

在这里插入图片描述
因为公网带宽有限,我们可以通过下面配置限制访问速度:
核心模块的内置变量可以在这里看到

location /alias/ {alias geotools/;autoindex on; #开启autoindexset $limit_rate 1k; #他的定义是ngix每秒发送1k的数据到客户端
}

这个时候我们去访问,下载一个文件或访问一个HTML会发现速度很慢。

静态资源的常见解决方案

1 拓展名拦截
根据拓展名进行拦截,常见的资源类型用正则进行匹配,后缀名匹配。

server {listen 80;server_name localhost;#通常是一定要配置的因为访问一个域名的根目录下还是比较频繁的location / {root html;index index.html;}#静态资源location ~* .*\.(css|js|html|jpg|png)$ {root statics; #这里可以写相对路径也可以写绝对路径 相对路径就是相对于nginx的安装目录}
}

2 目录名拦截

location ~* .*(css|js|html|jpg|png).+  { #路径中包含有css js html jpg 的路径root html;
}

http://11.29.99.81:8088/static/css/app.26ac6647.css

静态资源相关配置(优化)

1 sendfile
默认情况下,nginx会自行处理文件传输,并在发送之前将文件复制到缓冲区中。启用sendfile指令跳过了将数据复制到缓冲区的步骤,并允许将数据从一个文件描述符直接复制到另一个文件描述符。同时,为了防止一个快速连接完全占用工作进程,也可以使sendfile_max_chunk指令限制单个sendfile()调用中传输的数据量。

sendfile on | off; #默认为off
#可以配置在http,server,location,if in location
location /mp3 {sendfile    on;sendfile_max_chunk  1m;
}

2 tcp_nopush
将tcp_nopush指令与sendfile on指令一起使用,可以使nginx在sendfile()获取数据块之后立即在一个数据包中发送HTTP响应头。即sendfile开启情况下,提高网络包的"传输效率"。

tcp_nopush on | off; #默认为off
# 可配置模块 http, server, location
location /mp3 {sendfile   on;tcp_nopush on;
}

3 tcp_nodelay
tcp_nodelay指令允许覆盖Nagle的算法,该算法最初设计用于解决慢速网络中小数据包的问题。Nagle算法将许多小数据包合并为一个较大的数据包,并以200毫秒的延迟发送数据包。
如今,在提供大型静态文件时,无论数据包大小如何,都可以立即发送数据。延迟也会影响在线应用程序(ssh,在线游戏,在线交易等)。
默认情况下,tcp_nodelay指令设置为on,这意味着禁用了Nagle的算法。此指令仅用于keepalive连接。因此tcp_nodelay提高网络包的"实时性"。

tcp_nodelay on | off; #默认on
#可配置模块 http, server, location 
location /mp3  {tcp_nodelay       on;keepalive_timeout 65;
}

4 配置压缩
浏览器中最常见的压缩算法有:

  • deflate:是一种过时的压缩算法,是 huffman 编码的一种加强。
  • gzip:是目前大多数浏览器都支持的一种压缩算法,是对 deflate 的改进。
  • sdch:谷歌开发的一种压缩算法,一种全新的压缩思路。deflate 与 gzip 的的压缩思想是,修改传输数据的编码格式以达到减少体量的目的,其最终传输的数据并没有减少。而sdch 压缩算法的思想是,让冗余的数据仅出现一次,其最终传输的数据减少了。
  • Zopfli:谷歌开发的一种压缩算法,Deflate 压缩算法的改进。比标准的gzip -9要小 3%-8%,但压缩用时是 gzip -9 的 80 多倍。
  • br:即 Brotli,谷歌开发的一种压缩算法,是一种全新的数据格式。与 Zopfli 相比,压缩率能够降低 20%-26%。Brotli -1 有着与 Gzip -9 相近的压缩比和更快的压缩解压速度。
    a、gzip on;
    开启 gzip 压缩,默认为 off。

b、 gzip_min_length 5k;
指定最小启用压缩的文件大小。

c、 gzip_comp_level 4;
指定压缩级别,取值为 1-9,数字越大,压缩比越高,但压缩所用时间会越长。默认为1,建议使用 4。

d、gzip_buffers 4 16k;
“4”表示的是缓存颗粒数量,而“16k”表示的是缓存颗粒大小。

e、 gzip_vary on;
开启动态压缩。默认值 off。

f、 gzip_types mimeType;
需要压缩的数据类型 比如jpg js css 等。例如:
gzip_types text/plain application/x-javascript text/css application/xmL text/javascript application/x-httpd-php image/jpeg image/gif image/png application/xhtml+xml
g、gzip_http_version
有1.0 和1.1两个版本

gzip on | off; #默认off
#http, server, location, if in location
gzip_comp_level 1;

h、预压缩配置
Nginx的动态压缩是对每个请求先压缩再输出,会造成服务端一定程度的CPU消耗,因此可以利用nginx模块Gzip Precompression模块进行预压缩。
同时nginx默认安装ngx_http_gzip_module,采用的是chunked方式的动态压缩,静态压缩需要使用http_gzip_static_module模块,进行pre-compress。
对需要压缩的文件,直接读取已经压缩好的文件(文件名为加.gz),而不是动态压缩,对于不支持gzip的请求则读取原文件,即预压缩。

gzip_static on | off | always; #默认为off
#可以配置模块 http, server, location
location /mp3  {gzip_static  on;gzip_proxied expired no-cache no-store private auth;
}

i、gzip_buffers压缩配置
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

gzip_buffers number size;gzip_buffers 32 4k|16 8k;
#可配置模块 http, server, location
location /mp3  {gzip_buffers 32 4k;
}

示例解释:如上32 4K表示按照内存页(one memory page)大小以4K为单位(即一个系统中内存页为4K),申请32倍的内存空间。

j、gzip_disable例外配置
针对特定的情况,排除在压缩之外,即不压缩.
(IE5.5和IE6 SP1使用msie6参数来禁止gzip压缩 )指定哪些不需要gzip压缩的浏览器(将和User-Agents进行匹配),依赖于PCRE库

gzip_disable regex ...;
#可配置模块 http, server, location
location /mp3  {gzip on;gzip_buffers 4 16k;gzip_comp_level 2;gzip_disable "MSIE [1-6]\.";
}

示例释义:关闭IE6及以下的浏览器压缩。
k、 gzip_min_length特定的大小压缩配置
当返回内容大于此值时才会使用gzip进行压缩,单位为字节,当值为0时,所有页面都进行压缩。

gzip_min_length length;
gzip_min_length 20; #默认值 20
# 可配置模块 http, server, location

l、gzip_proxied反向代理压缩配置

gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
gzip_proxied off; #默认关闭 可配置模块 http, server, location

参数释义:

  • 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:无条件启用压缩。

** 参考资料 极客时间nginx**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/192875.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day59【单调栈】503.下一个更大元素Ⅱ 42.接雨水 84.柱状图中最大的矩形

文章目录 503.下一个更大元素Ⅱ42.接雨水 503.下一个更大元素Ⅱ 力扣题目链接 代码随想录讲解链接 题意:给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数…

并发编程之生产者消费者模型

什么是生产者消费者模型 生产者消费者模型是多线程中一个比较典型的模型。 打个比方:你是一个客户,你去超市里买火腿肠。 这段话中的 "你"就是消费者, 那么给超市提供火腿肠的供货商就是生产者。超市呢?超市是不是被…

【学习笔记】 - GIT的基本操作,IDEA接入GIT以及上传hub

用github蛮多,但git没怎么用,看着视频对着写点笔记以及操作 一、GIT文件的三种状态和模式 已提交(committed) 已提交表示数据已经安全的保存在本地数据库中。 已修改(modified) 已修改表示修改了文件,但还没保存到数据库中。…

教你轻轻松松写出10万+的微头条爆文,赶紧收藏!

微头条是投放在今日头条上的稿件,重点在于微字,一般在300-500字之间,讲究的是原创干货,有独到见解。 企业和品牌撰写微头条来给自己带来更多曝光和展现。想要让你的微头条写出爆款内容,这是需要讲究技巧的&#xff0c…

Java实现DXF文件转换成PDF

代码实现 public static void dxfToPdf(){// 加载DXF文件String inputFile "input.dxf";CadImage cadImage (CadImage) Image.load(inputFile);// 设置PDF输出选项PdfOptions pdfOptions new PdfOptions();pdfOptions.setPageWidth(200);pdfOptions.setPageHeigh…

同为科技(TOWE)主副控智能自动断电桌面PDU插排

在这个快节奏的现代社会,我们越来越需要智能化的产品来帮助我们提高生活质量和工作效率,同时,为各种家用电器及电子设备充电成为不少消费者新的痛点。桌面插排如何高效、安全地管理这些设备,成为了一个亟待解决的问题。同为科技&a…

网络基础(一)

文章目录: 计算机网络认识计算机网络背景网络发展认识 “协议” 网络协议初识协议分层OSI七层模型TC/IP 五层(或四层)模型 网络传输基本流程网络传输流程图同局域网的两台主机进行通信跨网络的两台主机进行通信数据包的封装和分用 网络中的地…

【深度学习】SimSwap: An Efficient Framework For High Fidelity Face Swapping 换脸,实战

代码:https://github.com/neuralchen/SimSwap 文章目录 摘要介绍RELATED WORK实验结论代码实操 SimSwap是一个高保真度人脸交换的高效框架。它将源脸的身份转移到目标脸上,同时保留目标脸的属性。该框架包括ID注入模块(IIM)&#…

Umeyama 算法之源码阅读与测试

Title: Umeyama 算法之源码阅读与测试 文章目录 前言I. Eigen 中 Umeyama 算法源码1. Eigen/src/Geometry/Umeyama.h 源码2. 代码测试 II. PCL 中 Umeyama 算法源码III. evo 中 Umeyama 算法源码1. evo/core/geometry.py 源码2. 代码测试 总结参考文献 [相关博文介绍] - 矩阵乘…

Avatar虚拟形象解决方案,趣味化的视频拍摄与直播新体验

企业们正在寻找新的方式来吸引和保持观众的注意力,一种新兴的解决方案就是使用Avatar虚拟形象技术,这种技术可以让用户在视频拍摄或直播场景中,以自定义的数字人形象出现,同时保持所有的表情和脸部驱动。美摄科技正是这个领域的领军者&#x…

Elastic stack8.10.4搭建、启用安全认证,启用https,TLS,SSL 安全配置详解

ELK大家应该很了解了,废话不多说开始部署 kafka在其中作为消息队列解耦和让logstash高可用 kafka和zk 的安装可以参考这篇文章 深入理解Kafka3.6.0的核心概念,搭建与使用-CSDN博客 第一步、官网下载安装包 需要 elasticsearch-8.10.4 logstash-8.…

【Pytorch和深度学习】栏目导读

一、栏目说明 本栏目《pytorch实践》是为初学者入门深度学习准备的。本文是该栏目的导读部分,因为计划本栏目在明年完成,因此,导读部分,即本文也在持续更新中。 本栏目设计目标是将深度学习全面用pytorch实践一遍,由浅…

【考研数据结构代码题6】构建二叉树及四大遍历(先中后层)

题目:请你编写完整的程序构建一棵二叉树并对其进行先序遍历、中序遍历、后序遍历与层次遍历,分别打印并输出遍历结果 难度:★★★ 二叉树的存储结构 typedef struct Node{char data;//数据域struct Node* left;//左子树struct Node* right;//…

物联网AI MicroPython学习之语法 GPIO输入输出模块

学物联网,来万物简单IoT物联网!! GPIO 介绍 模块功能: GPIO通用输入输出。 接口说明 GPIO - 构建GPIO对象 函数原型:Pin(port, dir , pull)参数说明: 参数类型必选参数?说明portintY对应开发板的引脚号…

[LeetCode周赛复盘] 第 371 场周赛20231112

[LeetCode周赛复盘] 第 371 场周赛20231112 一、本周周赛总结100120. 找出强数对的最大异或值 I1. 题目描述2. 思路分析3. 代码实现 100128. 高访问员工1. 题目描述2. 思路分析3. 代码实现 100117. 最大化数组末位元素的最少操作次数1. 题目描述2. 思路分析3. 代码实现 100124…

初始MySQL(四)(查询加强练习,多表查询)

目录 查询加强 where加强 order by加强 group by 分页查询 总结 多表查询(重点) 笛卡尔集及其过滤 自连接 子查询 子查询当作临时表 all/any 多列子查询 #先创建三张表 #第一张表 CREATE TABLE dept(deptno MEDIUMINT NOT NULL DEFAULT 0,dname VARCHAR(20) NOT …

Python数据结构:字典(dict)详解

1.字典概念 字典在其他语言中可能会被称为“关联存储”或“关联数组”。   在Python中,字典(Dictionary)是一种可变、无序且键值对(key-value pairs)唯一的数据结构。   字典也是一种标准映射类型,mapp…

【嵌入式设计】Main Memory:SPM 便签存储器 | 缓存锁定 | 读取 DRAM 内存 | DREM 猝发(Brust)

目录 0x00 便签存储器(Scratchpad memory) 0x01 缓存锁定(Cache lockdown) 0x02 读取 DRAM 内存 0x03 DREM Banking 0x04 DRAM 猝发(DRAM Burst) 0x00 便签存储器(Scratchpad memory&#…

OpenCV颜色识别及应用

OpenCV是一个开源计算机视觉库,提供了丰富的图像处理和计算机视觉算法,其中包括颜色识别。本文首先介绍了OpenCV库,然后着重描述了颜色识别的基本原理和方法,包括颜色空间的转换、阈值处理、颜色检测等技术。接下来详细探讨了Open…