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

C++ 网络编程项目fastDFS分布式文件系统(九)总结

1. Location语法

1. 语法规则

        

location [= |~|~ * |^~ ] /uri/
{
}
正则表达式中的特殊字符 :
- . () {} [] * + ?
2. Location 优先级说明
nginx location 和配置中 location 的顺序没有太大关系。
location 表达式的类型有关。
相同类型的表达式,字符串长的会优先匹配

 

3. location 表达式类型
~ 表示执行一个正则匹配,区分大小写
~* 表示执行一个正则匹配,不区分大小写
^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他 location
= 进行普通字符精确匹配。也就是完全匹配
4. 匹配模式及优先级顺序 ( -> ):

 

客户端 : http ://localhost/helloworld/test/a. html
客户端 : http ://localhost/helloworld/test/
/helloworld/test/a. html
/helloworld/test/
location /
{
}
location /helloworld/
{
}
location /helloworld/test/
{
}
location =/helloworld/test/
{
root xxx;
}
http ://localhost/helloworld/test/a. html
location ^~ /helloworld/test/
{
}
location ^~ /login/
{
}
http ://localhost/helloworld/test/a. JPG
location ~ * \ .[ jpg|png ]
{
}
http ://192.168.1.100/login/hello/world/login. html
/login/hello/world/login. html
location /
{
}
location /login/
{
}
location /login/hello/
{
}
location /login/hello/world/
{
}
location ~ /group[ 1-9 ]/M0[ 0-9 ]
{
}

练习: 

 

匹配示例 :
/ -> configuration
/index.html -> configuration
/documents/document.html -> configuration C
/documents/
/
/images/1.gif -> configuration D
/images/
/
/documents/1.jpg -> configuration E

2. 项目总结

         

 

1. 客户端
        Qt
        了解了Qt http 通信
2. nginx 反向代理服务器
        为web 服务器服务
                web服务器需要集群
3. web 服务器 - nginx
        处理静态请求 - > 访问服务器文件
        动态请求 -> 客户端给服务器提交的数据
        借助fastCGI 进行处理
        讲的是单线程处理方式 - API
                也可以多线程处理 -> 另外的 API
                使用spawn-fcgi启动
4. mysql
        关系型数据库 - 服务器端
        存储什么?
                项目中所有用到的数据
5. redis
非关系型数据库 - 服务器端使用
        数据默认在内存, 不需要 sql 语句 , 不需要数据库表
                键值对存储, 操作数据使用的是命令
                和关系型数据库配合使用
                存储服务器端经常访问的数据
6. fastDFS
分布式文件系统
        追踪器, 存储节点 , 客户端
                存储节点的集群
                横向扩容 -> 增加容量
                添加新组, 将新主机放到该组中
                纵向扩容 -> 备份
                将主机放到已经存在的组中
                存储用户上传的所有的文件
                给用户提供下载服务器

3. 项目提炼

1. 做的是文件服务器
                电商网站
                旅游网站
                租房
                装修公司
                医院
                短视频网站
2. 需要什么 ?
        首先需要的是fastDFS
        配置环境
        扩容
        操作fastDFS - 客户端
        web
        桌面终端 - Qt
数据库操作
        mysql
        oralce
有一个web 服务器 - Nginx
        静态资源部署
        动态请求 - 编写 fastCGI 程序
                注册
                登录
                上传
                下载
                秒传
                文件列表的获取
redis
存储服务器访问比较频繁的数据

4. 存储节点反向代理

http://192.168.31.109:80/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3As g3Z0782.mp4"
http://192.168.31.109:80/group2/M00/00/00/wKgfbViy2Z2AJ-FTAaM3As g3Z0782.mp4"

 

