Nginx之动静分离解读

news2024/11/27 14:52:12

目录

基本概念 

基本入门

location匹配顺序

补充:URLRewrite


基本概念 

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路 

优势:分担负载,减轻web服务器的压力,适用于大负载。静态资源放置cdn,同时还可以通过配置缓存到客户浏览器中,这样极大减轻web服务器的压力。

劣势:网络环境不佳时,ajax回应很慢,导致页面出现空白,出错处理会不好看。不利于网站SEO(搜索引擎优化),增加了开发复杂度。

动态资源:运用 Nginx 的反向代理功能分发请求:所有动态资源的请求交给应用服务器
静态资源:静态资源的请求(例如图片、视频、CSS 文件等)直接由 Nginx 返回到浏览器,这样能大大减轻应用服务器的压力

在企业开发中,为了理好的处理动态次源和提高服务器的响应速度,一般采用动态内容和静态内容进行分离。 

基本入门

例子:

  • 如果请求的资源地址是location//的优先级比较低,如果下面的location没匹配到,就会走http://xxx这个地址的机器

  • 如果请求的资源地址是location/css/*,就会被匹配到nginx的html目录下的css文件夹中(我们把css静态资源放在这个位置)

server {
        listen       80;
        server_name  localhost;
				
				location / { # /的优先级比较低,如果下面的location没匹配到,就会走http://xxx这个地址的机器
        		proxy_pass http://xxx;
        }
        
        location /css {  # root指的是html,location/css指的是root下的css,所以地址就是html/css
        		root html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

这里也可以使用正则表达式进行匹配

location ~*/(js|css|img){
	root html;
  index  index.html index.htm;
}

