这两天迁移完后发现一个奇怪的问题:我nginx里配置了两个vhost,分别是博客(www.repfaststart.com
)和图床(tu.repfaststart.com
),然后有时候,当我访问图床时,打开来的结果是博客。
遇到这种问题,第一印象是我nginx配置文件写错了?检查了下,没错啊,server_name 配置的明明白白,清清楚楚的。看日志,抓包,两个结果都是相同的,显示直接返回的200状态码。而nginx的日志,我两个vhosts的日志是分开记录的,当出现上诉情况时,tu.log里会记录一条200,然后在www.log
里记录了其他页面元素的记录。
在排除了CDN配置和php-fpm错误的可能性后,我又想到了日志里那条诡异的200日志,之前没注意看,现在看发现这条日志没有upstream,也就是说没经过php-fpm处理,那可以肯定,还是nginx自己的问题了。
又重新审视了下nginx的配置文件,终于找到了原因,下面是图床(tu.repfaststart.com
)配置文件。
1 | fastcgi_cache_path /data/cache/tu levels=1:2 keys_zone=tu:10m; |
可以看到,我这里配置了fastcgi_cache,然后我这个配置文件是拷贝博客(www.repfaststart.com
)的配置文件修改的,下面的fastcgi_cache的keys_zone没有更改过来,因此两个网站使用了共同的缓存,而缓存是用request_uri做主键的,所以当直访问/这个两者共有的请求时,fastcgi_cache会直接把缓存的内容返回给客户端,就出现了这次的症状。
知道了问题根源,那就很好办了,修改完配置文件,重载nginx,至此问题解决。这次还是粗心大意导致的问题,还好是自己的网站,如果是公司业务,那麻烦可就大咯。