V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GavinMa
V2EX  ›  程序员

帮忙看看这个 rewrite 该怎么写?

  •  
  •   GavinMa · 2015-01-04 03:20:22 +08:00 · 3431 次点击
    这是一个创建于 3602 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想把网站上的图片全部镜像到到七牛CDN上,可是网站程序又不能自定义图片路径,所以只能用rewrite功能去迎合七牛的镜像功能了。

    原始: http://www.domian.com/images/2014/20141111.jpg
    镜像: http://domain.qiniudn.com/images/2014/20141111.jpg

    说白了就是,凡是/images/目录下的文件请求访问,域名都变一下,目录不变。
    怎么写rewrite规则呢?

    在此谢过!
    15 条回复    2015-01-07 17:01:41 +08:00
    lincanbin
        1
    lincanbin  
       2015-01-04 03:52:06 +08:00 via Android
    dafang
        2
    dafang  
       2015-01-04 08:13:46 +08:00
    网站程序不支持就改代码让它支持, 301在图片多的情况下一样会拖慢你的网页加载速度.
    fising
        3
    fising  
       2015-01-04 08:27:41 +08:00 via iPad
    cname 不行吗
    Showfom
        4
    Showfom  
       2015-01-04 08:34:43 +08:00
    改程序!
    huigeer
        6
    huigeer  
       2015-01-04 09:17:18 +08:00
    改程序得看你的图片存储路径是相对的/xxx/xxx.jpg还是http://xxx.xxx.com/xxx.jpg, 不行就301
    gamexg
        7
    gamexg  
       2015-01-04 09:18:29 +08:00
    同意楼上的,改程序比较好,301也会影响速度.
    oott123
        8
    oott123  
       2015-01-04 09:40:45 +08:00 via Android
    哎,你们没发现重点在于,如果301到了七牛上,七牛的服务器来抓的时候也会301到他自己,然后…
    rming
        9
    rming  
       2015-01-04 10:55:57 +08:00   ❤️ 2
    nginx

    server{
    ......

    location /images/ {
    proxy_pass http://admin.ayi800.dev/images/;
    #rewrite ^(.*)$ http://domain.qiniudn.com$1 break;
    }

    ......
    }

    第一行是透明代理,第二行是301跳转
    GavinMa
        10
    GavinMa  
    OP
       2015-01-04 20:11:13 +08:00
    @rming @oott123 @lincanbin 感谢大家伸出援手,各种方法我都试了下,还是不行!
    @lincanbin 的方法貌似不能定义二级以上目录,只能定义域名?
    @rming 的方法无法生效。
    服务器就是nginx,还请继续帮忙想想怎么写规则。
    网站程序用的是现成的,改起来涉及到后台上传以及前台各种调用,太过复杂,不考虑。
    rming
        11
    rming  
       2015-01-05 09:29:32 +08:00
    @GavinMa nginx安装了ngx_http_proxy_module了么,求人不如求己,http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
    GavinMa
        12
    GavinMa  
    OP
       2015-01-06 18:52:40 +08:00   ❤️ 1
    @rming 非常感谢你的帮助,已经搞定,附搞定后的规则写法,希望可以帮到遇到同样问题的朋友。

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    rewrite ^(.*)/images/(.*)$ http://domain.qiniudn.com/images/$2 permanent;
    }

    -----------
    第一行的意思是严谨按大小写匹配整站的图片(先限定了文件类型)
    第三行的意思是源站中所有http://domain.com/images/下的文件,都永久重定向到七牛CDN相同的URL下。

    在七牛空间设置处设置镜像源网址,每当访客请求源站资源时,资源自动同步到七牛。
    首次较慢,上服务器用命令行工具先同步第一遍,大功告成。
    GavinMa
        13
    GavinMa  
    OP
       2015-01-06 21:50:04 +08:00
    上面的方法只能在七牛空间已经存在时使用,新图片七牛来抓取同步时会陷入死循环,正如
    @oott123 所言,所以我想出来一个解决办法是:1、在nginx下新添加一个网站(如:cdn.domain.com),目录于源网站一致,nginx不用做特别设置;2、在七牛设置镜像源时填写新网站网址cdn.domain.com。有了这个跳板,七牛能同步了!

    (PS.但大量图片在一页时七牛无法同步成功,是何原因呢?七牛那边的问题?)
    @rming
    rming
        14
    rming  
       2015-01-07 09:26:36 +08:00
    @GavinMa 你说的七牛的网站加速么,没用过,不太清楚
    GavinMa
        15
    GavinMa  
    OP
       2015-01-07 17:01:41 +08:00
    @rming 测试下来是七牛那边抓取能力的问题,靠七牛大量抓取自动同步还是不靠谱,现在在服务器上部署图片自动同步到七牛,不用他来抓取。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1432 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:37 · PVG 01:37 · LAX 09:37 · JFK 12:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.