当前位置: 首页 > news >正文

Nginx 教程-动静分离

一、Nginx 动静分离理论

1、概念

今天学习和梳理Nginx动静分离,动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,之所以要进行动静分离,其一为了提高前端的响应速度,其二就是为了将动态请求和静态请求进行分别部署,后端各个服务各司其职,提高处理性能。这里的“动静分离”,看似是动态资源和静态资源的分离,也可以看成是静态请求和动态请求的分离。即使用Nginx将静态请求和动态请求分开,使用Nginx处理静态页面,后端服务处理动态请求。

2、实现方案

目前动静分离的实现分为两种。第一种就是单独将静态资源单独部署,即有独立的域名存放。第二种就静态资源和动态资源混和部署通过Nginx来区分。当然业界主流的方式就是第一种,今天咱们就通过模拟这种方式感受一些动静分离的实现。静态资源部署当然也有很多方式,比如Nginx当作资源服务器,Node、CDN都可以作为静态资源费服务器。今天就使用Nginx作为静态资源服务器实验。

3、好处

api接口服务化:动静分离之后,后端应用更为服务化,只需要通过提供api接口即可,可以为多个功能模块甚至是多个平台的功能使用,接口职责更加单一,更便于功能维护。

前后端开发并行:前后端只需要关心接口协议,各自的开发相互不干扰,并行开发,并行自测,可以有效的提高开发时间,也可以有些的减少联调时间。

减轻后端服务压力,提高静态资源访问效率:通过动态页面和静态请求交给不同的服务器来解析,达到加快解析速度,提高请求访问频率,降低单位服务器的压力。

下面就是Nginx动静分离的示意图。

二、Nginx 动静分离实战

1、环境准备

1、因为我这边一直使用的 mac 和 docker 所以今天的实践就是使用docker 容器进行。

2、之前咱们讲到的使用docker挂载,当然这次也是使用挂载技术,有同学没有掌握的可以看这篇文章《docker 挂载、修改文件》传送门

2、Nginx启动

咱们本次使用Nginx作为静态之源服务器,所以在Nginx容器内创建一个data的目录放置静态资源。还是使用docker的挂载技术。

  • --restart=always: 异常关闭后重新尝试启动

  • 8088:80 制定服务8088端口映射ng的80端口

  • -v /Users/liluyang/docker/volumes/nginxVolume/data/image:/nginx/data/image 挂在容器的/nginx/data/image目录到本地的/Users/liluyang/docker/volumes/nginxVolume/data/image下,剩余的类似。

容器启动之后进入容器即可看到创建在容器中的目录(自动创建哦)。

docker run -dit --restart=always --name=nginx -p 8088:80 
-v /Users/liluyang/docker/volumes/nginxVolume/data/image:/nginx/data/image 
-v /Users/liluyang/docker/volumes/nginxVolume/data/html:/nginx/data/html 
-v /Users/liluyang/docker/volumes/nginxVolume/index:/usr/share/nginx/html 
-v /Users/liluyang/docker/volumes/nginxVolume/config/nginx.conf:/etc/nginx/nginx.conf 
-v /Users/liluyang/docker/volumes/nginxVolume/config/default.conf:/etc/nginx/conf.d/default.conf 
nginx:latest

3、挂在文件修改

在配置文件里咱们创建三个 location 模块,分别路由图片,html、反响代理后端请求。达到将静态资源(图片和html资源)和动态资源(后端服务的请求)分离的目的。最后分别是请求图片,html文件,后端服务的实验结果图。大家配置完毕之后可以尝试感受。

    # ######## 动静分离开始 ######### 匹配图片location ~ .*\.(gif|jpg|pdf|jpeg|png)$ {expires    8h;root   /nginx/data/image;}# 匹配html文件location ~ .*\.(html)$ {root   /nginx/data/html;}# 拦截后台请求,正则匹配 api 路径location ~* ^/(lb) {# 配置代理地址proxy_pass http://myserver;}# ######## 动静分离结束 ########

4、动静分离验证

Nginx动静分离:图片资源实践

Nginx动静分离:html资源实践Nginx

Nginx动静分离:动态资源实践

三、最后

