我有一个Ubuntu 12.04机器上运行的nginx 1.4.3。 我有nginx设置caching页面(他们是数据库驱动,但保持相当静态)。 我正在使用MySQL和PHP-FPM。
但是,我发现我会间歇性地获取空白页面caching。 没有任何错误,只要从/var/cache/nginx删除相应的文件,页面就会回来。
经过一番调查,我发现问题是,如果收到一个HEAD请求,nginxcaching一个空的响应作为该URL的完整响应。 所以HEAD /example在/example页面的caching文件中存储一个空白文件,后续的GET /example返回一个空白页面。 (我似乎经常从各种search引擎和机器人获得HEAD请求。)
这里是相关的网站configuration:
location ~ \.php$ { try_files $uri =404; fastcgi_cache one; fastcgi_cache_key $scheme$host$request_uri; fastcgi_cache_valid 200 5m; fastcgi_cache_valid 301 302 304 12h; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /srv/www/mysite/public$fastcgi_script_name; fastcgi_param HTTPS off; }
这是一个在Nginx中的已知错误? 通过各种search,我还没有find任何有关这方面的信息。
有没有解决方法? 根据这个,无法防止cachingHEAD请求。
我想也许有一些'请求方法'variables可以添加到fastcgi_cache_key ,以便HEAD和GET请求分开caching。 但我什么都找不到
是的,variables是$request_method ,这就是你想要添加到fastcgi_cache_key 。 这将导致GET和HEAD请求被分开caching。
我相信你会想要将http方法添加到fastcgi_cache_key或者可能只在fastcgi_cache_methods包含GET 。