3

使用 nginx fastcgi_cache 时,我缓存 HTTP 200 响应的时间比任何其他 HTTP 代码都要长。我希望能够根据此代码有条件地设置 expires 标头。

例如:

fastcgi_cache_valid   200 302  5m;
fastcgi_cache_valid   any      1m;

if( $HTTP_CODE = 200 ) {
  expires 5m;
}
else {
  expires 1m;
}

是否可能出现上述情况(在位置容器内)?

4

1 回答 1

3

当然,来自http://wiki.nginx.org/HttpCoreModule#Variables

$sent_http_HEADER

The value of the HTTP response header HEADER when converted to lowercase and 
with 'dashes' converted to 'underscores', e.g. $sent_http_cache_control, 
$sent_http_content_type...; 

所以你可以在 if 语句中匹配 $sent_http_response

有一个陷阱,因为http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires没有列出 if's 作为 expires 指令的允许上下文

您可以解决在 if 块中设置变量的问题,然后像这样稍后引用它:

set $expires_time 1m;
if ($send_http_response ~* "200") {
  set $expires_time 5m; 
}
expires $expires_time;
于 2012-08-16T21:00:08.287 回答