1
honk 2017-05-19 18:07:53 +08:00
用插件吧,比如 w3-total-cache,有相关设置
|
2
ryd994 2017-05-19 18:09:26 +08:00
因为这个 rewrite 是内部 rewrite 啊
建议使用 wp 的相关插件,会自动替换输出 或者使用 sub_filter 和 subs_filter 不过有各种麻烦,没经验还是上插件吧 |
3
hl 2017-05-19 18:12:38 +08:00
$host = "www.a.com/wp-content/uploads/"
这个条件不对,$host 只包含访问过来的域名,不带路径,所以这个条件永远不会被匹配上 |
4
imrei OP @honk w3 必须要开启 ftp 才可以,我之前就是开了 ftp,但现在 ftp 有点纠结不能用了,所以需要换掉。。。
@ryd994 有合适的插件吗?一只木有找到 @hl 我根据你的改了,但还是不行,麻烦能看看还需要哪里改吗 T_T location ~* ^www.a.com { rewrite ^/wp-content/uploads/(.*)$ https://cdn.s.com/wp-content/uploads/$1 permanent; } |
7
hl 2017-05-19 22:56:06 +08:00
@imrei 不是不是,有些混乱,我跟你细说一些
做重定向,nginx 有两种方法,你说的那两种方法都可行。只是匹配的条件没写对而已 一种方式:直接使用 location 的正则匹配,然后 rewrite 第二种方式:通过 if 语句结合正则判断路径,然后 rewrite 个人觉得只通过 location 就足以实现你想要的 我给你个网上的例子,实测了下是可以的 例子中匹配的扩展名有些多,如果你只是 jpg 的,就保留 jpg 就可以。 location ~ ^/wp-content/uploads/.*.(jpe?g|gif|css|png|js|ico|pdf|m4a|mov|mp3)$ { rewrite ^ http://cdn.domain.com$request_uri? permanent; } 测试:( location 已经能被转发了,只需要替换你自己的 cdn 域名就可以了) curl -I 127.0.0.1:8000/wp-content/uploads/test1.jpg HTTP/1.1 301 Moved Permanently Server: openresty Date: Fri, 19 May 2017 14:49:04 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: http://cdn.domain.com/wp-content/uploads/test1.jpg |
8
hl 2017-05-19 22:59:21 +08:00
@imrei
还有啊,我把你的配置上,直接测试,也是可以的啊 比如这个: location ~* ^/wp-content/uploads/ { rewrite ^/wp-content/uploads/(.*)$ https://cdn.s.com/wp-content/uploads/$1 permanent; } 测试: curl -I 127.0.0.1:8000/wp-content/uploads/test1.jpg HTTP/1.1 301 Moved Permanently Server: openresty Date: Fri, 19 May 2017 14:58:08 GMT Content-Type: text/html Content-Length: 178 Connection: keep-alive Location: https://cdn.s.com/wp-content/uploads/test1.jpg 都 OK 的啊 |
9
tSQghkfhTtQt9mtd 2017-05-19 23:43:03 +08:00 via Android
直接上插件 CDN Enabler,你这方案太不优雅了。。。哪有 301 到 CDN 的。。。
|
10
ryd994 2017-05-19 23:46:37 +08:00 via Android
|
12
jalena 2017-05-20 03:25:08 +08:00
```// CDN
function qiniu_cdn($buffer){ $cdnstr = '//oh8ipvbpu.qnssl.com'; $buffer = str_replace(array(get_stylesheet_directory_uri()), $cdnstr . '/wp-content/themes/' . get_template(), $buffer); $buffer = str_replace(array(includes_url( '/js/')), $cdnstr . '/wp-includes/js/', $buffer); $buffer = str_replace(array(plugins_url()), $cdnstr . '/wp-content/plugins', $buffer); $buffer = str_replace(array(wp_upload_dir()['baseurl']), $cdnstr . '/Upfiles', $buffer); return $buffer; } // 打开缓冲区并送出缓冲区内容 function qiniu_cdn_flush(){ ob_start("qiniu_cdn"); if(ob_get_level() > 0) ob_flush(); } // 清除缓冲区 function qiniu_cdn_clear(){ if(ob_get_level() > 0) { ob_end_clean(); } } // 根据情况加载函数 if ( is_admin() ) { if (ob_get_level() > 0) { do_action('admin_init', 'qiniu_cdn_clear'); } } else { add_action('after_setup_theme', 'qiniu_cdn_flush'); }``` |
13
J0022ZjV7055oN64 2017-05-20 10:58:53 +08:00
js css 还可以弄 static 你这弄啥 cdn 啊 你这方案太不优雅了+1
|
14
imrei OP @jalena @hl 谢谢两位,但我这里居然都失败 T_T
@liwanglin12 @yansyuei 国内云主机带框太贵,才 1m,我又一个地方是双线联通+电信,各 20m 的,所以想吧图片都放过去。。。CDN Enabler 试过了,无效。。。不知道要不要修改哪里。。。 @ryd994 谢谢,w3 的插件我把 ftp 信息去掉了,第一次知道原来可以这样用 T_T 不过想请教下,我是因为有双线 20m 带宽的机器,想把 uploads 目录放到那个机器上。但现在还有个问题,我在 wordpress 上传图片后,如果不是通过 w3 的 ftp 远程附件,还有什么办法可以把这些图片导入到远程 cdn 服务器上的 uploads 目录吗? 我试过 rsync,但只能设定时间扫描文件是否有修改再上传。。。由于我图片较多,我设置 3 秒扫描一次,又怕这样服务器会死很惨 T_T |
15
ryd994 2017-05-20 13:02:38 +08:00
@imrei 看你用的哪家了,很多 CDN 是有镜像 /pull 模式的,设置一个专用的二级域名,对方会给你反代并缓存
其他的一般有上传接口,可以在 w3 里配置自动上传,具体情况具体讨论 |
16
imrei OP @ryd994 你用的专有 cdn 啊?我用的是自己服务器搭建的。。。现在还在搞 nfs、cifs、afp、sftp 哪个可以直接挂载。。。
|
18
imrei OP @ryd994 不会...我今天搞 afp、nfs ? cifs 挂载都快吐了...别的技术我更不会了...
|
19
ryd994 2017-05-20 18:45:07 +08:00 via Android
|
20
imrei OP @ryd994 我不是很懂技术,这么设置的话,我在 wordpress 发布图片附件时,可以自动导入到 cdn 服务器上吗?
|
21
J0022ZjV7055oN64 2017-05-20 20:24:49 +08:00
@imrei #14 图片可以放在 cos oss upyun qiniu
|
22
ryd994 2017-05-20 21:22:32 +08:00 via Android
@imrei 这样的话就和又拍,七牛之类的 pull 模式差不多意思了。当然商业产品要复杂得多。
图片发布时是在源服的。缓存服务器如果 miss 就会回源然后保存,之后的访问就不会再回源了。 |
23
imrei OP |
24
ryd994 2017-05-20 21:42:18 +08:00 via Android
@imrei 商业服务挂了这不是理由。自建怎么就能比商业服务可靠性更高?你要投入多少精力维护?
CDN 你可以选那些可以绑 cname 的,绑个子域名上去,然后用 w3 选 mirror 模式 |
25
imrei OP @ryd994 301 这个问题我已经通过 w3 这个插件继续了。但现在就是遇到附件上传如何能自从远程附件到我搭建的 cdn server 里,不要 ftp 和 ftps。。。但 w3 不支持 sftp,不知道有什么推荐吗? sftp 插件。。。rsync、nfs、cifs、afp 等等同步。。。我这几个同步因为在 mac 上,所以都失败了。。。T_T
|
26
ryd994 2017-05-21 02:45:26 +08:00 via Android
@imrei 你没懂我意思
反代第一个请求自动回源不就好了,反正只回源一次,不要吊死在 push 这棵树上,pull 也可以啊 |
27
jalena 2017-05-21 11:35:55 +08:00
@imrei 怎么会,你这种情况只能在 php 里面处理,取出所有 url,根据需求将需要的 url 在输出的时候替换即可,!
|
28
jalena 2017-05-21 11:36:48 +08:00
@imrei https://jalena.bcsytv.com/archives/1445 这里你可以去看看!
|