• 售前

  • 售后

热门帖子
入门百科

使用Nginx反向署理到go-fastdfs的方法示例

[复制链接]
极忘投 显示全部楼层 发表于 2021-10-26 13:34:25 |阅读模式 打印 上一主题 下一主题
背景

go-fastdfs是支持http协议的一款分布式文件系统,在一样寻常的项目中,很少是直接将文件系统的地点袒露出来的,大多数都会通过nginx等软件进行反代已往,由于我司的业务和网络情况场景相对特殊,由公网部分(公有云)和内网部分(私有云)构成的混淆云网络体系,公有云主要就是作为一个出口和入口以及运行一些审计认证等应用,对上游哀求进行处理,从而淘汰私有云的处理次数,提拔性能。那么也正是由于如许,在公网的情况下,要访问到私有云提供的服务则必须利用反向代理。同样原理,对于文件系统的访问也如此,怎样在nginx中进行配置才能使得外部的网络哀求可以反向代理到go-fastdfs呢?本文将逐步论述。
一样寻常配置

在一样寻常的情况下,认识nginx的朋友都知道,如果需要配置反向代理,直接写一个location上下文和proxy模块即可,如果需要自定义前缀,利用一个rewrite模块即可。简朴例子如下:
  1. location ~ /dfs/group([0-9]) {
  2. proxy_pass http://localhost:8080;
  3. rewrite ^/dfs/(.*)$ /$1 break;
  4. proxy_set_header Host $host:$server_port;
  5. proxy_set_header X-Real-IP $remote_addr;
  6. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  7. }
复制代码
到这里,一样寻常的反代配置就算是可以了,那么对于go-fastdfs而言是否可以了呢?对于go-fastdfs一样寻常上传是可以了,但是呢,对于利用了tus做断点续传还是不敷,为什么呢?由于tus服务端会返回301重定向,并且需要携带一定的哀求头已往,以是还需要特殊的设置一下。
支持Tus的反代配置

如果需要做tus的反代,要支持301重定向Location的重写还要支持一定的哀求头转发,那该怎样配置呢?请参考下面的配置
  1. location ~ /dfs1/group([0-9]) {
  2. access_log logs/dfs/access.log main;
  3. error_log logs/dfs/error.log error;
  4. rewrite ^/dfs1/(.*)$ /$1 break;
  5. proxy_pass http://localhost:8051;
  6. # Disable request and response buffering
  7. proxy_request_buffering off;
  8. proxy_buffering off;
  9. proxy_http_version 1.1;
  10. proxy_set_header Host $host:$server_port;
  11. proxy_set_header X-Real-IP $remote_addr;
  12. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13. # 如果server_name不是公网域名,这个地方可以设置成ip
  14. proxy_set_header X-Forwarded-Host $hostname;
  15. proxy_set_header X-Forwarded-Proto $scheme;
  16. proxy_set_header Upgrade $http_upgrade;
  17. proxy_set_header Connection "upgrade";
  18. # 因为使用了前缀加rewrite,所以要修改返回的Location加上反向代理的前缀
  19. proxy_redirect ~^(.*)/group([0-9])/big/upload/(.*) /dfs/group$2/big/upload/$3;
  20. client_max_body_size 0;
  21. }
复制代码
上面要留意一下就是proxy_redirect和client_max_body_size这两个配置,第一个配置是由于tus服务端返回的重定向Location是不会携带自定义前缀的,因此需要本身加入自定义的前缀,我这里是/dfs,如果是别的,更换下就好。第二个就是client_max_body_size了,这个是设置为0表示不管上传多大的文件都不会报request too large的标题,直接转发已往,如果需要设置,那么请设置大于即是chunkSize的数字。什么是chunkSize?就是tus客户端分块上传的时候,每一块的巨细,详细请参考官方文档。
负载均衡配置

在配置了集群服务器的情况下,上传大概下载怎样进行负载均衡呢?利用nginx做了反代,共同upstream模块就可以实现了,详细参考如下配置
  1. upstream dfs_stream {
  2. server host1:port;
  3. server host2:port;
  4. ip_hash;
  5. }
复制代码
上面的配置和一样寻常的负载均衡没有什么不一样,唯一要留意的是要配置ip_hash,为什么呢?由于利用断点续传的时候,文件是分块上传的,如果不是ip_hash的话,有可能会前面几片被上传到A服务器,背面几片被上传到B服务器,那么如许子文件就不是完整的了,因此需要留意这个标题。
以上就是本文的全部内容,渴望对各人的学习有所资助,也渴望各人多多支持草根技术分享。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作