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 8082 server_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:WindowsSystem32driversetchosts

匹配执行顺序

当使用三个服务,都可以匹配到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_disableregex(要使用的正则表达式);

默认值

----

位置

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表

name

value

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/news/1141451.shtml

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

相关文章

Keil5安装教程之STC芯片添加:实战案例解析

Keil5添加STC芯片全攻略&#xff1a;从环境配置到一键下载的实战路径你有没有遇到过这样的场景&#xff1f;刚建好一个Keil工程&#xff0c;写完LED闪烁代码&#xff0c;信心满满点击“编译”——没问题&#xff1b;接着点“下载”&#xff0c;结果弹出提示&#xff1a;“Targe…

基于keil5编译器5.06下载的开发环境搭建手把手教程

搭建稳定可靠的嵌入式开发环境&#xff1a;从Keil5编译器5.06下载到实战调试 在嵌入式系统的世界里&#xff0c;一个高效、稳定的开发工具链往往决定了项目的成败。尤其当我们面对工业控制、汽车电子或长期维护的量产产品时&#xff0c;选择一款经过时间验证的编译器和IDE组合…

TPM 2.0 到底是啥?微软为啥非得让它成 Windows 11 的“硬门槛”[特殊字符](一篇讲透)

&#x1f525;个人主页&#xff1a;杨利杰YJlio❄️个人专栏&#xff1a;《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》&#x1f31f; 让复杂的事情更…

USB Serial Controller驱动与RS485模块协同工作实战解析

从“插上就用”到稳定通信&#xff1a;USB转RS485实战全解析你有没有遇到过这样的场景&#xff1f;一台工控机没有串口&#xff0c;但现场一堆温湿度传感器、电表、阀门控制器全是RS485接口。怎么办&#xff1f;最简单的方案就是——插个USB转RS485模块。听起来很简单&#xff…

基于Java+SpringBoot+SSM高校志愿活动管理系统(源码+LW+调试文档+讲解等)/高校志愿服务管理系统/高校志愿者活动平台/大学志愿活动管理软件/高校志愿活动管理平台

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

51单片机蜂鸣器项目入门:制作简易音乐播放器

用51单片机“弹”一首《小星星》&#xff1a;从蜂鸣器发声到音乐播放的完整实现你有没有想过&#xff0c;一块几块钱的51单片机&#xff0c;加上一个小小的蜂鸣器&#xff0c;也能“演奏”出旋律&#xff1f;不是单调的“嘀嘀”提示音&#xff0c;而是真正能听出调子的《小星星…

基于Java+SpringBoot+SSM共享单车管理系统(源码+LW+调试文档+讲解等)/共享单车管理平台/共享单车运营系统/单车管理系统/共享车辆管理系统/共享单车智能系统/共享单车服务系统

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

arduino寻迹小车小白指南:轻松融入机器人课堂

从零开始做一辆“会思考”的小车&#xff1a;Arduino寻迹项目实战教学你有没有试过&#xff0c;写几行代码&#xff0c;就能让一个小车自己沿着黑线跑起来&#xff1f;不是遥控&#xff0c;也不是预设轨道——它真的能“看”路、“判断”方向&#xff0c;甚至在转弯时微微调整速…

工业网关开发中的CubeMX安装避坑指南

工业网关开发实战&#xff1a;STM32CubeMX安装避坑全记录 在我们最近的一个工业边缘计算项目中&#xff0c;团队刚拿到新设计的STM32H743核心板&#xff0c;准备着手开发支持Modbus、CAN和以太网协议转换的智能网关。一切就绪&#xff0c;却卡在了最基础的一环—— STM32Cube…

AI 领域中的 Prompt(提示词/提示)是什么?

AI 领域中的 Prompt&#xff08;提示词/提示&#xff09;是什么&#xff1f;一、核心定义 Prompt&#xff0c;在人工智能领域&#xff0c;特指用户输入给大语言模型或其他生成式AI模型的指令、问题、上下文或信息片段&#xff0c;旨在引导模型产生符合期望的输出。 简单比喻&am…

