V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hlg002
V2EX  ›  问与答

求静态资源服务器正确使用姿势

  •  
  •   hlg002 · 2016-11-23 17:14:24 +08:00 · 2380 次点击
    这是一个创建于 2928 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求描述

    小网站需要把目前全站的静态资源和用户 form 上传的静态资源存放在一个独立的服务器中;

    启用独立域名后再使用 cdn 来分流;

    但是目前有一个问题就是:如何把用户 form 上传的静态资源上传到“静态资源服务器”?

    目前想了 2 个方案,不知道大家一般都是怎么弄的?


    方案 1

    修改 web 服务器后台逻辑,把 form 表单上传文件直接移动到“静态资源服务器”对应的目录下。

    • 优点: web 服务器中不会有静态资源数据冗余,全部在“静态资源服务器”中。

    • 缺点:相对别的方案较麻烦。

    方案 2

    使用 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 条附言  ·  2016-11-24 21:09:12 +08:00
    5 条回复    2016-11-23 17:28:54 +08:00
    abelyao
        2
    abelyao  
       2016-11-23 17:26:14 +08:00
    好像我回复之后你 update 了内容。
    对于其它数据字段,可以分开记录,比如数据字段 ajax 记录到业务服务器,图片上传到静态资源服务器之后,由静态资源服务器反馈一个结果,再记录到业务服务器;或者直接由静态资源服务器回调业务服务器的接口。
    基本上,又拍云 和 七牛 的表单上传功能都能为你的问题提供参考。
    lsylsy2
        3
    lsylsy2  
       2016-11-23 17:26:27 +08:00
    静态服务器用类似 nginx 的 proxy_store 功能,做一个镜像;
    然后 web 服务器定期扫描旧文件并(确保静态服务器上有之后)删除。
    lsylsy2
        4
    lsylsy2  
       2016-11-23 17:28:00 +08:00
    我刚才说的方法,约等于你的“静态资源服务器”是个缓存时间无限的 CDN ,当然就不用改现有代码;
    然后因为“缓存时间无限”,所以 web 服务器定期清理也不会丢失文件了。
    qwer1234asdf
        5
    qwer1234asdf  
       2016-11-23 17:28:54 +08:00
    你这,缺点跟优点是同一个。。。。怎么感觉怪怪的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2558 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.