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


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

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

      本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    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;
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    RCNA 锐捷培训
    linux使用yum安装2.x版git
    第六章 文件的其他操作命令
    FANUC机器人Process IO接线及信号配置方法(二)
    山东2022中国农民丰收节 国稻种芯:主场活动在禹城举办
    vue+iview中日期时间选择器不能选择当前日期之前包括时分秒
    使用ffmpeg提取视频中的音频并保存为单声道wav
    HTML期末大学生网页设计作业----锤子手机 1页
    C语言高级教程-C语言数组(二)
    建造者模式(装修公司装修套餐)
  • 原文地址:https://blog.csdn.net/qq_42956653/article/details/126808346