为什么80%的码农都做不了架构师?>>>   

背景

go-fastdfs是支持http协议的一款分布式文件系统,在一般的项目中,很少是直接将文件系统的地址暴露出来的,大多数都会通过nginx等软件进行反代过去,由于我司的业务和网络环境场景相对特殊,由公网部分(公有云)和内网部分(私有云)组成的混合云网络体系,公有云主要就是作为一个出口和入口以及运行一些审计认证等应用,对上游请求进行处理,从而减少私有云的处理次数,提升性能。那么也正是因为这样,在公网的环境下,要访问到私有云提供的服务则必须使用反向代理。同样道理,对于文件系统的访问也如此,如何在nginx中进行配置才能使得外部的网络请求可以反向代理到go-fastdfs呢?本文将逐步阐述。

一般配置

在一般的情况下,熟悉nginx的朋友都知道,如果需要配置反向代理,直接写一个location上下文和proxy模块即可,如果需要自定义前缀,使用一个rewrite模块即可。简单例子如下:

location ~ /dfs/group([0-9]) {proxy_pass http://localhost:8080;rewrite ^/dfs/(.*)$ /$1 break;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

到这里,一般的反代配置就算是可以了,那么对于go-fastdfs而言是否可以了呢?对于go-fastdfs一般上传是可以了,但是呢,对于使用了tus做断点续传还是不够,为什么呢?因为tus服务端会返回301重定向,并且需要携带一定的请求头过去,所以还需要特别的设置一下。

支持Tus的反代配置

如果需要做tus的反代,要支持301重定向Location的重写还要支持一定的请求头转发,那该如何配置呢?请参考下面的配置

location ~ /dfs/group([0-9]) {access_log logs/dfs/access.log main;error_log  logs/dfs/error.log error;rewrite ^/dfs1/(.*)$ /$1 break;proxy_pass http://localhost:8051;# Disable request and response bufferingproxy_request_buffering off;proxy_buffering off;proxy_http_version 1.1;proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 如果server_name不是公网域名,这个地方可以设置成ipproxy_set_header X-Forwarded-Host $hostname;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# 因为使用了前缀加rewrite,所以要修改返回的Location加上反向代理的前缀proxy_redirect ~^(.*)/group([0-9])/big/upload/(.*) /dfs/group$2/big/upload/$3;client_max_body_size 0;
}

上面要注意一下就是proxy_redirectclient_max_body_size这两个配置,第一个配置是因为tus服务端返回的重定向Location是不会携带自定义前缀的,因此需要自己加入自定义的前缀,我这里是/dfs,如果是别的,更换下就好。第二个就是client_max_body_size了,这个是设置为0表示不管上传多大的文件都不会报request too large的问题,直接转发过去,如果需要设置,那么请设置大于等于chunkSize的数字。什么是chunkSize?就是tus客户端分块上传的时候,每一块的大小,具体请参考官方文档。

负载均衡配置

在配置了集群服务器的情况下,上传或者下载如何进行负载均衡呢?使用nginx做了反代,配合upstream模块就可以实现了,具体参考如下配置

upstream dfs_stream {server host1:port;server host2:port;ip_hash;
}

上面的配置和一般的负载均衡没有什么不一样,唯一要注意的是要配置ip_hash,为什么呢?因为使用断点续传的时候,文件是分块上传的,如果不是ip_hash的话,有可能会前面几片被上传到A服务器,后面几片被上传到B服务器,那么这样子文件就不是完整的了,因此需要注意这个问题。

转载于:https://my.oschina.net/succy/blog/3052133

使用Nginx反向代理到go-fastdfs相关推荐

  1. Nginx反向代理与系统参数配置conf

    文章目录 一. nginx介绍 二. nginx的安装和配置 使用nginx必备安装的库 1.PCRE库的安装和编译 2.zlib库的安装和编译 3.OpenSSL开发库的安装和编译 nginx的编译 ...

  2. Nginx 反向代理详解

    反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时 ...

  3. nginx反向代理原理及配置详解

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  4. nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除

    一,nginx反向代理配置 #tomcat 显然就是用户访问www.wolfdream.com(需要设置本地localhost,将www.wolfdream.com指向nginx所在IP)的时候(或将 ...

  5. nginx反向代理原理讲解

    一 .概述                  反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器:并将从服务器上得到的结果 ...

  6. 懂点 Nginx 反向代理与负载均衡,是面试加分项没有之一

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等 ...

  7. Nginx——反向代理

    通过Nginx来实现反向代理,具体配置实例如下所示: 一.反向代理实例一 1.目标 在浏览器地址栏输入www.test.com,可跳转到linux系统tomcat的主页面中. 2.前置工作 (1)在l ...

  8. nginx反向代理,负载均衡

    nginx 反向代理(Reverse Proxy)是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户 ...

  9. Nginx反向代理以及负载均衡配置

    一 .nginx 的优缺点: nginx 相对 apache 的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则 ...

  10. 配置nginx反向代理jira并实现https

    摘要: 配置nginx反向代理jira并实现https 配置Tomcat 在本文中,我们设置可以在地址http://jira.aniu.so/jira(标准HTTP端口80)上访问JIRA,而JIRA ...

最新文章

  1. gst-rtsp-server编译测试
  2. 无聊中安装的MAC OS截图欣赏
  3. ELM327 scanners work on iPhone, iPad and iPod
  4. Django搭建简易博客
  5. CentOS设置网卡成DHCP动态获取IP
  6. phpMyAdmin批量修改Mysql数据表前缀的方法
  7. 华为多臂路由_华为单臂路由配置
  8. java程序用户权限管理,java用户管理权限
  9. 您在申诉时填写的收件人信息与运单号关联的收件人信息不一致,请确认
  10. 基于STM32的微信视频电话机,让家里的老人也能轻松使用微信视频电话
  11. VUE 批量导出、导入Excel
  12. 公司网站被黑 跳转到彩票网站的处理解决办法
  13. python pyplot颜色_matplotlib制图——颜色和样式
  14. java左手画圆右手画方_左手画圆右手画方可以同时进行吗?
  15. 关于python教学
  16. 视频监控系统 摄像头与网络存储服务器兼容,网络视频监控系统技术要点
  17. catti二级笔译综合能力真题_【CATTI二级笔译】综合能力知识点总结(一)
  18. GitHub 上六大爆款AI学习项目,Star超过5.6w
  19. 信息系统项目管理师核心考点(四十六)采购工作说明书(SOW)
  20. Oracle 表空间收缩

热门文章

  1. [Google Guava] 8-区间
  2. Java 理论与实践: 垃圾收集简史
  3. 在Github上搭建Jekyll博客和创建主题
  4. Matlab回显语句
  5. c#中datareader中HasRows属性和Read方法的区别
  6. vue.js将一个对象的所有属性作为prop进行传递
  7. iBATIS In Action:使用高级查询技术(一)
  8. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——1.5 安装SMO
  9. php阿里云oss文件上传
  10. timestamp类型设置默认时间