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

2015-01-04 03:20:22 +08:00
 GavinMa
想把网站上的图片全部镜像到到七牛CDN上,可是网站程序又不能自定义图片路径,所以只能用rewrite功能去迎合七牛的镜像功能了。

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

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

在此谢过!
3314 次点击
所在节点    程序员
15 条回复
lincanbin
2015-01-04 03:52:06 +08:00
dafang
2015-01-04 08:13:46 +08:00
网站程序不支持就改代码让它支持, 301在图片多的情况下一样会拖慢你的网页加载速度.
fising
2015-01-04 08:27:41 +08:00
cname 不行吗
Showfom
2015-01-04 08:34:43 +08:00
改程序!
Doubear
2015-01-04 09:01:34 +08:00
之前我一个朋友搞过这种类似图库的东西,网站程序通过rewrite把用户读取的图片domain.com/images/xxxx.jpg 的请求映射到一个脚本上(如php),然后由这个PHP到七牛上读取对应的图片输出。说白了就是把指定URI格式下的访问请求全部转到某个脚本上,很简单的。RewriteCond RewriteRule 两个就行
huigeer
2015-01-04 09:17:18 +08:00
改程序得看你的图片存储路径是相对的/xxx/xxx.jpg还是http://xxx.xxx.com/xxx.jpg, 不行就301
gamexg
2015-01-04 09:18:29 +08:00
同意楼上的,改程序比较好,301也会影响速度.
oott123
2015-01-04 09:40:45 +08:00
哎,你们没发现重点在于,如果301到了七牛上,七牛的服务器来抓的时候也会301到他自己,然后…
rming
2015-01-04 10:55:57 +08:00
nginx

server{
......

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

......
}

第一行是透明代理,第二行是301跳转
GavinMa
2015-01-04 20:11:13 +08:00
@rming @oott123 @lincanbin 感谢大家伸出援手,各种方法我都试了下,还是不行!
@lincanbin 的方法貌似不能定义二级以上目录,只能定义域名?
@rming 的方法无法生效。
服务器就是nginx,还请继续帮忙想想怎么写规则。
网站程序用的是现成的,改起来涉及到后台上传以及前台各种调用,太过复杂,不考虑。
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
2015-01-06 18:52:40 +08:00
@rming 非常感谢你的帮助,已经搞定,附搞定后的规则写法,希望可以帮到遇到同样问题的朋友。

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

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

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

(PS.但大量图片在一页时七牛无法同步成功,是何原因呢?七牛那边的问题?)
@rming
rming
2015-01-07 09:26:36 +08:00
@GavinMa 你说的七牛的网站加速么,没用过,不太清楚
GavinMa
2015-01-07 17:01:41 +08:00
@rming 测试下来是七牛那边抓取能力的问题,靠七牛大量抓取自动同步还是不靠谱,现在在服务器上部署图片自动同步到七牛,不用他来抓取。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/158958

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX