Nginx变量缓存时间

Nginx变量缓存时间,nginx,fastcgi,Nginx,Fastcgi,我目前正在使用fastcgi\u cache,希望将一个变量传递给fastcgi\u cache\u valid,以便根据文件拥有可变的缓存时间。但它似乎不会接受一个变量 我尝试了以下方法: set $cache_time 15s; fastcgi_cache_valid 200 ${cache_time}; fastcgi_cache_valid 200 $cache_time; set $cache_time "15s"; fastcgi_cache_valid 200 ${cache_

我目前正在使用
fastcgi\u cache
,希望将一个变量传递给
fastcgi\u cache\u valid
,以便根据文件拥有可变的缓存时间。但它似乎不会接受一个变量

我尝试了以下方法:

set $cache_time 15s;
fastcgi_cache_valid 200 ${cache_time};
fastcgi_cache_valid 200 $cache_time;


set $cache_time "15s";
fastcgi_cache_valid 200 ${cache_time};
fastcgi_cache_valid 200 $cache_time;


set $cache_time 15;
fastcgi_cache_valid 200 ${cache_time}s;
fastcgi_cache_valid 200 $cache_time;
但我收到了以下错误:

nginx: [emerg] invalid time value "$cache_time" in /etc/nginx/conf.d/www.com.conf:118

nginx: [emerg] directive "fastcgi_cache_valid" is not terminated by ";" in /etc/nginx/conf.d/www.com.conf:118

fastcgi\u cache\u valid
不接受变量,但如果只有两个选项
cached
not cached
,则有一个解决方法

在本例中,我们希望
cached.php
返回缓存版本,如果url包含参数,则返回非缓存版本。这意味着
cached.php
将始终重新返回缓存版本,而
cached.php?id=1
将始终返回非缓存版本

location = /cached.php {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
  set $disable_cache 1;
  if ( $request_uri = "/cached.php" ){
    set $disable_cache 0;
  }
  fastcgi_cache phpcache;
  fastcgi_cache_valid 200 1h;
  fastcgi_cache_methods GET HEAD;
  fastcgi_cache_bypass $disable_cache;
  fastcgi_no_cache $disable_cache;
  add_header X-Is-Cached "Cache disabled $disable_cache";
}
这是用于测试的
cached.php
的内容

<?php echo "The time is " . date("h:i:sa")."\n";?>
curl--head”http://www.example.com/cached.php?id=1“


X-Is-Cached
仅用于调试,不需要。

并非所有nginx指令都允许变量。为什么要在这里使用变量?在几个fastcgi后端语句中定义相同的服务器,每个语句都可以有自己的缓存值…@AlexeyTen我希望所有页面的标准缓存时间相对较短。但我有2-3个页面,由于加载需要5秒以上的时间,而且每隔几天或几周就要对内容进行一次非必要的更改,因此缓存时间应该要长得多。您可以通过
x-accel-*
标题从fastcgi端控制缓存时间。有关详细信息,请参见nginx文档
 HTTP/1.1 200 OK
 Server: nginx/1.14.0 (Ubuntu)
 Date: Thu, 31 Dec 2020 17:07:55 GMT
 Content-Type: text/html; charset=UTF-8
 Connection: keep-alive
 X-Fastcgi-Cache: HIT
 X-Is-Cached: Cache disabled 0
 HTTP/1.1 200 OK
 Server: nginx/1.14.0 (Ubuntu)
 Date: Thu, 31 Dec 2020 17:09:15 GMT
 Content-Type: text/html; charset=UTF-8
 Connection: keep-alive
 X-Fastcgi-Cache: BYPASS
 X-Is-Cached: Cache disabled 1