站点做动静分离,如何处理用户上传文件呢?

发布于 2022-09-04 10:38:15 字数 419 浏览 7 评论 0

公司的站点是做微信服务的,最近客户量上来了,流量一下暴增,一台服务器撑不住了,经过分析日志,发现主要流量都是静态资源文件,图片, js , css 等。于是去开了 CDN 加速。并打算进一步把一台服务器拆分成两台,分别绑定不同域名,一台专门把动态处理程序,另外一条放纯静态资源并由 CDN 加速。让静态资源彻底不会干扰到服务器处理动态请求。一般的静态资源都很好迁移。但是有个问题是我公司服务器是允许用户上传文件的,主要是一些小的图片,音频,视频。分析流量发现这部分用户上传的图片才是流量的大头,但是要怎么做,才能让用户上传的时候,把文件上传到静态服务器上去呢?现在的困扰点在于,如果在静态服务器上专门部署一个处理上传的程序,由于这个程序无法判断 session (用户登录的时候在动态服务器上)。这就存在安全问题了。如果要动态服务器先接收文件再转发到静态服务器,这种做法不知道是否稳妥。可靠性不知道咋样。
请高手指点

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

蓝咒 2022-09-11 10:38:15

sudo apt-get install inotify-tools rsync
可以考虑用inotifywait监听PHP服务器上保存上传文件的目录,文件有改变就通过rsync同步到局域网的专门存储静态资源的服务器,最后PHP输出静态服务器域名的图片链接给浏览器.
补充:
rsync不适合文件数量大,变化频繁的同步,因为rsync在同步数据时,需要先扫描所有文件后进行比对后进行差异传输.所以可以考虑用户上传文件后,PHP用pclose(popen("timeout 10 ftp.sh $file >/dev/null 2>&1 &", 'r'));异步上传文件到静态资源服务器(需要搭建FTP服务).

在shell脚本中用ftp上传文件:

ftp.sh
#!/bin/sh
# -n option disables auto-logon
ftp -n "127.0.0.1" <<End-Of-Session
user "user" "pass"
binary
cd uploads
put "/uploads/20161104/pic.png" "pic.png"
bye
End-Of-Session
无人问我粥可暖 2022-09-11 10:38:15

本人以前图片服务是采用以下两种方式(只适用于中转能解决问题的情况),

  1. 动态服务器直接把图片以ftp的方式直接提交到资源服务器

  2. 文件临时保存在动态服务器,然后以增量同步的方式同步到资源服务器

若中转不能解决问题,只能把上传的交互直接与资源服通信,考虑同时把用户的相关标识(例如IDTOKEN)提交到资源服接收,资源服接收端处理完,直接更新DB,或者动态服和资源服建立多一个上传数据通信

も星光 2022-09-11 10:38:15

挂载

挂载其他服务器的目录到后台服务器

与酒说心事 2022-09-11 10:38:15

最好可以放到七牛云或者又拍云上去,很方便做CDN,收费还比较便宜。

也只是曾经 2022-09-11 10:38:15

NFS 应该是个比较靠谱的方案

尤怨 2022-09-11 10:38:15

a:静态服务器
b:动态服务器
B给A上传图片。
————————————————
其实a可以做个上传程序的接口啊。
给接口做验证,发送上传请求的时候验证token判断是否为来自b的合法请求就好了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文