上图的反向代理服务器代理的是每个存储节点上部署的 Nginx
- 每个存储节点上的 Nginx 的职责 : 解析用户的 http 请求 , 帮助用户快速下载文件
客户端上传了一个文件 , 被存储到了 fastDFS , 得到一个文件 ID
/group1/M00/00/00/ wKgfbViy2Z2AJ-FTAaM3Asg3Z0782 . mp4"
因为存储节点有若干个 , 所有下载的时候不知道对应的存储节点的访问地址
给存储节点上的 nginx web 服务器添加反向代理服务器之后 , 下载的访问地址 :
- 只需要知道 nginx 反向代理服务器的地址就可以了 : 192.168.31. 109
- 访问的 url :
http ://192.168.31.109/group1/M00/00/00/ wKgfbViy2Z2AJ-FTAaM3Asg3Z0782 . mp4
客户端的请求发送给了 nginx 反向代理服务器
- 反向代理服务器不处理请求 , 只转发 , 转发给存储节点上的 nginx 服务器
反向代理服务器的配置 - nginx. conf
- 找出处理指令 : 去掉协议 , iP/ 域名 , 末尾文件名 , ? 和后边的字符串
- /group1/M00/00/00/ - 完整的处理指令
- 添加 location
server {
location /group1/ M00
{
# 数据转发 , 设置转发地址
proxy_pass http ://test.com;
}
location /group2/ M00
{
# 数据转发 , 设置转发地址
proxy_pass http ://test1.com;
}
}
upstream test. com
{
# fastDFS 存储节点的地址 , 因为存储节点上安装了 nginx, 安装的 nginx 作为 web 服务器的角色
server 192.168.31.100;
server 192.168.31.101;
server 192.168.31.102;
}
upstream test1. com
{
# fastDFS 存储节点的地址 , 因为存储节点上安装了 nginx, 安装的 nginx 作为 web 服务器的角色
server 192.168.32.100;
server 192.168.33.101;
server 192.168.34.102;
}
# ===================================
存储节点上的 web 服务器的配置
存储节点 1
location /group1/ M00
{
# 请求处理
root 请求的资源的根目录 ; // 存储节点的 store_path0 对应的路径 + data
ngx_fastdfs_module;
}
location /group1/ M01
{
# 请求处理
root 请求的资源的根目录 ;
ngx_fastdfs_module;
}
存储节点 2
location /group2/ M00
{
# 请求处理
root 请求的资源的根目录 ;
ngx_fastdfs_module;
}
location /group2/ M01
{
# 请求处理
root 请求的资源的根目录 ;
ngx_fastdfs_module;
}
存储节点 3
location /group3/ M00
{
# 请求处理
root 请求的资源的根目录 ;
ngx_fastdfs_module;
}
location /group3/ M01
{
# 请求处理
root 请求的资源的根目录 ;
ngx_fastdfs_module;
}

5. https

         

 

1. 在百度服务器端首先生成一个秘钥对 -> 对公钥分发
2. 百度将公钥给到了 CA 认证机构 , ca 对私钥进行签名 -> 生成了证书 .
3. 第一步第二部只做一次
4. 客户端访问百度 , 百度将 ca 生成的证书发送给客户端
5. 浏览器对收到的证书进行认证
6. 如果证书没有问题 -> 使用 ca 的公钥将服务器的公钥从证书中取出
7. 我们得到了百度的公钥
8. 在浏览器端生成一个随机数 , 使用得到的公钥进行加密 , 发送给服务器
9. 服务器端使用私钥解密 , 得到了随机数 , 这个随机数就是对称加密的秘钥
10. 现在秘钥分发已经完成 , 后边的通信使用的的对称加密的方式
1. 对称加密
加解密秘钥是同一个
2. 非对称加密
公钥 , 私钥
rsa -> 公钥私钥都是两个数字
ecc -> 椭圆曲线 , 两个点
公钥加密 , 私钥解密
数据传输的时候使用
私钥加密 , 公钥解密
数字签名
3. 哈希函数
md5/ sha1/sha2
得到散列值 , 散列值是定长的
4. 消息认证码
生成消息认证码 : ( 将原始数据 + 共享秘钥 ) * 进行哈希运算 = 散列值
验证消息认证码 :
( 接收的原始数据 + 共享秘钥 ) * 哈希运算 = 新的散列值
新散列值和旧散列值进行比较 , 看是不是相同
作用 :
验证数据的一致性型
弊端 :
两端共享秘钥必须相同 , 共享秘钥分发困难
5. 数字签名 -> 目的告诉所有人这个数据的所有者是 xxx, xxx 就是拿私钥的人
生成一个非对称加密的密钥对
公钥
私钥
生成签名 :
对原始数据进行哈希运算 -> 散列值
使用非对称加密的私钥 , 对散列值进行签名 ( 私钥加密 ) -> 密文
得到的密文就是数字签名
签名的校验 :
校验这会收到签名者发送的数据
原始数据
数字签名
对接收的数据进行哈希运算 -> 散列值
使用非对称加密的公钥 , 对数字签名进行解密 -> 明文 == 签名者生成的散列值
校验者的散列值 和 签名者的散列值进行比较
相同 -> 校验成功了 , 数据属于签名的人
失败 -> 数据不属于签名的人
弊端 :
接收公钥的人没有办法校验公钥的所有者。