对于location/css/*location/js/*location/img/*的请求资源就可以进行匹配

常见的Nginx正则表达式  

  • ^ :匹配输入字符串的起始位置
  • $ :匹配输入字符串的结束位置
  • * :匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”
  • + :匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”
  • ? :匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,”?”等效于”{0,1}”
  • . :匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式
  • \ :将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$”
  • \d :匹配纯数字
  • {n} :重复 n 次
  • {n,} :重复 n 次或更多次
  • {n,m} :重复 n 到 m 次
  • [] :定义匹配的字符范围
  • [c] :匹配单个字符 c
  • [a-z] :匹配 a-z 小写字母的任意一个
  • [a-zA-Z0-9] :匹配所有大小写字母或数字
  • () :表达式的开始和结束位置
  • | :或运算符  //例(js|img|css)
     

location匹配顺序

  • 多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
  • 普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
  • 当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
  • 所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)

补充:URLRewrite

rewrite是实现URL重写的关键指令,根据regex (正则表达式)部分内容,重定向到replacement,结尾是flag标记。 

rewrite     <regex>     <replacement>     [flag];
关键字         正则       替代内容          flag标记

正则:perl兼容正则表达式语句进行规则匹配

替代内容:将正则匹配的内容替换成replacement

flag标记:rewrite支持的flag标记

rewrite参数的标签段位置: server,location,if

flag标记说明
last  #本条规则匹配完成后,继续向下匹配新的1ocation URI规则
break #本条规则匹配完成即终止,不再匹配后面的任何规则

redirect #返回302临重定向,游览器地址会显示跳转后的URL地址
permanent #返回301永久重定向,测览器地址栏会显示跳转后的URL地址

 浏览器地址栏访问 xxx/123.html实际上是访问xxx/index.jsp?pageNum=123

server {
        listen       80;
        server_name  localhost;
				
				location / { 
						rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1  break;
        		proxy_pass http://xxx;
        }
      

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

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

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

相关文章

2023八股每日一题(九月份)

9月13日 Q&#xff1a;JDK、JRE、JVM之间的区别 A&#xff1a; JDK(Java SE Development Kit)&#xff0c;Java标准开发包&#xff0c;它提供了编译、运⾏Java程序所需的各种⼯具和资源&#xff0c;包括Java编译器、Java运⾏时环境&#xff0c;以及常⽤的Java类库等JRE( Java…

jQuery入门学习

jQuery框架 jQuery是一个快速的、简洁的JavaScript框架&#xff08;库&#xff09;&#xff0c;它会封装很多JavaScript中常用的功能代码&#xff0c;提供了一个简洁的JS设计模式 优化HTML文档操作&#xff08;优化DOM操作&#xff09;事件处理动画设计Ajax 要使用JQ我们需要…

MySQL进阶_3.性能分析工具的使用

文章目录 第一节、数据库服务器的优化步骤第二节、查看系统性能参数第三节、 慢查询日志第四节、 查看 SQL 执行成本第五节、 分析查询语句&#xff1a;EXPLAIN 第一节、数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;可以按照以下流程进行分析。整个流程…

【Java每日一题】— —第十八题:求二维数组中的元素最小值及其索引。(2023.10.02)

&#x1f578;️Hollow&#xff0c;各位小伙伴&#xff0c;今天我们要做的是第十八题。 &#x1f3af;问题&#xff1a; 求二维数组中的元素最小值及其索引。 测试结果如下&#xff1a; &#x1f3af; 答案&#xff1a; int [][]anew int[3][];a[0]new int [3];a[1]new int[5…

【Leetcode】 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "23" 输出&…

如何在 Wio Terminal 上运行 RT-Thread 操作系统

Wio Terminal 是 Seeed Studio 设计的一款开发套件。它基于 SAMD51 的微控制器&#xff0c;运行速度为 120MHz&#xff08;最高可达 200MHz&#xff09;&#xff0c;拥有 4MB 外部闪存和 192KB RAM&#xff0c;具有 Realtek RTL8720DN 支持的无线连接&#xff0c;同时支持蓝牙和…

京东数据报告:2023年8月京东手机行业品牌销售排行榜

鲸参谋监测的京东平台8月份手机市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台的数据显示&#xff0c;8月份&#xff0c;京东平台手机的销售量为380万&#xff0c;环比下滑约7%。同比下滑约17%&#xff1b;销售总额为120亿&#xff0c;环比下滑约17%&#xff0c;…

开启赏车新体验 远航汽车即将亮相2023中国(天津)国际汽车展览会

2023年9月28日至10月4日&#xff0c;2023中国&#xff08;天津&#xff09;国际汽车展览会将在国家会展中心&#xff08;天津&#xff09;举行。本次车展预计展出总面积20万平方米&#xff0c;是本年度北方地区规模最大、品牌最齐全的国际顶级车展。远航汽车将携旗下多款车型亮…

c#设计模式-结构型模式 之 装饰者模式

&#x1f680;介绍 在装饰者模式中&#xff0c;装饰者类通常对原始类的功能进行增强或减弱。这种模式是在不必改变原始类的情况下&#xff0c;动态地扩展一个对象的功能。这种类型的设计模式属于结构型模式&#xff0c;因为这种模式涉及到两个类型之间的关系&#xff0c;这两个…

Java编程技巧:分类

1、表结构 字段名称字段类型字段解释idvarchar主键idnamevarchar分类名称sequenceint同级排序parentvarchar父级分类id&#xff0c;一级分类的父级分类id为0pathvarchar分类id路径&#xff0c;中间用英文逗号,分隔&#xff0c;方便使用find_in_set函数搜索namePathvarchar分类…

90、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Hash 相关命令

本次讲解要点&#xff1a; Hash 相关命令&#xff1a;是指value中的数据类型 启动redis服务器&#xff1a; 打开小黑窗&#xff1a; C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe red…

Linux系统下C语言实现百度网盘(附实现步骤,和全部代码讲解)

Linux系统下C语言实现百度网盘 Linux操作系统下用C语言写一个网盘完整代码&#xff1a;服务器客户端 Linux操作系统下用C语言写一个网盘 本次实验完成了完整的网盘功能&#xff08;查询文件&#xff0c;下载文件&#xff0c;上传文件&#xff0c;刷新界面&#xff0c;和退出系…

服务器流量只有1tb,害怕被刷怎办,这篇文章教你防止对方刷流量!

本篇文章主要讲解&#xff0c;服务器流量监控和关闭网络请求的方法教程&#xff0c;在某种情况下可以有效杜绝被刷流量的困扰。 日期&#xff1a;2023年10月2日 作者&#xff1a;任聪聪 根本有效避免刷流的前置办法 说明&#xff1a;只选择固定带宽&#xff0c;不限流量的服务器…

【Linux进行时】进程地址空间

进程地址空间 例子引入&#xff1a; 我们在讲C语言的时候&#xff0c;老师给大家画过这样的空间布局图&#xff0c;但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 #include<stdio.h> #include<assert.h> #include<unistd.h> int g_value100; …

【吞噬星空】连播两集,尼赫鲁对徐欣动手,罗峰修分身强势复仇

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析吞噬星空资讯。 吞噬星空动画第四季定档之后&#xff0c;官方真的是太宠粉了&#xff0c;每天都会公布全新预告情报&#xff0c;无论是外星人物角色&#xff0c;亦或者宇宙星球建模&#xff0c;那都是相当的炸裂。如今更…

《CTFshow-Web入门》10. Web 91~110

Web 入门 索引web91题解总结 web92题解总结 web93题解 web94题解 web95题解 web96题解 web97题解 web98题解 web99题解总结 web100题解 web101题解 web102题解 web103题解 web104题解 web105题解总结 web106题解 web107题解 web108题解 web109题解 web110题解 ctf - web入门 索…

怒刷LeetCode的第22天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;回溯算法 方法二&#xff1a;基于位运算的回溯 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;动态规划 方法二&#xff1a;分治法 方法三&#xff1a;前缀和数组 第三题 题目来源 题目内容…

通讯网关软件014——利用CommGate X2HTTP实现HTTP访问OPC Server

本文介绍利用CommGate X2HTTP实现HTTP访问OPC Server。CommGate X2HTTP是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;SCADA系统配置OPC Server&#xff0c;现在上位机需要通过Http Client…

Springboot+Vue+Mysql实现模拟汽车保养系统(附源码)

前言 本项目基于springbootvue搭建的汽车保养的系统&#xff0c;页面较为粗糙&#xff0c;前端好的小伙伴可自行优化。 项目环境 -环境框架后端JDK1.8SpringBootmybatisPlus前端NodeJS16.0Vue2.0ElementPlus数据库MySQL8.0- 数据库设计 数据表备注banner轮播图表car用户汽…

树的表示——孩子兄弟表示法

从图中可以看出&#xff0c;树的每个结点&#xff0c;都有不确定的指向他们的孩子的节点&#xff0c;如果我们定义这样一个结构体来便是数的结构的话&#xff1a; struct TreeNode { int val; struct TreeNodep1; struct TreeNodep1; … }; 是不能够表示一棵树的&#xff0c;因…