如何告诉 nginx 尊重后端的缓存?

如何告诉 nginx 尊重后端的缓存?

我正在使用 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等)...

相关内容