小网站需要把目前全站的静态资源和用户 form 上传的静态资源存放在一个独立的服务器中;
启用独立域名后再使用 cdn 来分流;
但是目前有一个问题就是:如何把用户 form 上传的静态资源上传到“静态资源服务器”?
目前想了 2 个方案,不知道大家一般都是怎么弄的?
修改 web 服务器后台逻辑,把 form 表单上传文件直接移动到“静态资源服务器”对应的目录下。
优点: web 服务器中不会有静态资源数据冗余,全部在“静态资源服务器”中。
缺点:相对别的方案较麻烦。
使用 rsync 同步, web 服务器的附件目录有更新就直接同步到“静态资源服务器”
优点:方便、不需要改代码
缺点: web 服务器有数据冗余
下图是有问题的,只适用于 form 表单只有一个 input=file 专用于上传
如果出现以下表单就逻辑有问题了,其他的数据web服务器就无法获取了
<form action="http://img.xxx.com/upload/">
<input type="text" name="user_name" />
<input type="radio" name="gender" value="0" />
<input type="radio" name="gender" value="1" />
<input type="file" name="user_face" />
</form>
1
abelyao 2016-11-23 17:23:19 +08:00
|
2
abelyao 2016-11-23 17:26:14 +08:00
好像我回复之后你 update 了内容。
对于其它数据字段,可以分开记录,比如数据字段 ajax 记录到业务服务器,图片上传到静态资源服务器之后,由静态资源服务器反馈一个结果,再记录到业务服务器;或者直接由静态资源服务器回调业务服务器的接口。 基本上,又拍云 和 七牛 的表单上传功能都能为你的问题提供参考。 |
3
lsylsy2 2016-11-23 17:26:27 +08:00
静态服务器用类似 nginx 的 proxy_store 功能,做一个镜像;
然后 web 服务器定期扫描旧文件并(确保静态服务器上有之后)删除。 |
4
lsylsy2 2016-11-23 17:28:00 +08:00
我刚才说的方法,约等于你的“静态资源服务器”是个缓存时间无限的 CDN ,当然就不用改现有代码;
然后因为“缓存时间无限”,所以 web 服务器定期清理也不会丢失文件了。 |
5
qwer1234asdf 2016-11-23 17:28:54 +08:00
你这,缺点跟优点是同一个。。。。怎么感觉怪怪的
|