TinkOL

  • 首页
TinkOL
好记性不如烂笔头!
  1. 首页
  2. Nginx
  3. 正文

Nginx fastcgi_cache 的坑

2020年2月12日 6046点热度 2人点赞 0条评论

这两天迁移完后发现一个奇怪的问题:我nginx里配置了两个vhost,分别是博客(www.tinkol.com)和图床(tu.tinkol.com),然后有时候,当我访问图床时,打开来的结果是博客。

遇到这种问题,第一印象是我nginx配置文件写错了?检查了下,没错啊,server_name 配置的明明白白,清清楚楚的。看日志,抓包,两个结果都是相同的,显示直接返回的200状态码。而nginx的日志,我两个vhosts的日志是分开记录的,当出现上诉情况时,tu.log里会记录一条200,然后在www.log里记录了其他页面元素的记录。

在排除了CDN配置和php-fpm错误的可能性后,我又想到了日志里那条诡异的200日志,之前没注意看,现在看发现这条日志没有upstream,也就是说没经过php-fpm处理,那可以肯定,还是nginx自己的问题了。

又重新审视了下nginx的配置文件,终于找到了原因,下面是图床(tu.tinkol.com)配置文件。

fastcgi_cache_path /data/cache/tu levels=1:2 keys_zone=tu:10m;
#省略无关配置
server {
    listen  443 ssl http2;
    server_name tu.tinkol.com;
    #省略无关配置
    location ~ \.php$ {
        fastcgi_pass   unix:/dev/shm/php-cgi.sock;
        include        /app/nginx/conf/fastcgi.conf;
        fastcgi_index   index.php;
	      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        try_files      $uri =404;

        expires -1;
        #下面这行就是根源所在
        fastcgi_cache www;
        fastcgi_cache_key $request_uri;
        fastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;
        fastcgi_cache_valid 200;
        add_header X-Cache      $upstream_cache_status;
    }
}

可以看到,我这里配置了fastcgi_cache,然后我这个配置文件是拷贝博客(www.tinkol.com)的配置文件修改的,下面的fastcgi_cache的keys_zone没有更改过来,因此两个网站使用了共同的缓存,而缓存是用request_uri做主键的,所以当直访问/这个两者共有的请求时,fastcgi_cache会直接把缓存的内容返回给客户端,就出现了这次的症状。

知道了问题根源,那就很好办了,修改完配置文件,重载nginx,至此问题解决。这次还是粗心大意导致的问题,还好是自己的网站,如果是公司业务,那麻烦可就大咯。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: nginx
最后更新:2020年2月12日

Tink

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档
  • 2021 年 6 月
  • 2021 年 4 月
  • 2020 年 9 月
  • 2020 年 3 月
  • 2020 年 2 月
  • 2019 年 5 月
  • 2019 年 4 月
  • 2019 年 1 月
  • 2018 年 10 月
  • 2018 年 9 月

COPYRIGHT © 2022 tinkol.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备15016634号-1