Nginx不缓存返回值200为空的解决方案

在日志里发现不少状态码是200,但是内容长度为0的记录,由于nginx做了缓存,这样的话会导致后面的响请求也为空的现象。

Nginx不缓存返回值200为空的解决方案

暂且不判断是否程序问题还是请求那方的网络问题,但是现在要nginx输出响应的长度是否为0来判断是否要缓存当前的响应。

 

首先需要在nginx的http配置节内添加map变量:

map $upstream_http_content_length $flag_cache_empty {
        default         0;
        0               1;}

然后在nginx的配置文件目录下新建一个名字为disable_empty_response_cache.conf的配置文件,文件内容如下

fastcgi_no_cache $flag_cache_empty;
fastcgi_cache_bypass $flag_cache_empty;

这个文件中定义了fastcgi_no_cache和 fastcgi_cache_bypass的值为$flag_cache_empty,也就是说如果响应为空则不做缓存。

最后一步,需要在使用了nginx缓存的location中引用disable_empty_response_cache.conf文件,如下示例:

Nginx不缓存返回值200为空的解决方案

这样的话nginx就不会缓存那些空响应的了。

当然上面的不一定要写成配置文件形式

 

正文完
 
评论(没有评论)