nginx-静态资源部署

目录

静态资源概述

静态资源配置指令

listen指令

server_name指令

精确匹配

​编辑

​编辑

使用通配符匹配

使用正则表达式匹配

匹配执行顺序

default_server属性

location指令

root指令

alias指令

root与alisa指令的区别

index指令

error_page指令

直接使用

使用@重定向

使用response

静态资源优化配置语法

sendfile语法

tcp_nopush语法

tcp_nodeplay语法

静态资源压缩

gzip指令

gzip_types指令

gzip_comp_level指令

gzip_vary指令

gzip_buffers指令

gzip_disable指令

gzip_http_version指令

gzip_min_length指令

gzip_proxied指令

压缩功能实例配置

Gzip与sendfile的共存问题

添加模块到nginx中的步骤

①查看nginx的配置信息

②备份二进制文件

③进入nginx安装目录

④清空已有缓存

⑤编译nginx和使用模块

⑥make处理依赖关系

⑦处理对应文件

⑧更新nginx配置

gzip_static指令

静态资源缓存

使用浏览器缓存的优点

HTTP协议中的缓存相关字段

浏览器缓存的相关指令

expires指令

add_header指令

跨域问题

什么是跨域问题

跨域问题的解决

防盗链

HTTP头信息中的Referer

nginx防盗链的实现

valid_referers指令

实现防盗链效果


静态资源概述

静态资源通常指的是那些不会随着用户请求或服务器状态而变化的文件。这些资源包括图片、视频、音频、HTML文件、CSS文件、JavaScript文件、软件安装包、APK文件以及压缩包文件等。一旦这些资源被上传到服务器上,它们的内容就是固定的,服务器会直接返回这些资源的内容给客户端,客户端只需进行渲染或下载即可。

静态资源配置指令

listen指令

配置用来监听的端口号

listen指令表
语法listen address [:port] | listen port;
默认值listen *:80 | listen *:8080;
位置server块

server_name指令

设置虚拟主机的服务名称,可以使用精确匹配,如:www.baidu.com或者使用通配符来匹配更多的范围,如:*.baidu.com 可以匹配更大的范围,甚至可以使用正则表达式来进行匹配,如:^www\.(\w+)\.com$ 

精确匹配

直接使用固定的server_name名称,匹配唯一一个名称

