nginx purge更新缓存404错误

  • A+
所属分类:Nginx

nginx默认安装就会带有反向代理的功能,但想要更好的使用,还得配备frickle.com的ngx_cache_purge模块,用于清除指定URL的缓存。ngx_cache_purge在安装的nginx的时候一起编译进去了,缓存功能一直正常。
文件地址:www.abc.com/includes/templates/zcen/buttons/english/button_in_cart.gif
如下图:

nginx 404

nginx purge 清理缓存失败

但是清理缓存的时候竟然会404
地址:www.abc.com/purge/includes/templates/zcen/buttons/english/button_in_cart.gif

nginx 404

nginx purge 清理缓存失败

百思不得其解,网上遇到nginx清理缓存出现404的用户不在少数,网上一共有如下3中情况:
1、  ngx_cache_purge版本与nginx版本不匹配
换了一个版本的purge,发现依旧无效

2、  nginx启动方法不对
很多人安装完nginx,仅仅reload一次nginx,实际上应该stop之后在start。这不是我的解决方法。

3、  purge未编译到nginx中
肯定不是这个问题,nginx –V能查看编译参数

因为有其他事情,这个事情暂且搁置了,一天闲来无事,看着nginx的配置文件发呆,突然发现自己犯了一个很大的错误:purge的location放错了位置。

错误配置文件:

正确配置文件:

细心的兄弟很快能发现我把purge的位置放错了,每次更新图片缓存的时候它都只匹配到了图片后缀的location,接着就返回了404,根本没有匹配到purge这个location的机会。把purge调到前面就正常了。

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:16   其中:访客  12   博主  0   引用   4

    • Aceslup 9

      博主,这个是location块匹配顺序的问题吧。啥时候开坛做法?

        • 默北 默北 6

          @Aceslup 嗯。 优先级也要考虑下。 这个其实可以把purge优先级弄高。参见:http://www.ttlsa.com/nginx/nginx-location-configure/

            • Aceslup 9

              @默北 @默北 我有个小问题尤其不理解。希望你能抽空帮我解惑。先说下架构吧。代理nginx,后端应用php+nginx。
              经常在网上看到这样的配置。location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; }。有很多解释。一些称为缓存在客户端浏览器。一些称为缓存到前端代理,不经过php应用。so,那么问题来了:
              1、这个location块应该放在代理nginx,还是后端应用的nginx。(假如是我这个架构)
              2、就是网上的解释哪个正确。
              3、这些gif,jpg…在哪个位置。(因为有时候做自定义页面跳转时经常读不到图片,虽然能正常跳转了)
              不知道这些问题是否很低级,但总算是我的一个学习过程。希望@默北或大伙能帮我解惑。在这谢谢大家了。

                • 默北 默北 6

                  @Aceslup 配置在后端好。
                  上面解释的也对。
                  非源服务器不管前面有多少层代理,你都可以把代理当成浏览器来看待。

                    • Aceslup 9

                      @默北 @默北
                      1、测试时这个jpg的location放置在后端。但在前端代理中,gif|jpg|jpeg|png|bmp|swf这些文件缓存在哪呢?
                      2、另外,在做jpg的location时如果只简单的写expires,这些图片的去读的根路径默认是从server块下root根还是nginx默认的html根?(测试时.php的location下有指定root /images,图片在/images下。在server块上加root /images能访问到图片。去掉server块下的root指令,图片404。)
                      3、当然,我在考虑是否是因为.jpg的请求发现没有匹配的location块所以图片出现404。最后添加一个默认的location / { root /images; },发现还是图片404。这下有些醉了。
                      具体配置如下(这个是能正常访问图片的):
                      server {
                      listen 80;
                      server_name web1.com;
                      index index.php index.htm index.html;
                      root /images;
                      #location / {
                      # root /images;
                      #}
                      location ~ .php$ {
                      # root /images;
                      fastcgi_pass 127.0.0.1:9000;
                      fastcgi_index index.php;
                      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                      include fastcgi_params;
                      }
                      location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; }
                      location ~ .*.(js|css)?$ { expires 12h; }
                      }

              • 尼玛坑爹货 9

                楼主,尼玛就一COPY党,路径不要搞错了好不,搞得半天cache都是404错误。

                • 细节决定成败! 9

                  确实,好文章!

                  • iSeeUFO网 0

                    图看不到了

                      • 邓贇 7

                        @iSeeUFO网 图片再一次迁移过程中丢失了, 其实没有图片关系也不大.

                      • tt 9

                        就你这文章靠谱,如果是的位置不对,nginx直接将purge发送到源站请求,删除失败

                          • 尼玛坑爹货 9

                            @tt 他妈的楼主就一copy党,错误的路径怎么可能删除到缓存。

                          • dev 9

                            多谢

                          • 来自外部的引用: 4

                            • nginx本地缓存模块ngx_slowfs_cache
                            • nginx+yii奇怪的404问题
                            • nginx教程从入门到精通 | learsu
                            • nginx 基础文档