C++文件服务器项目—项目总结与反向代理—7

2023-05-16

C++文件服务器项目—项目总结与反向代理—7

  • 1. 项目总结
  • 2. 项目提炼
  • 3. web服务器的反向代理
  • 4. 存储节点的反向代理

  组件介绍基本写完了,后续进行深入。

  本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接 C/C++后台高级服务器课程介绍 详细查看课程的服务。

1. 项目总结

项目架构图

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

2. 项目提炼

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

3. web服务器的反向代理

在这里插入图片描述

  注意,这里对web服务器做反向代理,完全是拓展知识点。实际上,单台web服务器能够承载很高的并发了,再做反向代理,真的适用吗?有这么高的并发来吗?本项目用的是单台web服务器,并没有对其做反向代理。

  在C++文件服务器项目—Nginx—3一文中以及详细写了如何做反向代理和负载均衡,这里不做详细介绍。

# 反向代理的那台服务器nginx.conf配置如下
    server {
        listen       80;         # 客户端访问反向代理服务器, 代理服务器监听的端口
        server_name  reverse.proxy.com; # 客户端访问反向代理服务器, 需要一个域名
        location / {
        	# 指令 / 转发所有
            # 反向代理服务器转发指令, http:// 固定的头
            proxy_pass http://linux.com;
        }

    }
    # 添加一个代理模块,代理两台服务器
    upstream linux.com
    {	# 可以配置权重
    	# 1/4 概率 走102
    	# 3/4 概率 走103
        #server 192.168.109.102:80 weight=1;
        #server 192.168.109.103:80 weight=3;
        server 192.168.109.102:80;
        server 192.168.109.103:80;
    }

## =====================================

# web服务器
# 相对于web服务器来说,它们的工作都是一样的
# 所有它们的所有location也应该相同
web服务器需要做什么?
# 192.168.109.102
location /
{
    root xxx;
    index xxx;
}

location /hello/ 
{
    root xx;
    index xxx;
}

location /upload/ 
{
    root xxx;
    index xx;
}

# 192.168.109.103
location /
{
    root xxx;
    index xxx;
}

location /hello/ 
{
    root xx;
    index xxx;
}

location /upload/ 
{
    root xxx;
    index xx;
}

4. 存储节点的反向代理

在这里插入图片描述

  上图的反向代理服务器代理的是每个存储节点上部署的Nginx。每个存储节点上的Nginx的职责: 解析用户的http请求, 帮助用户快速下载文件。

  客户端上传了一个文件, 被存储到了fastDFS上, 得到一个文件ID "/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3Asg3Z0782.mp4"。因为存储节点有若干个, 所有下载的时候不知道对应的存储节点的访问地址,给存储节点上的nginx web服务器添加反向代理服务器之后, 下载的访问地址:只需要知道nginx反向代理服务器的地址就可以了:192.168.109.100。只需要访问:http://192.168.109.100/group1/M00/00/00/wKgfbViy2Z2AJ-FTAaM3Asg3Z0782.mp4即可

  客户端的请求发送给了nginx反向代理服务器,反向代理服务器不处理请求, 只转发, 转发给存储节点上的nginx服务器。

# 反向代理服务器的配置
 - nginx.conf
	- 找出处理指令: 去掉协议, iP/域名, 末尾文件名, ?和后边的字符串
		- /group1/M00/00/00/ - 完整的处理指令 
	- 添加location
server{

	location  ~/group1/M([0-9])([0-9])
    {
		# 数据转发, 设置转发地址
    	proxy_pass http://test1.com;
    }
	location  ~/group2/M([0-9])([0-9])
    {
		# 数据转发, 设置转发地址
    	proxy_pass http://test2.com;
    }
}
# 都属于group1一组,所以轮询发给谁都能,会自动同步
upstream test1.com
{
    # fastDFS存储节点的地址, 因为存储节点上安装了nginx, 安装的nginx作为web服务器的角色
    server 192.168.1.101;
    server 192.168.1.102;
    server 192.168.1.103;
}
# 都属于group2一组,所以轮询发给谁都能,会自动同步
upstream test2.com
{
    # fastDFS存储节点的地址, 因为存储节点上安装了nginx, 安装的nginx作为web服务器的角色
    server 192.168.2.101;
    server 192.168.2.102;
    server 192.168.2.103;
}
	
# ===================================
存储节点上的web服务器的配置
存储节点1
    location  ~/group1/M([0-9])([0-9])
    {
        # 请求处理
    	ngx_fastdfs_module;
    }

