nginx学习记录-动静分离

1. 动静分离原理

我们在访问网站资源的时候,通常会将资源分成两种,一种是静态资源(前端的固定界面,比如图片,html页面等),这些资源无需后台程序处理;另一种是动态资源,这种资源通常需要后台服务器进行计算处理,再将计算结果返回给用户。由于静态资源是固定的,假设和动态资源放在同一台服务器上,那么用户每次访问静态资源的时候,都会将请求转发到应用服务器,大量占用应用服务器的资源。为了减少应用服务器的负载,采用了动静分离的方式来降低应用服务器的负载,如下图所示

所谓动静分离即将静态资源和动态资源放在不同的服务器上,静态资源放在nginx服务器上,动态资源放在应用服务器上。因为静态资源都是一些图片,固定的前端界面,因此可以由nginx服务器直接返回给用户,无需转发给后台的应用服务器,这样一来极大地降低了应用服务器的负载

2. 动静分离基本配置

这个配置很简单,就是增加一个location指向静态资源。举个例子,在html目录下新增一个static目录,将应用服务器的静态资源放static目录下即可

nginx的location匹配规则是从长到短,所以,nginx会优先匹配/static,匹配不到再匹配/,走代理转发。(如果静态资源存在多个目录,可以将location路径配置成正则匹配的形式,达到简化配置的效果)

总之,动静分离的逻辑很简单,就是将静态资源放在nginx服务器上,nginx配置好location后由nginx直接将静态资源返回给用户,非静态资源转发给应用服务器处理。

3. 一个简单例子

首先,写一串简单代码,搭建一个简单的服务,能够返回静态资源和动态资源,这段代码运行在我们的应用服务器上(实际场景静态资源和动态资源是有交互的,但是这里只是举个例子,所以没搞那么复杂)

const http = require('http');
const fs = require('fs');// 创建一个HTTP服务器
const server = http.createServer((req, res) => {// 处理静态资源请求console.log(req.url);if (req.url === '/static/static.html') {fs.readFile('static.html', (err, data) => {if (err) {res.writeHead(404, {'Content-Type': 'text/plain'});res.end('Not Found');} else {res.writeHead(200, {'Content-Type': 'text/html'});res.end(data);}});} else if (req.url === '/dynamic') {// 处理动态资源请求res.writeHead(200, {'Content-Type': 'text/plain'});res.end('This is a dynamic resource');} else {res.writeHead(404, {'Content-Type': 'text/plain'});res.end('Not Found');}
});// 监听端口
server.listen(8080, () => {console.log('Server running at http://localhost:8080/');
});

这里的静态资源就是一个static.html界面(内容自定义即可)

<!DOCTYPE html> <html> <head> <title>Simple HTML Page</title> </head> <body> <h1>Hello, World!</h1> <p>This is a simple HTML page.</p> </body> </html>

初始配置如下:

然后我们访问http://192.168.66.129/static/static.html就可以看到这个界面了

访问http://192.168.66.129/dynamic就可以看到动态资源了

然后,我们删除应用服务器上这个html界面,再取访问,会提示Not Found

此时,我们将这个资源放到nginx服务上,并修改配置如下:

增加了一个指向static目录下的location,static目录位于html目录下,里面有static.html文件,此时我们访问静态资源就可以成功访问了

动态资源还是不变,仍然由应用服务器返回

此时,静态资源是从nginx服务器返回的,不是从应用服务器返回的,也就是做到了动静分离。

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

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

相关文章

分布式调度器

xxl-job介绍 xxl-job 是一个轻量级分布式任务调度框架&#xff0c;支持动态添加、修改、删除定时任务&#xff0c;支持海量任务分片执行&#xff0c;支持任务执行日志在线查看和分页查询&#xff0c;同时支持任务失败告警和重试机制&#xff0c;支持分布式部署和高可用。xxl-j…

阿里云、腾讯云、华为云优惠券领取入口整理汇总

阿里云、腾讯云、华为云作为国内领先的云服务提供商&#xff0c;一直以其稳定、高效、安全的服务赢得了广大用户的青睐。为了回馈用户&#xff0c;这些云平台经常会推出各种优惠活动&#xff0c;其中最为常见的便是优惠券。本文将为大家整理汇总阿里云、腾讯云、华为云优惠券的…

linux-centos虚拟机设置固定ip

环境准备 虚拟机版本&#xff1a;centos7 安装环境&#xff1a;vmware17 1、设置网络连接 虚拟机-设置-网络适配器-NAT模式 2、查看子网信息 编辑-虚拟网络编辑器-NAT模式-NAT设置 查看子网ip和网关ip 下一步要用 3、修改配置文件 vim /etc/sysconfig/network-scripts…

构建数据平台架构指导原则与平台核心组件说明

文章目录 前言什么是数据架构&#xff1f;数据架构如何帮助构建数据平台&#xff1f;数据平台核心组件数据源系统数据加载数据存储数据处理和转换提供使用数据的方式公共服务 前言 湖仓一体是最近几年非常流行的现代大数据架构&#xff0c;目前它已经成为设计数据平台架构的首…

Flask框架初探-如何在本机发布一个web服务并通过requests访问自己发布的服务-简易入门版

Flask框架初探 在接触到网络框架之前我其实一直对一个事情有疑惑&#xff0c;跨语言的API在需要传参的情况下究竟应该如何调用&#xff0c;之前做过的项目里&#xff0c;我用python做了一个代码使用一个算法得到一个结果之后我应该怎么给到做前端的同学或者同事&#xff0c;之前…

