Nginx反向代理至go-fastdfs案例讲解


Posted in Servers onAugust 02, 2021

背景

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的重写还要支持一定的请求头转发,那该如何配置呢?请参考下面的配置

l

ocation ~ /dfs1/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 buffering
	proxy_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不是公网域名,这个地方可以设置成ip
	proxy_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_redirect和client_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服务器,那么这样子文件就不是完整的了,因此需要注意这个问题。

 

到此这篇关于Nginx反向代理至go-fastdfs案例讲解的文章就介绍到这了,更多相关Nginx反向代理至go-fastdfs内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
nginx网站服务如何配置防盗链(推荐)
Mar 31 Servers
nginx配置ssl实现https的方法示例
Mar 31 Servers
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
Mar 31 Servers
如何在centos上使用yum安装rabbitmq-server
Mar 31 Servers
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
图文详解Nginx版本平滑升级方案
Sep 15 Servers
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
Sep 25 Servers
详解Nginx 被动检查服务器的存活状态
Oct 16 Servers
深入解析Apache Hudi内核文件标记机制
Mar 31 Servers
Apache自带的ab压力测试工具的实现
Jul 23 Servers
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
Aug 05 Servers
ubuntu开机后ROS程序自启动问题
Dec 24 Servers
Nginx配置之实现多台服务器负载均衡
Aug 02 #Servers
nginx服务器的下载安装与使用详解
Aug 02 #Servers
nginx反向代理配置去除前缀案例教程
Jul 26 #Servers
nginx结合openssl实现https的方法
nginx配置虚拟主机的详细步骤
nginx的zabbix 5.0安装部署的方法步骤
nginx请求限制配置方法
You might like
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
js计算文本框输入的字符数
2015/10/23 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
Python_LDA实现方法详解
2017/10/25 Python
tornado 多进程模式解析
2018/01/15 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
学生安全责任书范本
2014/07/24 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
团结主题班会
2015/08/13 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python