Nginx proxy_cache 不适用于静态文件(始终“MISS”)

Nginx proxy_cache 不适用于静态文件(始终“MISS”)

我的 nginx 配置中有这个:

nginx.conf,http部分:

proxy_cache_path /var/tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=600m use_temp_path=off;
proxy_buffering on;

然后在我的网站配置中有以下部分:

location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|svg)$ {
        proxy_cache my_cache;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 1;
        proxy_pass http://my.backend;
        add_header X-Cache-Status $upstream_cache_status;
}

每当我发出请求时,NGINX 都会响应

X-Cache-Status: MISS

标头。示例响应:

HTTP/1.1 200 OK
Server: nginx/1.13.8
Date: Mon, 12 Feb 2018 08:32:47 GMT
Content-Type: application/javascript 
Content-Length: 40802
Connection: keep-alive 
Last-Modified: Sun, 11 Feb 2018 06:31:40 GMT
ETag: "9f62-564e9ea066b00" 
Vary: Accept-Encoding 
X-Cache-Status: MISS
Accept-Ranges: bytes

并向我的后端发出同样的请求:

HTTP/1.1 200 OK 
Date: Mon, 12 Feb 2018 08:22:32 GMT 
Server: Apache/2.4.7 (Ubuntu) 
Last-Modified: Sun, 11 Feb 2018 06:31:40 GMT
ETag: "9f62-564e9ea066b00" 
Accept-Ranges: bytes
Content-Length: 4080
Vary: Accept-Encoding 
Content-Type: application/javascript

我错过了什么?

答案1

我还没有资格发表评论,因此我将使用答案来代替:

到目前为止,您的配置看起来不错。

  1. /var/tmp/nginx_cache你的 nginx 用户是否可以写入?

  2. 您提到“每当我发出请求时”。但是您连续发出了多个请求,对吗?因为只要资源尚未在缓存中,第一个请求就始终是 MISS。

  3. 尝试添加:

    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 10m;
    

顺便说一句,^.+您的位置正则表达式中的部分似乎是多余的。

相关内容