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; #开启autoindex
    set $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**

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考系统分析师知识点集锦一:企业信息化战略与实施

一、信息化战略体系(★★★★★) 1、信息资源规划ISP 信息资源规划是信息化建设的基础工程,是指对企业生产经营活动所需要的信息,对产生、获取、处理、存储、传输和利用等方面进行全面的规划。 IRP强调将需求分析与系统建模紧密结合起来,需…

酷柚易汛ERP - 其他入库单操作指南

1、应用场景 处理其他非采购类型的入库单据,比如赠品、获赔商品、以货抵债、借入、接受捐赠等不参与采购管理的入库类业务。 2、主要操作 2.1 新增其他入库单 打开【仓库】-【其他入库单】,选择商品后,根据存货核算方法自动计算出单位成本…

栈的实现---超详细

栈的实现 文章目录 栈的实现一、栈的模型二、栈的代码实现以及测试用例①栈的初始化②入栈③出栈④弹出栈顶⑤判断栈空间是否为空⑥计算栈空间长度⑦销毁栈⑧测试用例 一、栈的模型 首先栈有两个概念 1.数据结构里的栈。2.语言/操作系统中的栈(内存空间),可能会在递…

JUC工具包介绍

目录 1. 引言 2. 介绍JUC工具包 2.1. JUC工具包的概述和作用 2.2. 什么是JUC工具包? 2.2.1. JUC工具包与传统线程编程的区别和优势 3. 线程池(Executor) 3.1. 线程池的概念和优势 3.1.1. ThreadPoolExecutor类的介绍和使用示例 3.1.…

Docker安装Octoprint 3D打印控制软件

Octoprint简介 Octoprint是一个运行在Linux系统上的开源套件,可以为普通的3D打印机添加强大的外围管理功能。 web管理界面远程操控摄像头实时监控视频录制、延时摄影在线切片图形化的温度曲线显示手机监控操作免SD卡和U盘通过插件和USB/GPIO接口实现更多功能 Oct…

第三天课程 RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…

分布式锁介绍

为什么需要分布式锁 在单机部署的系统中,使用线程锁来解决高并发的问题,多线程访问共享变量的问题达到数据一致性,如使用synchornized、ReentrantLock等。 但是在后端集群部署的系统中,程序在不同的JVM虚拟机中运行,且…

PostGIS学习教程五:数据

教程的数据是有关纽约市的四个shapefile文件和一个包含社会人口经济数据的数据表。在前面一节我们已经将shapefile加载为PostGIS表,在后面我们将添加社会人口经济数据。 下面描述了每个数据集的记录数量和表属性。这些属性值和关系是我们以后分析的基础。 要在pgAdm…

fileread任意文件读取学习笔记

任意文件读取概述 一些网站的需求,可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件。这些文件可以是源代码文件,配置文件,敏感文件等等。 任意文件读取会造成&#x…

Python学习:同步异步阻塞与非阻塞

嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、状态介绍 在了解其他概念之前,我们首先要了解进程的几个状态。 在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。 就绪…

LeetCode | 225. 用队列实现栈

LeetCode | 225. 用队列实现栈 OJ链接 此题可以用两个队列去实现一个栈,每次始终保持一个队列为空, 入栈操作相当于给非空队列进行入队操作 入数据,把不为空的队列入 出数据,把不为空的队列数据导入为空,直到最后一…

1334. 阈值距离内邻居最少的城市

分析题目两点“阈值距离”、“邻居最少”。 “阈值距离”相当于定了个上界,求节点之间的最短距离。 “邻居最少”相当于能连接的点的数量。 求节点之间的最短距离有以下几种方法: 在这道题当中,n的范围是100以内,所以可以考虑O(n…

超详细!!新手必看!STM32--独立看门狗IWBG

一、看门狗是什么? 答:看门狗是一个12bit的递减计数器。当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,CPU收到复位信号,系统复位重新运行。在计数没减到0之前,重置了计数器的值的话&…

降水短临预报模型trajGRU简介

1 前言 trajGRU 是在对 convLSTM 的改进,且这两个模型是同一个作者。 convLSTM 在降水短临预报这块已经超越传统模型,但其是局部不变性的(location-invariant),而自然的运动和转换(如旋转)是局部变化的(location-invariant)。作者为了能够使…

【python 生成器 面试必备】yield关键字,协程必知必会系列文章--自己控制程序调度,体验做上帝的感觉 2

这篇文章要解决的问题:How to Pass Value to Generators Using the “yield” Expression in Python ref:https://python.plainenglish.io/yield-python-part-ii-e93abb619a16 1.如何传值 yield 是一个表达式!!!! yi…

⑤ 【MySQL】DCL语句 —— 用户管理、权限控制

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL用户与权限 ⑤ 【MySQL】DCL语句 —— 用…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FREERTOS移植

前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务,把AWTK的应用…

临床决策分析(DCA)演示APP:理解DCA分析

临床决策分析(DCA)演示APP:理解DCA分析 之前讨论了DCA分析的分析过程和作用,认为其最主要的作用是确定预测模型的决策阈值,从而促进预测模型与临床的结合。DCA的影响不止于此,在DCA分析中,预测…

JLMR Micro Super Resolution Algorithm国产微超分算法DEMO

一、简介 目前,做超分算法基本还是以AI训练为主,但是AI基本上都是基于既定场景的训练。而传统的算法基本上都是利用上下文的纹理预测、插值等方案,在图像放大过程中会出现模糊,或马赛克等现象。 我们基于加权概率模型&#xff0c…

Control的Invoke和BeginInvoke

近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下。感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 。 (一)Control的Invoke和BeginInvoke 我们要基于以下认识: (1&#x…