最后一个小参数大家可能没有注意:"expires 8h;",通过 location指定不同的后缀名实现不同的请求转发。通过 expires参数设置,可以使浏 览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires定义:是给一个资源 设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件, 不建议使用 Expires 来缓存),我这里设置8h,表示在这 8小时内之内访问这个URL,发送一 个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304, 如果有修改,则直接从服务器重新下载,返回状态码 200。

这里就引申出前端的另一个重要的概念就是缓存,缓存也是大有门道,大致分为“强制缓存”和“协议缓存”,缓存有分别存储在memary cache 和 disk cache,即“磁盘缓存”和“内存缓存”,这个在后面有机会的时候在聊聊。都是为了加速而采取的一些主要措施。

还有个概念就是缓存有有效性的判断是基于 Etag和Last-modified。Etag就是操作系统给文件生成的一个Hash值,Last-modified就是对文件的最后修改时间。

都是机遇以上各种结束的合理使用,才使得那么多炫酷的多媒体很快的呈现在一个页面上。

四、彩蛋

“Nginx动静分离:html资源实践Nginx” 这个部分的设计是一个跳动的心形动图,大家可以直接copy代码过去玩。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><meta name="Keywords" content="关键字,关键词"><meta name="Description" content="描述和简介"><title>Title</title><style type="text/css">*{margin:0;padding:0;}body,ul,li,ol,dl,dd,p,h1,h2,h3,h4,h5,h6{ margin:0;}a{text-decoration:none;color: inherit;}img{display: block;border:none;}ol,ul{list-style:none;}.clearfix:after {content: "";display: block;clear: both;}.fl{ float: left;}.fr{ float: right;}html{height: 100%;background: -webkit-radial-gradient(center,#153170,#000);}.heart{ position: relative; width: 300px; height: 300px; margin: 200px auto;transform: rotate(45deg);animation: move 2s infinite alternate ;}.heart div{ position: absolute; width: 200px; height: 200px; background: red;}.heart .middle{ right: 0; bottom: 0; width: 200px; height: 200px;}.heart .left{ left: 0; bottom: 0; border-radius: 50%;}.heart .right{ top: 0; right: 0;border-radius: 50%;}.heart p{ width: 200px; height: 30px; font: bold 25px/30px "";text-align:center; color: #fff;}.heart p{ position: absolute; right: 0; bottom: 85px; transform: rotate(-45deg);}@-webkit-keyframes move{10%{ transform: rotate(45deg) scale(1.1); text-shadow: 0 0 5px #fff; }20%{ transform: rotate(45deg) scale(1.2); text-shadow: 0 0 5px #fff; }30%{ transform: rotate(45deg) scale(1.3); text-shadow: 0 0 5px #fff; }40%{ transform: rotate(45deg) scale(1.2); text-shadow: 0 0 5px #fff; }50%{ transform: rotate(45deg) scale(1.3); text-shadow: 0 0 5px #fff; }60%{ transform: rotate(45deg) scale(1.2); text-shadow: 0 0 5px #fff; }70%{ transform: rotate(45deg) scale(1.3); text-shadow: 0 0 5px #fff; }80%{ transform: rotate(45deg) scale(1.2); text-shadow: 0 0 10px #fff;}90%{ transform: rotate(45deg) scale(1.1); text-shadow: 0 0 5px #fff; }}</style>
</head>
<body><div class="heart"><div class="left"></div><div class="middle"></div><div class="right"></div><p>I Love You</p></div>
</body>
</html>

相关文章:

Nginx 教程-动静分离

一、Nginx 动静分离理论1、概念今天学习和梳理Nginx动静分离&#xff0c;动静分离是将网站静态资源&#xff08;HTML&#xff0c;JavaScript&#xff0c;CSS&#xff0c;img等文件&#xff09;与后台应用分开部署&#xff0c;之所以要进行动静分离&#xff0c;其一为了提高前端…...

自己设计的网站,如何实现分页功能?(详细代码+注释)

目录 前言 实现分页功能 需求分析 客户端开发 服务器开发 前后端交互——两种前端得到 文章总页数 的方法&#xff0c;那种更合适&#xff1f; 前言 你在设计网站的时候是否有过这样的烦恼&#xff1a;“我设计的网站怎么就是从上到下一条线内容全部展开&#xff0c;一点都…...

STM32F407控制微型推拉式电磁铁(通过继电器)

1、继电器 继电器相当于开关&#xff0c;单片机通过io口高低电平的控制来控制继电器的开闭。采用继电器的好处除了能够用低电压控制高电压&#xff08;如32单片机控制220V的电压&#xff09;外&#xff0c;还可以防止电流反冲&#xff0c;弄烧单片机。 本文采用3.3v的电磁铁&am…...

VS Code工作区用法

背景VS Code可以通过"文件/打开文件夹"来打开本地项目&#xff0c;但是想要打开多个项目便需要来回切换&#xff0c;比较费劲。此时就可以使用工作区功能&#xff0c;将不同的项目放置到同一个工作区中&#xff0c;这样切换项目的时候就会非常方便。操作方法打开其中…...

Mybatis-Plus SQLFeatureNotSupportedException: getObject with type问题解决

问题描述&#xff1a; Error attempting to get column modify_time from result set. Cause: java.sql.SQLFeatureNotSupportedException: getObject with type ; getObject with type; nested exception is java.sql.SQLFeatureNotSupportedException: getObject with type…...

Unity | 发布Android的那些事儿

1.使用UnityWebRequest获取StreamingAssets中的json文件&#xff08;1&#xff09;直接根据不同平台指定url路径IEnumerator AITalPredZhanHui(){string url;string fileName "girl.json"; #if UNITY_EDITOR || UNITY_STANDALONEurl "file://" Applicat…...

git为什么要先commit,然后pull,最后再push?而不是commit完直接push?

情况是这样的&#xff0c;现在远程有一个仓库&#xff0c;分支就一个&#xff0c;是master。然后我本地的仓库是从远程的master上clone下来的。大家都是clone下来&#xff0c;再在自己本地改好&#xff0c;再commit然后pull然后push&#xff0c;大家都是这么做的。那么现在问题…...

若依框架----源码分析(@RateLimiter)

若依作为最近非常火的脚手架&#xff0c;分析它的源码&#xff0c;不仅可以更好的使用它&#xff0c;在出错时及时定位&#xff0c;也可以在需要个性化功能时轻车熟路的修改它以满足我们自己的需求&#xff0c;同时也可以学习人家解决问题的思路&#xff0c;提升自己的技术水平…...

页面的重排和重绘?

思路&#xff1a; 网页渲染HTML文件到浏览器的过程->定义->如何优化网页渲染HTML文件到浏览器的过程HTML 文件通过HTML解析器解析生成DOM树&#xff1b;CSS文件通过CSS解析器生成CSSOM树&#xff1b;DOM树和CSSOM树生成渲染树&#xff08;render tree&#xff09;&#x…...

人脸检测-python和c++实现

人脸检测是计算机视觉领域中的一个重要应用,其目的是从图像或视频中自动检测出其中的人脸,并对其进行识别、跟踪等操作。人脸检测技术已经广泛应用于安防、人机交互、娱乐等领域,具有广泛的应用前景。 人脸检测的基本思路可以分为以下几个步骤: 图像预处理:首先需要对输入…...

PowerJob源码环境搭建

一、IEDA导入PowerJob源码 gitgithub.com:PowerJob/PowerJob.gitPowerJob 由调度服务器&#xff08;powerjob-server&#xff09;和执行器&#xff08;powerjob-worker&#xff09;两部分组成 powerjob-server 负责提供 Web 服务和完成任务的调度powerjob-worker 则负责执行用…...

天梯赛刷题小记 —— L2

最近在重刷 天梯赛&#xff0c;浅浅记录一下&#xff0c;进入L2阶段了 L2-001 紧急救援 解题思路&#xff1a;典型的dijkstra模板题&#xff0c;带路径记录与权重&#xff0c;方案数记录&#xff0c;解析出过 Dijkstra(兼路径) #include <bits/stdc.h> #define inf…...

Prometheus监控实战系列十九:监控Kubernetes集群(上)

Kuberentes是一款开源的容器编排产品&#xff0c;由Google开发后发布到社区&#xff0c;并在2015年将该项目捐献给了云原生基金会&#xff08;Cloud Native Computing Foundation&#xff09;。从2014年第一个版本发布以来&#xff0c;Kubernetes便迅速获得开源社区的追捧&…...

番茄学习法——亲测超级好用

今天给大家分享下我最近使用的学习方法&#xff0c;真的非常好用&#xff01;大家用起来&#xff01; 在日常的学习和工作中&#xff0c;我们经常会遇到一些难以克服的问题&#xff1a;分心、效率低下、焦虑等。为了帮助人们更好地学习和工作&#xff0c;一些学习方法和工具应运…...

vue 项目中使用高德地图

一、账号准备 首先&#xff0c;需要注册并登录高德地图开放平台&#xff0c;申请密钥。操作指引&#xff1a;高德地图开放平台 二、安装高德地图加载器 npm 安装&#xff1a; npm i amap/amap-jsapi-loader --save或者 yarn 安装&#xff1a; yarn add amap/amap-jsapi-loa…...

【每日一题】病人排队

题目描述小理是个热爱生活的孩子。病人登记看病&#xff0c;小理想编写一个程序&#xff0c;将登记的病人按照以下原则排出看病的先后顺序&#xff1a;1. 老年人&#xff08;年龄 ≥≥ 60岁&#xff09;比非老年人优先看病。2. 老年人按年龄从大到小的顺序看病&#xff0c;年龄…...

【数据结构】链表OJ题

目录面试题 02.04 分割链表剑指 Offer II 027 回文链表160 相交链表141 环形链表142 环形链表 II138 复制带随机指针的链表面试题 02.04 分割链表 定义lesshead和greaterhead链接小于和大于等于k的值分别设置哨兵位和尾节点指针最后将两表去除哨兵位再链接 struct ListNode* p…...

冒泡 VS 插入 VS 选择——谁更胜一筹?(附排序源码)

文章目录什么样的“排序算法”更加优质&#xff1f;排序算法的执行效率排序算法的内存消耗排序算法的稳定性冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;最终的胜利者&#x1f…...

[python tools] 今天看到另一个配置工具 YACS,所以做下笔记

YACS 实际上就只是把别人的readme翻译了一下 github: https://github.com/rbgirshick/yacs 样例代码: https://github.com/Wuziyi616/multi_part_assembly/blob/master/docs/config.md 一、使用方法 1. 首先搞一个config的python文件&#xff0c;用来存一下基本的配置信息 比…...

Prometheus cadvisor容器监控和node-exporter节点监控

往期文章 Prometheus监控系统 https://blog.csdn.net/qq_39578545/article/details/108754585 Docker之compose介绍 使用一个Dockerfile模板文件可以定义一个单独的应用容器&#xff0c;如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品&#xff0c;Docker Comp…...

机器学习|正则化|评估方法|分类模型性能评价指标|吴恩达学习笔记

前文回顾&#xff1a;逻辑回归 目录 &#x1f4da;正则化 &#x1f407;过拟合的问题 &#x1f407;代价函数 &#x1f407;正则化线性回归 &#x1f407;正则化的逻辑回归模型 &#x1f4da;模型评估方法 &#x1f407;留出法&#xff08;hold-out&#xff09; &#…...

python迭代器详解

不懂的问题&#xff1a;什么是协变、逆变&#xff1f;渐进式&#xff1f; _T_co TypeVar("_T_co", covariantTrue) # Any type covariant containers.作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&…...

关于Docker逃逸

关于Docker逃逸 文章目录关于Docker逃逸前言一、判断是否为docker容器&#xff1f;二、privileged特权模式启动容器逃逸三、 Docker Remote API未授权访问逃逸四、危险挂载导致Docker逃逸五、危险挂载Docker Socket逃逸六、 挂载宿主机procfs逃逸七、脏牛漏洞来进行docker逃逸八…...

@Autowired和@Resource区别

Autowired和Resource到底有什么区别 Autowired 和 Resource 都是用来实现依赖注入的注解&#xff08;在 Spring/Spring Boot 项目中&#xff09;&#xff0c;但二者却有着 5 点不同&#xff1a; 来源不同&#xff1a;Autowired 来自 Spring 框架&#xff0c;而 Resource 来自…...

动态内存管理详细讲解

目录 1.为什么存在动态内存分配 2. 动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 今天要和大家分享的内容是的动态内存管理&#xff0c;我们先从他的定义入手学习。 1.为什么存在动态内存分配 我们到现在已经掌握了内存开辟的方式就是要么创建一个变量…...

Python和Excel的完美结合:常用操作汇总(案例详析)

在以前&#xff0c;商业分析对应的英文单词是Business Analysis&#xff0c;大家用的分析工具是Excel&#xff0c;后来数据量大了&#xff0c;Excel应付不过来了&#xff08;Excel最大支持行数为1048576行&#xff09;&#xff0c;人们开始转向python和R这样的分析工具了&#…...

卡特兰数、斯特林数基础

卡特兰数 从格点(0,0)(0,0)(0,0)走到格点(n,n)(n,n)(n,n)&#xff0c;只能向右或向上走&#xff0c;不能穿过对角线&#xff0c;的路径的条数&#xff0c;称为卡特兰数HnH_nHn​。 则有H01H_01H0​1。 通项公式&#xff1a; Hn(2nn)−(2nn−1)H_n\begin{pmatrix} 2n\\ n \en…...

STL——mapmultimap和setmultiset

一、关联式容器 与序列式容器相同&#xff0c;关联式容器也是用于存储数据的&#xff0c;不同的是&#xff0c;关联式容器里存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式容器效率更高。 二、键值对 用来表示具有一一对应的一种结构&#xff0c;该…...

2023热门抖音权重查询小程序源码

2023热门抖音权重查询小程序源码 跟抖音上很火的一模一样&#xff0c;小程序适配优化。接口免费。小程序不是网页 修改教程: 1&#xff0c;如果想修改或者去除水印&#xff0c;直接删除或修改“index.html”12&#xff5e;22行 2&#xff0c;如果想修改logo&#xff0c;直接…...

153.网络安全渗透测试—[Cobalt Strike系列]—[生成hta/exe/宏后门]

我认为&#xff0c;无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感&#xff01;&#xff01;&#xff01; 文章目录一、后门简介1、hta后门2、exe后门3、宏病毒后门二、生成后门并测试0、测试环境1、生成hta后门并测试2、生成exe后门并测试3、生成宏病毒后门…...

政府网站 banner 源码/附近的电脑培训班在哪里

继承 继承是什么&#xff1f; 继承是c的三大特性之一继承。 那么继承有什么作用&#xff1f; 继承可以提高我们代码的复用性。既然是复用&#xff0c;简单来说就是重复利用。 再举一个重复利用的例子ctrlc&#xff0c;ctrlv&#xff0c;也是重复利用&#xff0c;其实复用你…...

wordpress做直播网站吗/广告网络推广怎么做

#如果node加入不了master或者加入成功但是&#xff0c;在master中显示不出来。排查错误:1. 运行&#xff0c;kubelet, 查看日志&#xff0c;一般是kubelet的运行和docker启动方式不匹配。调整&#xff1a;vim /etc/docker/daemon.json修改&#xff1a;native.cgroupdrivercgro…...

建盏产业品牌/百度seo排名优化排行

刚接触mongodb不久。踩到许多坑&#xff0c;记录下一些基于spring-data-mongodb的东西吧 首先。应该了解下什么情况下使用mongodb&#xff0c;什么情况下用mysql&#xff1a; 业务需要事物&#xff0c;使用mysql&#xff0c;因为mongodb不支持事物数据量大&#xff0c;但是数据…...

中国人做英文网站/百度站长工具域名查询

定时任务 robfig/cron go get github.com/robfig/cron/v3v3.0.0https://github.com/robfig/cron https://godoc.org/github.com/robfig/cron 注意&#xff1a;v3开始执行策略为5个参数&#xff0c;不是6个&#xff0c;实际上秒级的定时任务也没有存在的意义。 robfig/cron 是…...

武汉定制公交网站/百度竞价推广屏蔽软件

Golang1.18新特性 golang1.18已经发布一年多了&#xff0c;目前最新的版本是1.19&#xff0c;但作为生产&#xff0c;需保持谨慎态度&#xff0c;目前把项目的版本从1.16升级到了1.18&#xff0c;同时针对1.1.8的新特性做了一下记录&#xff0c;当然1.1.8更新了不少内容&#…...

优质做网站公司/bt磁力搜索引擎

在bitbucket上使用https协议&#xff0c;经常会在提交代码的时候出错&#xff0c;让人很着急上火&#xff0c;但是用ssh就要方便很多。下面介绍一下设置ssh的方法&#xff1a;1.在终端中运行ssh-keygen。2.然后一路enter&#xff0c;直接到结束。不要理会中间的输入。3 打开用户…...