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

news2024/11/19 3:16:12

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 的私钥对某个人的公钥进行加密 -> 证书
这个人 的公钥
这个人的个人信息

 

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

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

相关文章

android系统启动流程之zygote如何创建SystemServer进程

SystemServer:是独立的进程,主要工作是管理服务的,它将启动大约90种服务Services. 它主要承担的职责是为APP的运行提供各种服务,像AMS,WMS这些服务并不是一个独立的进程, 它们其实都是SystemServer进程中需要管理的的众多服务之一…

CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID

目录 前言1.通过浏览器直接访问文件时获取Request ID 前言 阿里云CDN/DCDN(全站加速)为接收到的每个请求分配唯一的服务器请求ID,作为关联各类日志信息的标识符。当您在使用CDN/DCDN(全站加速)过程中遇到错误且希望阿里云技术支持提供协助时,需要提交失…

UnitTest笔记: 拓展库DDT的使用

DDT (Data-Drivers- Tests) 允许使用不同的测试数据运行同一个测试用例,展示为不同的测试用例。 第一步: pip安装 ddt 第二步: 创建test_baidu_ddt.py 1. 测试类要使用ddt 修饰 2. 不同形式的参数化: 列表,字典&a…

Java常见的排序算法

排序分为内部排序和外部排序(外部存储) 常见的七大排序,这些都是内部排序 。 1、插入排序:直接插入排序 1、插入排序:每次将一个待排序的记录,按其关键字的大小插入到前面已排序好的记录序列 中的适当位置…

新版-C语言学生信息管理系统

拥有基本的学生信息系统的功能, 功能点如下所示: 1.添加学生信息 2.修改学生信息 3.删除学生信息 4.查看学生信息 5.搜索学生信息 6.查看系统学生总人数 7.学生信息排序 8.保存学生信息(保存在D:/students.txt) 9.导入学生信息(导入D:/students.txt文件中的信息) 主界面 1.添加…

人工智能轨道交通行业周刊-第57期(2023.8.21-8.27)

本期关键词:桥梁养护、智慧天路、列车通信网络、AIGC产业报告、价值对齐、异常检测 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMet…

浅谈 Java 中的 Lambda 表达式

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 Lambda 表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量中。在 Java8 中,它和函数式接口一起,共同构建了函数式编程的框架。 什么是函数式编程 函数式编程是…

DebugInfo 模块功能系统介绍 文本上色 文本与表格对齐 分隔线 秒表计算器 语义日期

背景 今天系统性的为大家介绍一下 DebugInfo 模块。这个模块提供了一些丰富的基本功能的封装,希望能给有需要的人带来些许帮助。 文本上色 DebugInfo 模块引入了 colorama提供文本颜色支持。 # -*- coding:UTF-8 -*-# region 引入必要依赖 from DebugInfo.DebugI…

Modbus转Profinet网关在大型自动化仓储项目应用案例

在自动化仓储项目中,Modbus是一种常见的通信协议,用于连接各种设备,例如传感器、PLC和人机界面。然而,Modbus协议只支持串行通信,并且数据传输速度较慢。为了提高通信效率和整体系统性能,许多大型仓储项目选…

Vue的使用(2)

一个简单的Vue项目的创建 创建一个UserList.vue组件 在App.vue中使用该组件 使用组件的第一步&#xff0c;导入组件使用组件的第二部&#xff0c;申明这个组件使用组件的第三步&#xff1a;引用组件 结果&#xff1a; 事件和插值语法 <template> <div><!-- te…

五、性能测试之linux分析命令

linux分析命令 一、服务器基础知识二、linux文件结构三、linux文件权限四、linux命令1、安装应用fedora家族: 如centosdebain家族&#xff1a;如ubuntu 2、获取帮助第一种&#xff1a;command --help第二种&#xff1a;man command第三种&#xff1a;info 3、服务器性能分析基础…

VBA技术资料MF47:VBA_文件夹命令MkDir

【分享成果&#xff0c;随喜正能量】善待这漫长又短暂的岁月&#xff0c;劝君莫惜金缕衣&#xff0c;劝君惜取少年时。世事总是无常&#xff0c;人生没有如果&#xff0c;用一颗云水禅心&#xff0c;过平淡充实的日子&#xff0c;只要且行且珍惜&#xff0c;人生就会无限美好&a…

Android 编译系统(Build System)剖析

Android Build System剖析 Android预构建应用是如何制作的&#xff0c;背后的构建系统又是什么&#xff1f; 本文旨在分享关于Android构建系统以及与原始设备制造商&#xff08;OEM&#xff09;集成的知识&#xff0c;简化理解AOSP复杂机制的过程。与手动查阅各种文件及其内部…

MySQL安装记录

背景 Windows系统重装了, 想恢复一下之前的MySQL环境, 而且本地数据库也是比较常用的, 刚好本次也在安装, 做一个简单的记录. 也算是自己的学习记录输出. 遇到的问题当然也可以同时记录在这里, 方便后 续回顾. 资料包 百度网盘 // TODO 估计放了也会被CSDN屏蔽, 这里就不放…

7 集群基本测试

1. 上传小文件到集群 在hadoop路径下执行命令创建一个文件夹用于存放即将上传的文件&#xff1a; [atguiguhadoop102 ~]$ hadoop fs -mkdir /input上传&#xff1a; [atguiguhadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/work.txt /input2.上传大文件 [atguiguhadoop1…

数学分析:场论

我们之前知道的是里斯表示定理。 这里看到&#xff0c;对于多重线性映射&#xff0c;里斯表示定理会从内积变成混合积。当然我们还是只考虑三维以内的情况。 于是我们可以把不同的1形式和2形式的下标写上&#xff0c;表示他们相当于内积或者混合积对应的那个向量。 然后还差0形…

LeetCode第1~5题解

CONTENTS LeetCode 1. 两数之和&#xff08;简单&#xff09;LeetCode 2. 两数相加&#xff08;中等&#xff09;LeetCode 3. 无重复字符的最长子串&#xff08;中等&#xff09;LeetCode 4. 寻找两个正序数组的中位数&#xff08;困难&#xff09;LeetCode 5. 最长回文子串&am…

【awd系列】Bugku S3 AWD排位赛-9 pwn类型

文章目录 二进制下载检查分析运行二进制ida分析解题思路exp 二进制下载 下载地址&#xff1a;传送门 检查分析 [rootningan 3rd]# file pwn pwn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for …

android系统启动流程之SystemServer运行过程

SystemServer进程的启动流程&#xff1a;直接看代码&#xff1a; SystemServer是Java中的一个进程&#xff0c;执行入口是SystemServer.java.main(); SystemServer.java.main();-->new SystemServer().run();-->createSystemContext();//创建系统上下文:虽然SystemServe…

Unittest 笔记:unittest拓展生成HTM报告发送邮件

HTMLTestRunner 是一个unitest拓展可以生成HTML 报告 下载地址&#xff1a;GitHub: https://github.com/defnnig/HTMLTestRunner HTMLTestRunner是一个独立的py文件&#xff0c;可以放在Lib 作为第三方模块使用或者作为项目的一部分。 方式1&#xff1a; 验证是否安装成功&…