组件介绍基本写完了,后续进行深入。
本专栏知识点是通过零声教育的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接 C/C++后台高级服务器课程介绍 详细查看课程的服务。
注意,这里对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;
}
上图的反向代理服务器代理的是每个存储节点上部署的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;
}