当页面缓存过期时,Nginx 会在围攻或 curl 请求下停止 proxy_cache

当页面缓存过期时,Nginx 会在围攻或 curl 请求下停止 proxy_cache

我尝试使用 nginx 的 proxy_cache 功能来提供索引页。使用浏览器进行普通浏览时,一切都运行良好。但是当我尝试使用 curl 获取页面内容或在索引页上使用 siege 时,nginx 开始工作,但效果不如我预期。当页面的缓存过期时,它会将请求进一步传递给 apache。

我不明白,为什么当使用 curl 或 siege 请求时,nginx 不创建索引页的新缓存?

以下是 nginx.conf 的一部分:

    proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:100m inactive=1m max_size=500m;

    location = / {
            set $o_uri $request_uri;

            if ( $http_cookie !~ "mytestcookie" ) {
                    rewrite ^ /ng_cache last;
            }

            proxy_pass http://127.0.0.1:88;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /ng_cache {
            internal;

            root /home/$host/www;

            proxy_cache             pagecache;
            proxy_cache_valid       200 301 302 304 1m;
            proxy_hide_header       "Set-Cookie";
            proxy_ignore_headers    "Cache-Control" "Expires";

            proxy_pass              http://127.0.0.1:88$o_uri;
            proxy_set_header        Host             $host;
            proxy_set_header        X-Real-IP        $remote_addr;
    }

答案1

您的配置中的行proxy_hide_header Set-Cookie表明您的后端返回 Set-Cookie 标头,这将阻止 nginx 缓存此类响应默认情况下proxy_ignore_headers。您可能希望在配置中添加 Set-Cookie :

proxy_ignore_headers    Cache-Control Expires Set-Cookie;

文档了解详情。

相关内容