基于springboot 的医院信管系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

SpringBoot新增菜品模块开发(事务管理+批量插入+主键回填)

需求分析与设计 一&#xff1a;产品原型 后台系统中可以管理菜品信息&#xff0c;通过 新增功能来添加一个新的菜品&#xff0c;在添加菜品时需要选择当前菜品所属的菜品分类&#xff0c;并且需要上传菜品图片。 新增菜品原型&#xff1a; 当填写完表单信息, 点击"保存…

【数据分析】AHP层次分析法

博主总结&#xff1a;根据每个方案x各准则因素权重累加结果 对比来选择目标。数据主观性强 简介 AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析结合起来&#xff0c;用决策者的经验判断各衡量目标之间能…

【数字人】AIGC技术引领数字人革命:从制作到应用到全景解析

AIGC技术引领虚拟数字人革命&#xff1a;从制作到应用的全景解析 一、AIGC技术为虚拟数字人注入智能灵魂二、AIGC型虚拟人制作流程实例分析1、采集数据2、建模3、内容生成 三、AIGC在虚拟数字人应用中的案例分析四、总结与展望 在科技的浪潮中&#xff0c;AIGC&#xff08;人工…

Ubuntu:VSCode中编译运行C++代码

版本&#xff1a;Ubuntu22.04.1 LTS 目录 1 安装VSCode并汉化 2 检查Ubuntu是否已经安装了 GCC 3 在VScode中安装C/C扩展 4 在VSCode中进行C/C配置 1 安装VSCode并汉化 安装VSCode&#xff08;参考之前博客Ubuntu&#xff1a;安装VSCode_ubuntu vscode-CSDN博客&#xff…

Linux sort/uniq/wc

文章目录 1. sort 排序将线程ID从大到小排序 2.uniq 临近去重3.wc word cnt 统计 1. sort 排序 将线程ID从大到小排序 grep -v是反向筛选&#xff0c;利用USER&#xff0c;排除掉首行 awk是打印第1 2列 sort -n是代码以数值大小做排序&#xff0c;不加的话会以字符排序。 -k是…

Gitee和Git学习笔记

Gitee和Git指令 Gitee提交代码方法1 先将仓库clone到本地&#xff0c;修改后再push到 Gitee 的仓库方法2 本地初始化一个仓库&#xff0c;设置远程仓库地址后再做push 切换分支下载代码通过git clone克隆仓库通过下载 ZIP 的方式下载代码 Git提交指令 解决本地库同时关联GitHub…

(C语言入门)复合类型、内存管理

目录 复合类型&#xff08;自定义类型&#xff09; 概述&#xff1a; 结构体变量的定义和初始化&#xff1a; 结构体成员的使用&#xff1a; 结构体做函数参数&#xff1a; 结构体值传参&#xff1a; 结构体地址传参&#xff1a; 共用体&#xff08;联合体&#xff09;&…

测试人员如何做好工作量评估和风险把控?

今天想聊一聊关于测试工作量评估及需求进度把控的内容。 我个人觉得有时候评估测试工作量其实也挺难的&#xff0c;比如有的需求没有需求文档&#xff0c;只能靠自己对需求的理解去大概评估&#xff0c;有可能评估的工作量比实际需要的工作量会少点&#xff0c;对于每周进行迭…

【Index to Lectures or Courses】

文章目录 1 Speech / Course2 Material3 Basic knowledge and tools4 职位缩写你知道几个? 1 Speech / Course 《中国文化文概论》&#xff08;武汉大学&#xff09;【Paper material】【阅读笔记】【Reading Notes】&#xff08;1&#xff09;【Reading Notes】&#xff08;…

Mybatis-plus中的分页操作

Mybatis-plus中的分页操作 1.导入Mybatis-plus依赖2.创建mybatis配置类3.参数 1.导入Mybatis-plus依赖 因为是一个springboot项目&#xff0c;其中的pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns&q…

用于时空交通数据插补的多注意张量完成网络

用于时空交通数据插补的多注意张量完成网络 摘要:道路传感器在物联网(IoT)中的广泛部署可以实现细粒度的数据集成,这是数据驱动应用程序的基本需求。 由于网络通信不稳定、传感器故障等,不可避免地丢失和实质性异常的传感数据是不可避免的。最近的张量补全研究通过精确捕获…

提高 RAG 应用准确度,时下流行的 Reranker 了解一下?

检索增强生成&#xff08;RAG&#xff09;是一种新兴的 AI 技术栈&#xff0c;通过为大型语言模型&#xff08;LLM&#xff09;提供额外的“最新知识”来增强其能力。 基本的 RAG 应用包括四个关键技术组成部分&#xff1a; Embedding 模型&#xff1a;用于将外部文档和用户查询…

DDoS攻击类型与应对措施详解

攻击与防御简介 SYN Flood攻击 原理&#xff1a; SYN Flood攻击利用的是TCP协议的三次握手机制。在正常的TCP连接建立过程中&#xff0c;客户端发送一个SYN&#xff08;同步序列编号&#xff09;报文给服务器&#xff0c;服务器回应一个SYN-ACK&#xff08;同步和确认&#xf…

【HormonyOS4+NEXT】TypeScript基础语法详解

&#x1f64b;‍ 一日之际在于晨 ⭐本期内容&#xff1a;TypeScript基础语法详解 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS4NEXT&#xff1a;探索未来智能生态新纪元 文章目录 前言变量与类型函数类与接口类&#xff08;Class&#xff09;接口&#xff08;Interface&am…