minicom与ARM开发板通信实战项目演示

用 minicom 玩转 ARM 开发板串口调试&#xff1a;从连线到自动化实战你有没有遇到过这样的场景&#xff1f;新拿到一块 ARM 开发板&#xff0c;烧录完镜像&#xff0c;通电后屏幕黑着、网络没反应——系统到底启动了没有&#xff1f;U-Boot 跑起来了吗&#xff1f;内核卡在哪一…

计算机毕业设计springboot基于vue的网上订餐系统 SpringBoot+Vue智慧餐饮在线点餐平台 Vue与SpringBoot融合的云餐厅即时订餐系统

计算机毕业设计springboot基于vue的网上订餐系统ly71oso3 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。快节奏的都市生活把“吃饭”这件小事也推上了数字化快车道&#xff1a;…

计算机毕业设计springboot大学四六级英语考试自主学习平台 基于Spring Boot的高校英语四六级在线自学系统 Spring Boot驱动的大学英语等级考试个性化学习平台

计算机毕业设计springboot大学四六级英语考试自主学习平台p0b96y2o &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。 大学英语四六级是衡量大学生英语能力的“硬通货”&#xff0…

Java贪心算法详解:从入门到实战

一、什么是贪心算法? 1.1 通俗解释 贪心算法(Greedy Algorithm) 是一种非常直观的算法思想。它的核心理念可以用一句话概括: 在每一步决策时,都选择当前看起来最好的选项,不考虑未来,也不回头修改之前的选择。 这就像一个"目光短浅"但"行动果断"的…

[特殊字符]_可扩展性架构设计:从单体到微服务的性能演进[20260110164857]

作为一名经历过多次系统架构演进的老兵&#xff0c;我深知可扩展性对Web应用的重要性。从单体架构到微服务&#xff0c;我见证了无数系统在扩展性上的成败。今天我要分享的是基于真实项目经验的Web框架可扩展性设计实战。 &#x1f4a1; 可扩展性的核心挑战 在系统架构演进过…

framebuffer在工业HMI中的应用:入门必看

从显存到屏幕&#xff1a;用 framebuffer 打造工业级 HMI 的底层逻辑你有没有遇到过这样的场景&#xff1f;一台数控机床开机后&#xff0c;屏幕黑着等了五六秒才弹出操作界面&#xff1b;或者在 PLC 控制柜前轻点触摸屏&#xff0c;按钮响应慢半拍&#xff0c;让人怀疑是不是设…

vivado2022.2安装全流程图文并茂的系统学习资料

Vivado 2022.2 安装实战全攻略&#xff1a;从零搭建高效 FPGA 开发环境 你是否曾因为 Vivado 安装失败而耽误项目进度&#xff1f;是否在下载器卡在 0% 时束手无策&#xff1f;又或者&#xff0c;好不容易装上了却提示“License Checkout Failed”&#xff1f; 别担心&#x…

nginx中的proxy_set_header参数详解

在使用 Nginx 作为反向代理服务器时&#xff0c;proxy_set_header 指令扮演着至关重要的角色。它允许我们自定义请求头信息&#xff0c;将客户端请求传递给上游服务器时&#xff0c;添加或修改特定的信息&#xff0c;从而实现更灵活的代理功能。本文将深入探讨 proxy_set_heade…

【MiniMax】基于FastAPI + LangGraph + LLM大语言模型的通用Agent多智能体系统

基于 FastAPI + LangGraph + LLM 大语言模型的通用 Agent 多智能体系统架构设计与开发实战、产业应用 文章目录 基于 FastAPI + LangGraph + LLM 大语言模型的通用 Agent 多智能体系统架构设计与开发实战、产业应用 内容简介 第一部分:理论基础与技术栈概览 第1章 从大语言模型…