server {listen  8081;server_name www.monkey.cn  www.apple.cn;   #可以书写多个服务名}

使用www.apple.com和www.monkey.com都可以访问到配置的服务页面,说明已经配置成功

使用通配符匹配

使用通配符匹配时,只能在最前面使用,或者最后面使用

正确示范: *.monkey.com    www.monkey.* 

错误示范: www.*.com

 

server {listen 8082server_name *.monkey.com   www.apple.*
}

此时的配置可以匹配  任何字符+.monkey.com和ww.apple.+任何字符 

匹配不到的原因:可能是没有配置hosts文件,不能进行dns解析

使用正则表达式匹配

使用正则表达式匹配时,要使用 ~  字符作为开头标记

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

此处使用Linux浏览器不使用本机电脑浏览器的原因:

配置完Linux上面的hosts文件之后,在Linux浏览器就可以完成dns解析,可以直接进行访问,但是此时本机浏览器不能进行访问,因为本机浏览器为进行dns解析,配置的server_name为私有地址,不能再公网进行解析,要使本机可以进行访问,需要配置本机的hosts文件

文件位置:C:\Windows\System32\drivers\etc\hosts

匹配执行顺序

当使用三个服务,都可以匹配到www.monkey.com时,系统会返回使用精确匹配的服务

三个匹配的执行顺序: 精确匹配>通配符匹配>正则匹配

default_server属性

可以将虚拟主机配置为默认主机,当没有匹配到ip:port时,则会配置默认的default_server返回结果,如果未配置,第一个serever默认为default_server属性

location指令

可以用来匹配请求的URL

location指令表
语法location  [ = | ~ | ~* | ^~ | @];url {……}
默认值              ---
位置http块,server块

使用~代表使用正则,~*代表使用正则而且不区分大小写,使用^~代表不进行贪婪匹配

root指令

设置请求的根目录

root指令表
语法root  path;
默认值root  html;
位置http,server,location

alias指令

用来更改location的URL

alias指令表
语法alias  path;
默认值--
位置http块,server块,location块
root与alisa指令的区别

使用root的处理结果: URL = root路径+location路径

使用alias的处理结果:URL = alias路径

例如: 使用 root 为  /usr/share/nginx/html

                    location  为 welcome.html 访问的URL为:/usr/share/nginx/html/welcome.html

            使用alias为/usr/share/nginx/html/welcome.html

                    location不管为什么,刚问的URL都为:  /usr/share/nginx/html/welcome.html

index指令

设置网络的默认界面

index指令表
语法index file;
默认值index  index.html;
位置http块,server块,location块

error_page指令

设置网络的错误页面

error_page指令表
语法error_page code ...[=[response]]  url
默认值---
位置http块,server块,location块

当出现对应代码时,对应的处理结果

例如  404 /50x.html 当出现结果为404时,跳转到/usr/share/nginx/html/50x.html页面

或者  404 =200 /usr/share/nginx/html/error.html

出现错误404时,返回200并且返回 /usr/share/nginx/html/error.html文件 

注意: 此处的404 =200   

404后面要加空格,但是200前面不需要添加

直接使用
server {listen 8083;server_name localhost;default_type text/plain;location / {root  /home/www/myweb;index index_sr2_location2.html;}error_page 404 https://www.baidu.com/s?wd=%E8%99%8E%E7%89%99&ie=utf-8&tn=15007414_4_pg;
}
使用@重定向
server {listen 8083;server_name localhost;default_type text/plain;location / {root  /home/www/myweb;index index_sr2_location2.html;}error_page 404 @jump_error;location @jump_error {default_type  text/plain;return 404 "Not Found"}
}
使用response
server {listen 8083;server_name localhost;default_type text/plain;location / {root  /home/www/myweb;index index_sr2_location2.html;}error_page 404 =200 "Welcome to You"
}

静态资源优化配置语法

sendfile语法

使用此功能可以使文件在处理时跳过内核态与用户态的切换,直接将进行文件的使用

sendfile指令表
语法

sendfile on | off;

默认值sendfile off;
位置http块,server块,location块
tcp_nopush语法

必须在sendfile功能打开时才可以使用,用来提升网络的传输效率

tcp_nodeplay语法

在keep-alive连接开启时生效,提高网络传输的实时性

tcp_deplay指令表
语法tcp_nodeplay on|off;
默认值tcp_nodeplay off;
位置http块,server块,location块

静态资源压缩

在NGINX的配置文件中配置gzip对静态资源进行压缩,可以配置在http块,server块和location块中,NGINX可以通过ngx-http-gzip-module模块,ngx-http-gzip-static-module模块,ngx-http-gunzip-modelu模块对这些指令进行解析和处理

gzip指令

是否开启gzip压缩功能

gzip指令表
语法gzip on;
默认值gzip off;
位置http块,server块,location块

gzip_types指令

根据相应的MIME类型选择性的开启Gzip功能,可以使用*选择全部压缩

gzip_types指令表
语法gzip_types mime_type;
默认值gzip_types  text/html;
位置http块,server块,location块

gzip_comp_level指令

设置压缩程度/等级,共有9级,使用的等级越高,压缩程度约高,压缩速度越慢

gzip_comp_level指令表
语法gzip_comp_level  number;
默认值gzip_comp_level   1;
位置http块,server块,location块

gzip_vary指令

设置压缩时是否发送“Vary:Accept-Encoding”头部的响应头部,告诉对方数据已经使用了压缩

gzip_vary指令表
语法gzip_vary on | off;
默认值gzip_vary  off;
位置http块,server块,location块

gzip_buffers指令

用来处理请求压缩的缓冲区的数量大小

gzip_buffers指令表
语法gzip_buffers  number size;
默认值gzip_buffers 32 4k| 16 8k;
位置http块,server块,location块

gzip_disable指令

匹配浏览器正则表达式,成功则不进行压缩

gzip_disable指令表
语法gzip_disable   regex(要使用的正则表达式);
默认值----
位置http块,server块,location块

gzip_http_version指令

针对http协议版本,选择性开启与关闭Gzip功能

gzip_http_version指令表
语法gzip_http_version  1.0 | 1.1 ;
默认值gzip_http_version  1.1; 
位置http块,server块,location块

gzip_min_length指令

设置文件进行压缩的最小值,只有到达该值,才对文件进行压缩

默认使用单位为:bytes,也可以使用K和M来进行限制

gzip_min_length指令表
语法

gzip_min_length  length;

默认值gzip_min_length  20;
位置http块,server块,location块

gzip_proxied指令

设置是否对服务器返回结果进行压缩

gzip_proxied指令表
语法gzip_proxied  参数
默认值gzip  off 
位置http块,server块,location块

off:关闭nginx服务器对后台服务器返回的结果进行压缩

expired:如果服务器header包含Cacha_Control:expired启用压缩

no-cache:如果服务器header包含Cacha_Control:no-cache启用压缩

no-store:如果服务器header包含Cacha_Control:no-store启用压缩

private:如果服务器header包含Cacha_Control:private启用压缩

no_last_modified:如果服务器header中不包含Last_Modified启用压缩

no_etag:如果服务器header不包含Etag启用压缩

auth:如果服务器header包含Authorization启用压缩

any:无条件使用压缩功能

压缩功能实例配置

#使用include引入与压缩相关配置
include nginx_gzip.conf
#展示nginx_zip.conf文件内容
gzip on;   #开启gzip压缩功能
gzip_types *;  #设置所有文件类型均进行压缩
gzip_comp_level 6;  #设置压缩等级为6
gzip_min_length 1024;  #设置文件最小压缩大小为1024bytes
gzip_buffers 4 16k;  #设置压缩空间个数为4,大小为16k
gzip_vary on;    #允许向浏览器头部发送Vary变量,告知数据已进行压缩
gzip_disable "MIME [1-6]\";  #禁用对IE6及以下版本的Gzip压缩
gzip_proxied off;      #关闭对后台服务器数据的压缩  

Gzip与sendfile的共存问题

开启sendfile后,读取磁盘上的静态文件时,可以不经过用户进程将静态文件通过网络设备进行发送,但是Gzip要实现对资源的压缩需要用户进程操作,要解决这两个配置的共存问题需要使用ngx_http_gzip_static_modelu模块中的gzip_static指令进行解决

添加模块到nginx中的步骤
①查看nginx的配置信息

(默认要使用的模块暂时不存在)

nginx -V
②备份二进制文件

可以使用find命令找寻自己的nginx二进制可执行文件(默认在/usr/local/nginx/sbin目录下)

mv /usr/local/nginx/sbin/nginx nginx_backup
③进入nginx安装目录
cd /usr/local/nginx
④清空已有缓存
make clean
⑤编译nginx和使用模块

(此处以http-gzip-static-module为例)

./configure  --with-http-gzip-static-module
⑥make处理依赖关系

(此时不要使用make install进行安装)

make
⑦处理对应文件

将make命令生成的objs下的nginx文件移动到nginx安装目录下的sbin下代替源nginx二进制执行文件

mv objs/nginx /usr/local/nginx/sbin/
⑧更新nginx配置
make upgrade
gzip_static指令

静态资源缓存

使用浏览器缓存的优点

①成本最低的缓存实现

②减少网络贷款消耗

③降低服务器压力

④减少网络延迟,加快页面打开速度

HTTP协议中的缓存相关字段

相关字段表
字段名含义
Expires缓存过期的日期和时期
Cache-Control设置和缓存相关的配置信息
Last-Modified请求资源最后修改时间
Etag请求变量的实体标签的当前值

浏览器缓存的相关指令

expires指令

expires指令的主要功能是设置资源的过期时间。通过修改HTTP响应头中的“Expires”和“Cache-Control”字段,expires指令可以控制浏览器或其他缓存代理如何缓存这些资源。

expires指令表
语法expires time; | expires epoch,max,off ;
默认值expires off;
位置

http块,server块,location块

time可以是正数、负数、零或带有时间单位的字符串(如30s、2h、30d等),表示资源的过期时间;epoch表示将“Expires”字段设置为1970年1月1日00:00:01 GMT,即表示资源不缓存;max表示将“Expires”字段设置为一个遥远的未来日期(如2037年12月31日),并设置“Cache-Control”字段的值为10年,表示资源可以被长时间缓存;off表示不修改响应头中的“Expires”和“Cache-Control”字段。

add_header指令

用来添加指定的响应头和响应值

add_header指令表
语法add_header  name  value [always];
默认值---
位置http块,server块,location块

name值:Cache-Control

value表
namevalue
must-revalidata可缓存,需要向源服务器确认
no-cache缓存前确认有效性
no-store不缓存
no-transform代理不可更改媒体类型
public可以向任意方提供响应缓存
max-age=<值>相应最大age值

proxy-revalidata

中间服务器对缓存有效性也进行确认
s-maxage=<值>公共缓存服务器相应的最大值

跨域问题

什么是跨域问题

同源策略: 当协议,域名(服务名),端口号相同时则为同源。当使用的URL不同源时,即产生跨域问题

跨域问题的解决

在server块中添加如下配置解决跨域问题

#添加可以跨域使用的地址
add_header  Access_Control_Allow Origin *;   #使用*表示所有网址均可进行跨域使用此网站资源
#添加使用方式
add_header  Access_Control_Allow_Methods GET,POST,PUT,DELETD;

防盗链

防止别人使用自己网站的资源在其余网站上面使用

HTTP头信息中的Referer

使用此字段Referer告诉浏览器,网页是从那个页面进行链接

nginx防盗链的实现

使用valid_referers限制请求的来源,可以用于防止恶意请求、防止盗链等安全措施

valid_referers指令
valid_referers指令表
语法valid_referers  none | blocked | server_names | string....
默认值---
位置http块,server块,location块

none:直接访问URL,而不使用任何网站或链接的跳转,此时$http_referer变量的值是空的。

blocked:请求标头中存在“Referer”字段,但其值已被防火墙或代理服务器删除。这些值通常是不以“http://”或“https://”开头的字符串。

server_names:使用当前server块中配置的server_name指令中的域名。

string:自定义的域名列表,支持通配符和正则表达式写法。

实现防盗链效果
location ~* \.(png|jpg|gif)$ {# 定义一个变量来跟踪引用是否有效set $is_valid_referer 0;# 检查引用是否有效if ($http_referer ~* "www\.baidu\.com" || $http_referer = "" || $http_referer ~* "^https?://") {set $is_valid_referer 1;}# 如果引用无效,则返回403禁止访问if ($is_valid_referer = 0) {return 403;}# 指定文件根目录root /path/to/html/images;
}

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

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

相关文章

时空信息平台架构搭建:基于netty封装TCP通讯模块(IdleStateHandler网络连接监测,处理假死)

文章目录 引言I 异步TCP连接操作II 心跳机制:空闲检测(读空闲和写空闲)基于Netty的IdleStateHandler类实现心跳机制(网络连接监测)常规的处理假死健壮性的处理假死方案获取心跳指令引言 基于netty实现TCP客户端:封装断线重连、连接保持 https://blog.csdn.net/z92911896…

Linux之RPM和YUM命令

一、RPM命令 1、介绍 RPM(RedHat Package Manager).,RedHat软件包管理工具&#xff0c;类似windows里面的setup,exe是Liux这系列操作系统里而的打包安装工具。 RPMI包的名称格式&#xff1a; Apache-1.3.23-11.i386.rpm “apache’” 软件名称“1.3.23-11” 软件的版本号&am…

aosp15 - Activity生命周期切换

本文探查的是&#xff0c;从App冷启动后到MainActivity生命周期切换的系统实现。 调试步骤 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点&#xff0c;为了attach目标进程在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLock…

【漫话机器学习系列】017.大O算法(Big-O Notation)

大 O 表示法&#xff08;Big-O Notation&#xff09; 大 O 表示法是一种用于描述算法复杂性的数学符号&#xff0c;主要用于衡量算法的效率&#xff0c;特别是随着输入规模增大时算法的运行时间或占用空间的增长趋势。 基本概念 时间复杂度 描述算法所需的运行时间如何随输入数…

ensp 基于端口安全的财务部网络组建

ARP IP数据包通过以太网发送&#xff0c;但以太网设备并不能识别IP地址&#xff0c;它们是以MAC地址传输的。因此&#xff0c;必须把IP目的地址转换成MAC目的地址。在以太网中&#xff0c;一个主机要和另一个主机进行直接通信&#xff0c;必须要知道目标主机的MAC地址。 ARP&…

在 Ubuntu 上安装 Muduo 网络库的详细指南

在 Ubuntu 上安装 Muduo 网络库的详细指南 首先一份好的安装教程是非常重要的 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 像这篇文章就和shit一样&#xff0c;安装到2%一定会卡住&#xff0c;如果你不幸用了这个那真是遭老罪了 环境&#xf…

Idean 处理一个项目引用另外一个项目jar 但jar版本低的问题

当在idea中一个module A引用另外一个项目B的jar&#xff0c;但是从私服仓库中拉下的jar版本比较低导致编译不通过时&#xff0c;可以把项目B拉下来&#xff0c;重新编译打包jar跟新到本地的仓库 选中右边菜单的Maven 选中对应的项目B-》Lifecycle->双击 install也可以按住c…

Windows下安装Rabbit MQ

一、安装环境&#xff1a; 系统&#xff1a;windows11; 环境配置安装&#xff1a;otp_win64_25.3.2.14.exe&#xff08;erlang类库&#xff09;&#xff1b; 服务应用安装&#xff1a;rabbitmq-server-3.12.4.exe&#xff1b; 二、erlang环境&#xff1a; 1.执行…

生态学研究中,森林生态系统的结构、功能与稳定性是核心研究

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

基于UNITY3D的照片墙演示项目技术分享

unity实现超大图片墙演示,由于拥有海量图片&#xff0c;使用了CPU 多线程&#xff0c;unity dots技术&#xff0c;图片组成文字部分&#xff0c;使用了点阵图技术&#xff0c;提取文字像素。 &#xff08;关于点阵介绍&#xff09; 点阵字体是把每一个字符都分成1616或2424个点…

设计模式-访问者设计模式

介绍 访问者模式&#xff08;Visitor&#xff09;&#xff0c;表示一个作用于某对象结构中的各元素的操作&#xff0c;它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 问题&#xff1a;在一个机构里面有两种员工&#xff0c;1.Teacher 2.Engineer 员…

ISO/IEC 25010:2023 系统和软件的质量模型(产品质量模型)

本文是对ISO/IEC 25010 2023年底第2版&#xff1a;系统和软件工程-系统和软件质量要求与评估 (SQuaRE)-产品质量模型一文的转载&#xff0c;此外还参考了ISO/IEC 25019:2023(en) Systems and software engineering — Systems and software Quality Requirements and Evaluatio…

【零基础保姆级教程】制作自己的数据集——Labelimg的安装与使用及常见的报错解决方法

1.是什么 LabelImg 是一个图形化的图像标注工具&#xff0c;主要用于机器学习和计算机视觉领域中的数据预处理。它是由 GitHub 用户 tzutalin 开发的开源项目&#xff0c;基于 Python 和 Qt 框架编写。LabelImg 允许用户手动为图像添加边界框&#xff08;bounding boxes&#…

【java基础系列】实现数字的首位交换算法

在java中&#xff0c;手写实现一个数字的首位交换算法实现 实现效果 实现代码 核心业务代码 public static void main(String[] args) {int[] arr {1,2,3,4,5};int temp arr[0];for (int i 0; i < arr.length; i) {System.out.print(arr[i]);}System.out.println(&quo…

【java面向对象编程】第七弹----Object类、类变量与类方法

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;javase &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一、Object类 1.1equa…

GO--堆(have TODO)

堆 堆&#xff08;Heap&#xff09;是一种特殊的数据结构。它是一棵完全二叉树&#xff08;完全二叉树是指除了最后一层外&#xff0c;每一层上的节点数都是满的&#xff0c;并且最后一层的节点都集中在左边&#xff09;&#xff0c;结放在数组&#xff08;切片&#xff09;中…

java开发入门学习五-流程控制

流程控制语句 if&#xff0c; if...else&#xff0c; if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式&#xff0c;使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…

豆包MarsCode测评:编程效率再提升

豆包MarsCode测评&#xff1a;编程效率再提升 本文正在参与豆包MarsCode AI 编程体验家活动 随着人工智能技术的发展&#xff0c;编程的方式也在悄然发生变化。最近&#xff0c;豆包推出的 AI 编程工具 MarsCode 在开发者社区引发了不小的关注。这是一款支持多种主流编程语言…

FFmpeg 框架简介和文件解复用

文章目录 ffmpeg框架简介libavformat库libavcodec库libavdevice库 复用&#xff08;muxers&#xff09;和解复用&#xff08;demuxers&#xff09;容器格式FLVScript Tag Data结构&#xff08;脚本类型、帧类型&#xff09;Audio Tag Data结构&#xff08;音频Tag&#xff09;V…

Unity开发哪里下载安卓Android-NDK-r21d,外加Android Studio打包实验

NDK下载方法&#xff08;是r21d,不是r21e, 不是abc, 是d版本呢) google的东西&#xff0c;居然是完全开源的 真的不是很多公司能做到&#xff0c;和那种伪搜索引擎是不同的 到底什么时候google才会开始造车 不过风险很多&#xff0c;最好不要合资&#xff0c;风险更大 Andr…