我的 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
我还没有资格发表评论,因此我将使用答案来代替:
到目前为止,您的配置看起来不错。
/var/tmp/nginx_cache
你的 nginx 用户是否可以写入?您提到“每当我发出请求时”。但是您连续发出了多个请求,对吗?因为只要资源尚未在缓存中,第一个请求就始终是 MISS。
尝试添加:
proxy_cache_key $host$uri$is_args$args; proxy_cache_valid 200 10m;
顺便说一句,^.+
您的位置正则表达式中的部分似乎是多余的。