我有一个非常简单的代理configuration:
http { proxy_cache_path /var/www/cache levels=1:2 keys_zone=s3-images-cache:50m inactive=1M max_size=1000m; proxy_temp_path /var/www/cache/tmp; server { listen 80; server_name images.example.com; location / { proxy_cache s3-images-cache; proxy_cache_key $scheme$proxy_host$uri$is_args$args; proxy_cache_bypass $http_purge_cache; proxy_cache_valid any 1y; proxy_pass http://images-example.s3.amazonaws.com; add_header X-Cache $upstream_cache_status; proxy_intercept_errors on; error_page 404 = @no_image; } location @no_image { return 403; } } }
现在在这里跟我来:
但是,如果我们此时检查/ var / www / cache /文件夹,则会看到没有为此请求创buildcaching项目。 那么这是否意味着Nginx将caching保存在内存中,并忘记写入文件?
如果我们检查/ var / www / cache /,我们将看到现在最终为这个请求创build了caching文件。 在caching的文件里面看,我们看到这是我们的形象。
我唯一的解释是,似乎Nginx正在caching内存中的响应,并且当我们在代理响应中的自定义error_page出现错误时,不会写入文件。 此外,当使用proxy_cache_bypass时,它不会覆盖内存中的caching,以便后续对同一项的请求将使用存储在内存中的旧caching而不是caching文件夹中创build的新caching。
有人请让我知道如果我做错了什么,或者这真的是一个错误。 用了最后3天的战斗。
更新:后端返回您将期望从S3和200响应的正常的标头集:
404
Connection:close Content-Type:application/xml Date:Fri, 20 Nov 2015 07:41:39 GMT Server:AmazonS3 Transfer-Encoding:chunked x-amz-id-2:bH8L/1dOVGShsGJdZZ/zS/X6UkHS+KMAxDxnPvOkIalpPphFJXr9zZ1RiV6L2a13NXoZ3QdCOeE= x-amz-request-id:D66FDBFAA9643252
200
Accept-Ranges:bytes Connection:keep-alive Content-Length:10533 Content-Type:image/jpeg Date:Fri, 20 Nov 2015 07:47:12 GMT ETag:"061b4dae0b2bbdf4a4fa212951f4ba79" Last-Modified:Wed, 11 Nov 2015 14:29:09 GMT Server:AmazonS3 x-amz-id-2:qsSmH/gkvql2jnj67p0vguZBXQJHfS+Yk70llBaDvbgH0xSCbvj9G9JlKn5WhWTdty0+JzApN7k= x-amz-request-id:8CF04EA869190E63