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…

strongswan测试证书生成

环境如下 $ openssl version OpenSSL 3.0.15 3 Sep 2024 (Library: OpenSSL 3.0.15 3 Sep 2024) $ $ openssl version | sed -re s/^OpenSSL ([0-9])\..*/\1/ 3生成证书的目录及证书文件。 testing/hosts/winnetou/etc/ca$ ls bliss ed25519 …

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…

RHEL 7.5 源码安装 mysql-5.7.17 数据库

RHEL 7.5 mysql-5.7.17 源码安装 1、解决依赖包并下载源码包 # yum -y install gcc gcc-c ncurses ncurses-devel bison # wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz # tar -zxvf boost_1_59_0.tar.gz # mv boost_1_59_0 /usr/loc…

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.执行…

《Vue进阶教程》第十六课:深入完善响应式系统之单例模式

往期内容&#xff1a; 《Vue进阶教程》第五课&#xff1a;ref()函数详解(重点) 《Vue进阶教程》第六课&#xff1a;computed()函数详解(上) 《Vue进阶教程》第七课&#xff1a;computed()函数详解(下) 《Vue进阶教程》第八课&#xff1a;watch()函数的基本使用 《Vue进阶教…

docker run 命令参数

user docker run -it --nameubn18 --gpus all --privilegedtrue --shm-size 8G ubuntu:18.04 /bin/bash-it 是什么意思 4o 在运行 docker run 命令时&#xff0c;-it 是两个选项的组合&#xff0c;用于更好地与容器进行交互&#xff1a; -i 或 --interactive&#xff1a;这个选…

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

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

[python]使用flask-caching缓存数据

简介 Flask-Caching 是 Flask 的一个扩展&#xff0c;为任何 Flask 应用程序添加了对各种后端的缓存支持。它基于 cachelib 运行&#xff0c;并通过统一的 API 支持 werkzeug 的所有原始缓存后端。开发者还可以通过继承 flask_caching.backends.base.BaseCache 类来开发自己的…

测试电脑是否真实多核CPU

测试电脑是否真实多核CPU 在CPU的描述上现在多数看到的是多核心/多内核&#xff0c;看上去就像是多CPU的样子。但核心是有分真实核心和虚拟核心。如果是真实的多核心&#xff0c;多线程是能够并行。如果不是多核心&#xff0c;多线程就只能够并发。 这里就直接采用多线程的应用…

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

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

Go 语言并发实战:利用协程处理多个接口进行数据融合

高效地处理多个数据源并将其整合为有意义的结果是开发中一项重要的任务。Go 语言&#xff0c;以其强大的并发特性&#xff0c;为我们提供了优雅而高效的解决方案。那么我们探讨一下如何利用 Go 语言的协程&#xff0c;同时调用多个接口获取数据&#xff0c;并将这些数据无缝地合…

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

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

leetcode 面试经典 150 题:合并两个有序数组

链接合并两个有序数组题序号88题型数组解题方法1. 双指针法 &#xff1b;2. 合并排序法难道简单熟练度✅✅✅✅✅ 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 …

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…