因为使用nginx均衡负载,由于分发请求到不同服务器,这样如果只想把上传的图片只保存到一台服务器就会出问题。
百度到的方法:
第一种方法是代码里面使用ftp 把文件同步到保存服务器
第二种方法是如果不是保存文件的服务器,使用curl 把文件提交到保存服务器再重新存一次。
第三种方法就是直接使用保存服务器的ip来调接口了。第三种方法我们这边先不考虑。
不知道大神们,遇到这种情况是怎么实现这种需求的
回复内容:
大神们,我现在有个问题,帮我看下:
因为使用nginx均衡负载,由于分发请求到不同服务器,这样如果只想把上传的图片只保存到一台服务器就会出问题。
百度到的方法:
第一种方法是代码里面使用ftp 把文件同步到保存服务器
第二种方法是如果不是保存文件的服务器,使用curl 把文件提交到保存服务器再重新存一次。
第三种方法就是直接使用保存服务器的ip来调接口了。第三种方法我们这边先不考虑。
不知道大神们,遇到这种情况是怎么实现这种需求的
宿主的nginx对于上传的location做特殊处理, 只让一台机器来负责文件上传, 不完美但是有效, 可以作为一段时间的过度方案
搭建一个分布式文件系统, 挂载到所有的服务器上, 处理文件上传后写只写入这个特定目录, nginx中规划一个location指向这个这个目录(例如/data/upload), 缺点就是要多维护一个这个分布式文件系统 (和你的第一种思路有点像, 但分布式文件系统不需要"同步")
使用外部CDN文件上传来解决这个问题, 七牛, 又拍云都可以
1.专门整几台服务器用来存这些静态资源;
2.整出几个盘,弄成网络盘(nfs),专门用来存储这些文件,每个服务器都去挂载这几个盘,和windows的共享文件夹类似;
3.上传成功之后返回一个文件的url,这个url就是文件的地址了;