阿里云 CDN 的 BUG 还是我自己的 nginx write 设置有误?

2017-07-30 20:13:16 +08:00
 echotpq

网站不使用 CDN 时一切正常,使用 CDN 时,主页 /index.php ,会被解析到同目录下的 /index1.php (刚开始正常,多人多刷新几次就会解析到 /index1.php ) NGINX rewrite 规则如下:

if (-f $request_filename/index.php){ rewrite (.) $1/index.php break; } if (-f $request_filename/index.html){ rewrite (.) $1/index.html break; } if (-f $request_filename/index1.php){ rewrite (.) $1/index1.php; } if (!-f $request_filename){ rewrite (.) /index1.php; }

求教解决方法。

1694 次点击
所在节点    问与答
4 条回复
ryd994
2017-07-30 21:50:51 +08:00
if is evil
用 try_files
rtfm
echotpq
2017-07-31 02:20:29 +08:00
@ryd994 能帮忙完成的修改一下吗?谢谢啦
if (-f $request_filename/index.php)
{ rewrite (.) $1/index.php break;
if (-f $request_filename/index.html)
{ rewrite (.) $1/index.html break; }
if (-f $request_filename/index1.php)
{ rewrite (.) $1/index1.php; }
if (!-f $request_filename)
{ rewrite (.) /index1.php; }
sansara14
2017-07-31 16:06:43 +08:00
你这个配置我简单理解下:匹配不到上面的三个路径将直接重定向到 index1.php

---

当有若干请求匹配不到上述三个路径后 CDN 将帮你缓存 index1.php ,这样后面用户再用同样的 URL 去访问时肯定会读到 CDN 的缓存 index1.php

CDN 的缓存策略是根据你的源站配置来匹配的,你需要检查一下你的源站是否给了 CDN 你想要的内容去缓存,这不是 CDN 的 BUG..

---

你可以参考下官方 try_files 的配置文档来修改:

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

---

或者类似的测试文章,你可以在配完后自己先验证一下

http://homeway.me/2015/05/22/nginx-rewrite-conf/

希望可以帮上忙。
echotpq
2017-07-31 17:48:47 +08:00
@sansara14 谢谢您的回复。
理论上,用户访问 http://首页.com 时,应该是请求 /index.php
我的 nginx rewrite 里面已经设置了
if (-f $request_filename/index.php)
{ rewrite (.) $1/index.php break; }
理论上,CDN 不应该把 /index1.php 的缓存输出给用户

暂时不知道哪里出了问题

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

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

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

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

© 2021 V2EX