存储节点2
	location  ~/group2/M([0-9])([0-9])
    {
        # 请求处理
    	ngx_fastdfs_module;
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++文件服务器项目—项目总结与反向代理—7 的相关文章

随机推荐

  • 嵌入式Linux开发8——UART串口通讯

    1 背景知识 1 1 UART通讯格式 串口全称叫做串行接口 xff0c 通常也叫做 COM 接口 xff0c 串行接口指的是数据一个一个的顺序传输 xff0c 通信线路简单 使用两条线即可实现双向通信 xff0c 一条用于发送 xff0c
  • 二叉树笔记

    二叉树 二叉搜索 xff08 排序 查找 xff09 树 二叉查找树 xff08 Binary Search Tree xff09 xff0c xff08 又 xff1a 二叉搜索树 xff0c 二叉排序树 xff09 它或者是一棵空树 x
  • C++面试常见题目

    C 43 43 面试常见题目 c 43 43 编译过程自动类型推导auto和decltype重载 重写 xff08 覆盖 xff09 和隐藏的区别C 43 43 构造函数和析构函数能调用虚函数吗volatile关键词运算符重载格式noexe
  • 计算机网络面试常问问题

    C 43 43 面试 计算机网络常见问题 计算机网络常见问题TCP IP协议笔记TCPTCP的特点及目的序列号与确认应答提高可靠性为什么是三次握手和四次挥手滑动窗口流量控制拥塞控制TCP粘包问题 httphttp和https的区别https
  • Trajectory generation for quadrotor while tracking a moving target in cluttered environment

    四旋翼在杂波环境下跟踪运动目标的轨迹生成 摘要1 文章主要贡献2 前言2 1 轨迹公式2 2 实现结构 3 跟踪轨迹生成3 1 标称路径点生成3 2 可行路径点生成3 3 安全飞行走廊生成3 4 代价函数3 5 强制约束3 6 求解跟踪轨迹
  • 翻译-Frustum PointNets for 3D Object Detection from RGB-D Data

    Frustum PointNets for 3D Object Detection from RGB D Data 摘要介绍相关工作从RGB D数据中检测三维物体基于前视图图像的方法 xff1a 基于鸟瞰图的方法 基于3D的方法 点云的深度
  • Online Trajectory Generation of a MAV for Chasing a Moving Target in 3D Dense Environments

    微型无人机的在线轨迹生成 xff0c 用于在3D密集环境中追踪运动目标 摘要一 介绍二 相关工作A 在障碍物环境中追逐B 通过预先规划安全地生成轨迹 三 问题陈述A 问题设置B 能力C 命名 IV 视点生成A 可见度指标B 具有安全性和可见
  • 配置目标跟踪开源项目traj_gen_vis踩过的坑

    项目地址 https github com icsl Jeon traj gen vis 安装依赖需注意的问题 traj gen with qpoases 需安装ros分支的代码 xff08 这个作者并没有指出 xff0c 坑 xff09
  • cmake arm-none-eabi-gcc for stm32 cpp project

    尝试把原有的stm32工程F1canBootloader用cmake来管理 xff0c 遇到了以下几个坑 xff1a 1 报错 xff0c undefined reference to 96 dso handle 39 CMakeFiles
  • 网络攻防之wireshark抓取登录信息

    使用wireshark抓取登录信息 简介 xff1a Wireshark xff08 前称Ethereal xff09 是一个网络封包分析软件 网络封包分析软件的功能是撷取网络封包 xff0c 并尽可能显示出最为详细的网络封包资料 Wire
  • 头文件互相包含所引发的的问题(深入剖析)

    今天写程序出现了一个让人蛋疼的错误 xff0c 后来发现是由于头文件互相包含所引起的 原本只是简单的以为头文件互相包含只会触发 xff0c 头文件的递归包含 即 xff0c A包含B xff0c 所以才A的头文件里会将B的头文件内容拷贝过来
  • C++11异步操作future和aysnc 、function和bind

    C 43 43 11异步操作future和aysnc function和bind 前言异步操作std future和std aysnc 介绍std future和std aysnc的使用Demostd packaged task 介绍std
  • C++文件服务器项目—FastDFS—1

    C 43 43 文件服务器项目 FastDFS 1 前言1 项目架构2 分布式文件系统2 1 传统文件系统2 2 分布式文件系统 3 FastDFS介绍3 1 fdfs概述3 2 fdfs框架中的三个角色3 3 fdfs三个角色之间的关系3
  • C++文件服务器项目—Redis—2

    C 43 43 文件服务器项目 Redis 2 前言1 数据库类型1 1 基本概念1 2 关系 非关系型数据库搭配使用 2 redis基础知识点2 1 redis安装2 2 redis中的两个角色2 3 redis中数据的组织格式2 4 r
  • C++文件服务器项目—Nginx—3

    C 43 43 文件服务器项目 Nginx 3 前言1 Nginx一些基本概念1 1 Nginx初步认识1 2 正向代理概念理解1 3 反向代理概念理解 2 Nginx的安装与配置2 1 Nginx与相关依赖库的安装2 2 Nginx相关的
  • C++文件服务器项目—FastCGI—4

    C 43 43 文件服务器项目 FastCGI 4 前言1 CGI 概念理解2 FastCGI 概念理解3 FastCGI和spawn fcgi安装4 FastCGI和 Nginx的关系5 Nginx数据转发 修改配置文件6 spawn f
  • C++文件服务器项目—Nginx+FastDFS插件—5

    C 43 43 文件服务器项目 Nginx 43 FastDFS插件 5 前言1 文件上传下载流程1 1 文件上传流程1 2 文件下载流程1 3 文件下载优化流程 2 Nginx和fastDFS插件2 1 安装Nginx和fastdfs n
  • C++文件服务器项目—数据库表设计 与 后端接口设计—6

    C 43 43 文件服务器项目 数据库表的设计 6 前言1 数据库建表1 1 用户信息表 user info1 2 文件信息表 file info1 3 用户文件列表表 user file list1 4 用户文件数量表 user file
  • C语言中宏定义的使用

    1 引言 预处理命令可以改变程序设计环境 提高编程效率 它们并不是 C 语言本身的组成部分 不能直接对 它们进行编译 必须在对程序进行编译之前 先对程序中这些特殊的命令进行 预处理 经过预处理后 程序就不再包括预处理命令了 最后再由编译程序
  • C++文件服务器项目—项目总结与反向代理—7

    C 43 43 文件服务器项目 项目总结与反向代理 7 1 项目总结2 项目提炼3 web服务器的反向代理4 存储节点的反向代理 组件介绍基本写完了 xff0c 后续进行深入 本专栏知识点是通过零声教育的线上课学习 xff0c 进行梳理总结