6. 证书
由一个受信赖的机构 (CA) 对某人的公钥进行数字签名
CA 有一个密钥对
使用 ca 的私钥对某个人的公钥进行加密 -> 证书
这个人 的公钥
这个人的个人信息

 

相关文章:

C++ 网络编程项目fastDFS分布式文件系统(九)总结

1. Location语法 1. 语法规则 location [ |~|~ * |^~ ] /uri/ { … } 正则表达式中的特殊字符 : - . () {} [] * ? 2. Location 优先级说明 在 nginx 的 location 和配置中 location 的顺序没有太大关系。 与 location 表达式的类型有关。 相同类型的表达式&a…...

第五章 树与二叉树 一、树的定义与考点

一、定义 1.树是由n (n > 0) 个节点组成的有限集合。 2.当n0时,称为空树。 3.在非空树中,有且仅有一个节点没有前驱,其他节点都有且仅有一个前驱,称为根节点。 4.每个节点有零个或多个子节点,而每个子节点又有零…...

C语言基础之——指针(下)

前言:本篇文章将继续讲解有关指针的剩余基础知识。 学无止境,一起加油叭!! 目录 一.指针运算 1.指针 - 整数 2.指针的关系运算 3.指针 - 指针 二.指针与数组 三.二级指针 四.指针数组 总结 一.指针运算 指针运算包括以下三…...

小研究 - JVM 的类装载机制

本文通过对一个类装载实例的分析,阐明了 Java虚拟机的类装载的代理机制和由此定义的命名空间,指出了类装载机制在容器/组件/抽象框架结构中的作用。 目录 1 引言 2 实例 3 分析 3.1 类装载的代理机制 3.2 Java的命名空间 3.3 解决问题 4 应…...

项目---日志系统

目录 项目系统开发环境核心技术日志系统介绍为什么需要日志系统? 日志系统框架设计日志系统模块划分代码实现通用工具实现日志等级模块实现日志消息模块实现格式化模块实现落地模块实现日志器模块同步日志器异步日志器缓冲区实现异步工作器实现 回归异步日志器模块建造者模式日…...

设计模式--建造者模式(Builder Pattern)

一、什么是建造者模式 建造者模式(Builder Pattern)是一种创建型设计模式,它关注如何按照一定的步骤和规则创建复杂对象。建造者模式的主要目的是将一个复杂对象的构建过程与其表示分离,从而使同样的构建过程可以创建不同的表示。…...

若依vue打印的简单方法

像我们后端程序员做前端的话,有时候真不需要知道什么原理,直接塞就好了 我们选用基于hiprint 的vue-plugin-hiprint来打印 目的是为了实现点击某些行的数据,然后点击某个按钮直接弹出下面的打印 此链接 大佬是原创,我拿来总结梳理一下 插件进阶功能请移步: 链接 插件模板制作页…...

Rust 基础语法学习

Rust 基础语法学习 文章目录 Rust 基础语法学习hello world变量数据类型整数类型进制表示方法浮点数类型布尔类型字符类型字符串复合类型元组结构体元组结构体 切片类型字符串切片数组切片 不可变变量与可变变量常量注释函数语句与表达式 流程控制语句if else条件判断while循环…...

iOS开发Swift-函数

