Ngnix:当静态资源不存在时重定向

查看源码

最近又没干啥“正经”事儿,倒是把苹果教程网重新装修了一遍,启用了 W3 TOTAL CACHE,配置了我两天终于达到了理想中的效果。


下面记录一下处理过程中遇到的一个小问题,当静态资源不存在时重定向的问题


搞个网站真辛苦,写代码(旁白:还有 CSS !!)就算了,还要会配置服务器,看各种参数= =


下面是正文:


使用场景


服务器 A(网站服务器,www.abc.com):请求 cdn.abc.com/a.png


服务器 B(CDN 服务器,cdn.abc.com):接受请求,发现 a.png 不存在,重定向至 www.abc.com/a.png


如果你使用过 W3TC,应该对这个比较熟悉,选择 【Self Hosted CDN】就是这么个效果。


解决方案


在服务器 B 对应的 nginx 配置文件(一般在 /usr/local/nginx/conf/nginx.conf)中的 server 大括号里增加如下内容:


 


location ^~ /static/
{
try_files $uri @ppios;
}

location @ppios
{
rewrite ^(.)$ http://www.abc.com/$1;
}

其中第一个 location 的意思是所有对 static 这个目录下的请求,如果你的文件就放在根目录,也可以写成 location /。甚至如果你只处理静态文件,可以写成 location ~//*(gif|png)$ 等等。[1]


括号里面的意思是尝试 serve 这个请求的文件,如果不成功就转到 ppios。


在 ppios 里,我们做了重定向,具体的语法就是标准的正则,不再赘述了。


参考资料


[1] Nginx Location http://wiki.nginx.org/HttpCoreModule#location


[2] Nginx try_files http://wiki.nginx.org/HttpCoreModule#try_files