我正在使用 php-fpm 和 nginx 作为 http 服务器(我不太了解反向代理,我只是安装了它并没有触及任何东西),没有使用 Apache 或 Varnish。
我需要 nginx 理解并遵守我发送的 http 标头。我尝试使用此配置(取自文档)但没有成功:
/etc/nginx/nginx.conf:
fastcgi_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=website:10m inactive=10m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
/etc/nginx/sites-available/网站:
server {
fastcgi_cache website;
#fastcgi_cache_valid 200 302 1h;
#fastcgi_cache_valid 301 1d;
#fastcgi_cache_valid any 1m;
#fastcgi_cache_min_uses 1;
#fastcgi_cache_use_stale error timeout invalid_header http_503;
add_header X-Cache $upstream_cache_status;
}
我总是得到“MISS”,并且缓存目录为空。如果我取消注释其他指令,我会得到命中,但我不想要那些“愚蠢”的设置,我需要在后端控制它们。例如,如果我的后端说“public,s-maxage=10”,则缓存应在 10 秒后被视为过期。相反,由于这些指令,nginx 会将其存储 1 小时。
我在想我是否应该尝试 proxy_cache,不确定有什么区别。在 fastcgi 和代理模块文档中都说了这一点:
The cache honors backend's Cache-Control, Expires, and etc.
since version 0.7.48, Cache-Control: private and no-store only
since 0.7.66, though. Vary handling is not implemented.
nginx 版本:nginx/1.1.19
有什么想法吗?
pd:我还使用了 Symfony2 提供的反向代理(我将其关闭以使用 nginx 的代理)。它可以正确解释标头,所以我认为我做得对。
答案1
显然 nginx 无法识别此标头:Cache-Control: public, s-maxage=10
。我尝试使用 maxage 并且工作正常。
我想知道其他缓存是否可以起作用(ETag,Last Modified等)...