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

查看:90
本文介绍了php - 站点做动静分离,如何处理用户上传文件呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

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

这篇关于php - 站点做动静分离,如何处理用户上传文件呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