C++文件服务器项目—项目总结与反向代理—7
组件介绍基本写完了,后续进行深入。
本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接 C/C++后台高级服务器课程介绍 详细查看课程的服务。
1. 项目总结
- 客户端
- 浏览器–>http协议
- nginx反向代理服务器
- 如果为web服务器服务,web服务器需要集群化
- 如果为fastdfs服务,存储节点需要集群化
- web服务器 - nginx
- 处理静态请求 - > 访问服务器文件
- 动态请求 -> 客户端给服务器提交的数据
- 借助fastCGI进行处理
- 讲的是单线程处理方式 - API
- 也可以多线程处理 -> 另外的API
- 使用spawn-fcgi启动
- 借助fastCGI进行处理
- mysql
- 关系型数据库 - 服务器端
- 存储什么?
- 项目中所有用到的数据
- redis
- 非关系型数据库 - 服务器端使用
- 数据默认在内存, 不需要sql语句, 不需要数据库表
- 键值对存储, 操作数据使用的是命令
- 和关系型数据库配合使用
- 存储服务器端经常访问的数据
- fastDFS
- 分布式文件系统
- 追踪器, 存储节点, 客户端
- 存储节点的集群
- 横向扩容 -> 增加容量
- 添加新组, 将新主机放到该组中
- 纵向扩容 -> 备份
- 将主机放到已经存在的组中
- 存储用户上传的所有的文件
- 给用户提供下载服务器
- 横向扩容 -> 增加容量
2. 项目提炼
- 文件服务器可以用在哪些地方
- 电商网站
- 旅游网站
- 租房
- 装修公司
- 医院
- 短视频网站
- 云盘
- 图床
- 需要什么?
- 首先需要的是fastDFS
- 配置环境
- 扩容
- 操作fastDFS - 客户端
- 浏览器
- 桌面终端 - Qt,mfc
- 数据库操作
- mysql
- oralce
- 有一个web服务器 - Nginx
- 静态资源部署
- 动态请求 - 编写fastCGI程序
- 注册
- 登录
- 上传
- 下载
- 秒传
- 文件列表的获取等等
- redis
- 存储服务器访问比较频繁的数据
- 首先需要的是fastDFS
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;
}
本文含有隐藏内容,请 开通VIP 后查看