nginx-静态资源部署

发布于:2025-02-11 ⋅ 阅读:(51) ⋅ 点赞:(0)

目录

 

静态资源概述

静态资源配置指令

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;   #可以书写多个服务名

}

06bfe238d33243f4a6e1a03a3f858325.png

caabf440181b442dac86631fe4fe5a55.png

使用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解析

09b2dc90cbd145c4b57e743e0de97665.png

459c3c96958343b89fafcf7e8f8645a0.png

698b62638de640e4ad21d79ce3553b14.png

ef9d9d7c7ed44f84aeb128f13393a916.png

使用正则表达式匹配

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

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

}

5e487ba5a5e54b69b290de5c0701327a.png

此处使用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表
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;
}

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到