这两天迁移完后发现一个奇怪的问题:我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,至此问题解决。这次还是粗心大意导致的问题,还好是自己的网站,如果是公司业务,那麻烦可就大咯。
文章评论