Nginx:动静分离(示意图+配置讲解)

news/2024/12/13 12:38:50/

示意图:

 

动静分离

动静分离是指将动态内容和静态内容分开处理的一种方式。通常,动态内容是指由服务器端处理的,例如动态生成的网页、数据库查询等。静态内容是指不需要经过服务器端处理的,例如图片、CSS、JavaScript文件等。通过将动态内容和静态内容分开处理,可以提高服务器的性能和响应速度。

在动静分离中,通常将Nginx作为前端服务器,将静态内容直接由Nginx处理并返回给客户端,而动态内容则交给后端服务器(如应用服务器)处理。Nginx可以通过配置来指定哪些请求是静态内容,这样它就可以直接从磁盘中读取并返回相应的文件,而不需要将请求转发给后端服务器。

举例
server {listen 80;server_name example.com;# 静态html文件处理location / {root   html;index  index.html index.htm;}# 静态图片文件处理location /picture {root   resources;index  index.html index.htm;}# 动态请求转发给后端服务器location /api {proxy_pass http://backend_server;}
}

配置文件

alias与root

root和alias指令都用于定义服务器文件系统中用于处理请求的根目录,但它们之间有一些关键区别:

  • Root指令:root指令用于设置请求的根目录。它是相对于Nginx配置文件中的root指令所在的位置的。如果请求的URI是/index.html,而root指令设置为/var/www/html,Nginx将会在/var/www/html目录下寻找index.html文件。
  • Alias指令:alias指令用于将请求映射到指定位置,可以用于创建映射到文件系统中不同位置的位置。与root指令不同,alias指令可以用于更灵活地重写URL路径。例如,如果请求的URI是/static/1.jpg,而alias指令设置为/var/www/html/images/,Nginx将会在/var/www/html/images/1.jpg位置查找文件。

举例:(建议通过案例理解

文件系统结构:

/var/www/html
|_ index.html
|_ images|_ image1.jpg|_ ...

请求路径都为:/images/pic.jpg,希望获得/var/www/html/image1目录下文件,讲述4种配置方式:

  • root绝对路径(有/):拼接root+请求路径
server {location /images/ {root /var/www/html;}
}
  • root相对路径(无/):拼接相对路径+请求路径
server {location /images/ {root relative/path/to/html;}
}
  • alias绝对路径:拼接alias+请求去除location后路径。
server {location /images/ {alias /var/www/html/images/;}
}
  • alias绝对路径:拼接alias+请求最后路径。
server {location /images/ {alias relative/path/to/html/images;}
}
location

匹配规则:

  • 前缀匹配:当location后面的字符串以/开头时,使用前缀匹配。例如:location /images/会匹配以/images/开头的所有URI,如/images/1.jpg、/images/logo.png等。
  • 正则表达式匹配:当location后面的字符串以~或~*开头时,使用正则表达式匹配。例如:location ~ \.(gif|jpg|png)$会匹配所有以.gif、.jpg或.png结尾的URI。

匹配顺序:

  1. 精确匹配(=location = /path): 如果找到完全匹配的location,则Nginx将停止搜索并使用该location块。
  2. 正则表达式匹配(location ~ pattern): Nginx按照配置文件中定义的顺序依次检查每个正则表达式,并在第一个匹配上停止。
  3. 前缀匹配(location /prefix): 如果没有精确匹配或正则表达式匹配,Nginx会选择最长的前缀匹配。也就是说,它会寻找最具体的匹配项。
  4. 默认匹配(location /): 如果上述匹配都失败,则使用默认location块。通常情况下,如果没有显式指定,Nginx会将整个配置文件视为一个location /块。

http://www.ppmy.cn/news/1156468.html

相关文章

9、Docker 安装 Redis

1、下载镜像 docker pull redis:3.2.10 2、本机创建redis目录并修改配置文件 1)创建目录 mkdir /usr/local/redis 2)进入redis目录 cd /usr/local/redis 3)创建data目录 mkdir data 4)创建redis.conf文件 vi redis.conf 5&a…

面试题:Java反射和new效率对比,差距有多大?

文章目录 一、基础概念二、new 对象和反射创建对象的效率对比所以下面我们来探讨一下为什么这么大差别?总结起来有下面几个原因 三、反射和new 的使用场景反射的部分使用场景new对象和反射的区别 一、基础概念 Java中,一般我们创建一个对象可能会选择new一下个实例…

VUE整合Echarts实现简单的数据可视化

提示:本篇案例使用的vue2 以及 vue cli脚手架: 文章目录 前言 一、Echarts的安装 二、可视化渲染 1.柱状图 2.饼图 3.主题的下载 总结 前言 ECharts是一款功能强大的前端数据可视化库,支持多种图表类型和统计图表、地理数据可视化、关系型…

基于SpringBoot的校园周边美食探索及分享平台的设计与实现

文章目录 项目介绍主要功能截图:登录注册个人信息管理后台首页轮播图管理美食鉴赏我的好友管理我的收藏管理用户管理部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给…

代码随想录算法训练营第23期day22|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录 一、(leetcode 669)修剪二叉搜索树 二、(leetcode 108)将有序数组转换为二叉搜索树 三、(leetcode 538)把二叉搜索树转换为累加树 一、(leetcode 669)修剪二叉搜索树 力扣题…

PHP基础语法(下)

目录 前言 一、流程控制语句 1.1 选择结构语句 1.1.1 if单分支语句 1.1.2 if…else语句 1.1.3 if…elseif…else语句 1.1.4 switch语句 1.2 循环结构语句 1.2.1 while循环语句 1.2.2 do…while循环语句 1.2.3 for循环语句 1.3 跳转语句 1.3.1 break语句 1.3.2 continue语句 1.4…

SpringBoot 请求参数校验

一.SpringBoot 使用validation数据校验之分组校验怎么玩?分组还有这么多讲究 - 第408篇 - 知乎 二.自定义注解枚举校验 1.aop注解 Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER…

RFID智能制造应用:助力企业提升制造效率!

随着企业间竞争加剧,如何提升企业生产效率,降低成本成为不少制造企业持续追求的目标。利用智能制造中的RFID设备,可以对企业入库、盘点、生产、出库等流程进行监控,本文将探讨智能制造中的RFID设备如何帮助企业提升制造效率&#…