1.函数的定义和调用 func greet(person: String) -> String { // 函数名 传入值 传入值类型 返回值类型let greeting "Hello" personreturn greeting } print( greet(person: "Anna") ) //调用2.函数的参数与返回值 (1)无参函数 func sayHe…...

序列化协议:JSON和XML

作者:CARROT 链接:https://www.zhihu.com/question/604811576/answer/3100483698 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 json和xml都是数据传输的格式。比如我们开发过程中需要和网…...

江西萍乡能源石油化工阀门三维扫描3d测量抄数建模-CASAIM中科广电

长期以来,石油天然气、石油石化、发电和管道输送行业在环保、健康和安全保障方面一直承受着巨大的压力,他们必须确保相关规程在各项作业中得到全面贯彻。 阀门作为流体管道运输中的组成部分,其装配密封度是保证流体运输安全的重要一环&#…...

Go【gin和gorm框架】实现紧急事件登记的接口

简单来说,就是接受前端微信小程序发来的数据保存到数据库,这是我写的第二个接口,相比前一个要稍微简单一些,而且因为前端页面也是我写的,参数类型自然是无缝对接_ 前端页面大概长这个样子 先用apifox模拟发送请求测试…...

第一个VUE程序?

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title></head> <body><div id"app">{{message}} </div><!-- 1.导入Vue.js --> <script s…...

电阻器件的分类

电阻器的种类碳膜电阻膜式电阻器中的一种。气态碳氢化合物在高温和真空中分解&#xff0c;碳沉积在瓷棒或者瓷管上&#xff0c;形成一层结晶碳膜。改变碳膜厚度和用刻槽的方式变更碳膜的长度可以得到不同的阻值。碳膜电阻成本较低&#xff0c;电性能和稳定性较差&#xff0c;一…...

QT基础教程之二 第一个Qt小程序

QT基础教程之二 第一个Qt小程序 按钮的创建 在Qt程序中&#xff0c;最常用的控件之一就是按钮了&#xff0c;首先我们来看下如何创建一个按钮 QPushButton * btn new QPushButton; 头文件 #include <QPushButton>//设置父亲btn->setParent(this);//设置文字btn-&g…...

Edge用户数据目录查找

创建 Microsoft Edge 用户数据目录变量...

最新外卖霸王餐小程序、H5、微信公众号版外卖系统源码|霸王餐美团/饿了么系统/外卖红包cps粉丝裂变玩法源码下载

最新外卖霸王餐小程序、H5、微信公众号版外卖系统源码、霸王餐美团、饿了么系统&#xff0c;粉丝裂变玩源码下载&#xff0c;外卖cps小程序项目&#xff0c;外卖红包cps带好友返利佣金分销系统程序、饿了么美团联盟源码&#xff0c;外卖cps带分销返利后端源码&#xff0c;基于L…...

数据库事务四大特性

事务的4大特性&#xff08;ACID&#xff09;&#xff1a; 原子性(Atomicity)&#xff1a; 事务是数据库的逻辑工作单位&#xff0c;它对数据库的修改要么全部执行&#xff0c;要么全部不执行。 一致性(Consistemcy)&#xff1a; 事务前后&#xff0c;数据库的状态都满足所有的完…...

浅谈Router和Route

router 和 route 是在前端框架中用于管理和处理路由的两个关键概念。这两者之间的关系可以通过具体的代码来解释。在本示例中&#xff0c;我将使用 React 和 React Router 来说明它们之间的关系。 Router&#xff08;路由器&#xff09;&#xff1a;Router 是一个库或框架&…...

Linux环境安装jdk

1.安装jdk 上传jdk.tar.gz;安装包在下载内容里可以直接下载tar -zxvf jdk.tar.gz;配置环境变量&#xff1a;vi /etc/profile&#xff1b;填入以下内容&#xff1b;退出编辑模式&#xff0c;保存&#xff1b;然后source /etc/profile使配置生效&#xff1b; export JAVA_HOME/d…...

数据隐私与安全在大数据时代的挑战与应对

文章目录 数据隐私的挑战数据安全的挑战应对策略和方法1. 合规和监管2. 加密技术3. 匿名化和脱敏4. 安全意识培训5. 隐私保护技术 结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&…...

vue3 基础知识 (生命周期) 06

你好&#xff01; 文章目录 一、生命周期二、生命周期过程三、组件的 v-model 一、生命周期 每个组件都可能从 创建、挂载、更新、卸载 等一系列的过程 在这个过程中的某一个阶段&#xff0c;用于可能会想要 添加一些属于自己的代码逻辑&#xff08;比如组件创建完成后请求一些…...

【Eclipse】汉化简体中文教程(官方汉化包,IDE自带软件安装功能),图文详情

目录 0.环境 1.步骤 1&#xff09;查看eclipse的版本 2&#xff09;在官网找语言包&#xff0c;并复制链接 3&#xff09;将链接复制到eclipse中 4&#xff09;汉化完成 0.环境 windows11&#xff0c;64位&#xff1b; eclipse 2021-6版本 1.步骤 思路&#xff1a;在官网找…...

Kotlin协程flow的debounce参数timeoutMillis特性

Kotlin协程flow的debounce参数timeoutMillis特性 <dependency><groupId>org.jetbrains.kotlinx</groupId><artifactId>kotlinx-coroutines-core</artifactId><version>1.7.3</version><type>pom</type></dependency&…...

oracle 12c怎样修改varchar2允许的最大长度

12C单实例测试&#xff0c;varchar2在早期版本中最大长度限制为4000&#xff0c;当字段长度指定的比较长的时候会报错&#xff1a;ORA-00910: specified length too long for its datatype。 早期版本中虽然SQL数据类型限制为4000&#xff08;如表中的列的varchar2类型&#x…...

python WSGI和ASGI的区别

用户到我们web应用中间经过的相关协议&#xff0c;具体介绍和pyhton相关的WSGI和ASGI&#xff0c;我先把结论列出来&#xff0c;详细描述请看下面介绍&#xff01; 请大家先记住这张图&#xff0c;带着问题和整个框架去看比较易于了解 CGI&#xff0c;WSGI&#xff0c;ASGI、…...

【Golang】什么是内存逃逸?

文章目录 要从C/C谈起Golang的内存逃逸 要从C/C谈起 在C/C中&#xff0c;局部变量被分配到栈区&#xff0c;一旦当前函数执行完毕&#xff0c;局部变量占用的内存也将被释放&#xff0c;因此以下代码无法将数组的内容传递出去。 int *getArray() {int array[7] {1, 2, 3, 4,…...

MVC OR DDD

MVC OR DDD 说明&#xff1a;这篇是标题党&#xff0c;不包含相关概念说明 前段时间跟随师兄学习了解了DDD领域驱动模型&#xff0c;觉得这个思想更好&#xff0c;进行下面解析和学习方面的思考和实践&#xff0c;觉得很好&#xff0c;耐心读下去。希望对您有所帮助。 首先&am…...

前端面试:【TypeScript】静态类型检查与编译时类型检查

TypeScript是一种由Microsoft开发的编程语言&#xff0c;它在JavaScript的基础上添加了强大的静态类型系统。在本文中&#xff0c;我们将深入探讨TypeScript的静态类型检查和编译时类型检查&#xff0c;以及它们如何提高代码的可靠性和可维护性。 1. 静态类型检查&#xff08;S…...

Qt中设置QListWidget滑动条滚动速度

QListWidget继承QListView控件&#xff0c;Qt帮助文档中说 QAbstractItemView::ScrollPerPixel 和QAbstractItemView::ScrollPerItem分别可以实现按item滚动和像数点滚动&#xff0c;但是好像都没效果。还有就是说通过创建QScrollBar有用&#xff0c;但是也没效果。 亲测还是这…...

网站建设报价套餐/外链屏蔽逐步解除

【知识要点】   &#xff08;&#xff11;&#xff09;初识GridView   &#xff08;&#xff12;&#xff09;为GridView加个样式   &#xff08;&#xff13;&#xff09;让GridView自定义表头 【问题提出】   如何把客户以下面列表的形式展示出来呢&#xff1f; 【…...

建设电子商务网站的试卷/黑帽seo培训多少钱

该标签不是HTML3.2的一部分&#xff0c;并且只支持MSIE3以后内核&#xff0c;所以如果你使用非IE内核浏览器(如&#xff1a;Netscape)可能无法看到下面一些很有意思的效果 该标签是个容器标签 语法&#xff1a;  <marquee></marquee>以下是一个最简单的例子&…...

网站管理员怎么做联系方式/新乡搜索引擎优化

java可以将序列化以后的对象存入文件中&#xff0c;比如HashMap, 然后还能读出来。对于一些做高速缓存的项目非常有用&#xff0c;比如你从数据库读取了一个分类&#xff0c;希望以后就不要从数据库读取了&#xff0c;从文件读取。那么这种办法非常有用。如果一个对象没有被序列…...

wordpress4.7/推广普通话手抄报内容50字

前言&#xff1a;最近对公司的APP进行一些控件的升级&#xff08;很久以前就想动&#xff0c;我已经忍了很久了&#xff09;&#xff0c;记录一下ActionBar 转 ToolBar 期间遇到的大大小小的坑&#xff0c;顺便做个笔记。一、先说一开始的使用1.在xml布局文件的头部添加Toolbar…...

电商网站建设与维护试题/网站查询关键词排名软件

转载于:https://www.cnblogs.com/tuifeideyouran/p/3826516.html...

南昌网站建设方案详细版/哈尔滨seo公司

2019独角兽企业重金招聘Python工程师标准>>> 日常的大数据使用中经常是在服务器命名行中进行操作,可视化功能仅仅依靠着各个组件自带的网页进行,那么有没有一个可以结合大家能在一个网页上的管理工具呢?答案是肯定的,今天就和大家一起来探索大数据管理工具HUE的庐山…...