我在让NGINX缓存我使用proxy_pass命令从Dropbox中提取的缩略图时遇到问题。在NGINX运行的同一台服务器上,我多次运行以下命令
wget --server-response --spider http://localhost:8181/1/thumbnails/auto/test.jpg?access_token=123
并使用X-Cache获得完全相同的响应:每次都是MISS
HTTP / 1.1 200好的 服务器:nginx / 1.1.19 日期:2015年3月25日星期三20:05:36 GMT 内容类型:image / jpeg 内容长度:1691 连接:保持活力 编译指示:无缓存 缓存控制:无缓存 X-Robots-Tag:noindex,nofollow,noimageindex X-Cache:MISS
这是我的nginx.conf文件的内容..关于我在这里做错了什么的想法?
## Proxy Server Caching
proxy_cache_path /data/nginx/cache keys_zone=STATIC:10m max_size=1g;
## Proxy Server Setting
server {
listen *:8181;
proxy_cache STATIC;
proxy_cache_key "$request_uri";
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
location ~ ^/(.*) {
set $dropbox_api 'api-content.dropbox.com';
set $url '$1';
resolver 8.8.8.8;
proxy_set_header Host $dropbox_api;
proxy_cache STATIC;
proxy_cache_key "$request_uri";
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
add_header X-Cache $upstream_cache_status;
proxy_pass https://$dropbox_api/$url$is_args$args;
}
##Error Handling
error_page 500 502 503 504 404 /error/;
location = /error/ {
default_type text/html;
}
}
答案 0 :(得分:7)
原来从Dropbox返回的缩略图请求包含标题
Cache-Control: no-cache
并且Nginx将遵守这些标题,除非明确忽略,这可以通过简单地使用以下将忽略任何缓存控制的配置行来完成。
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
我们还遇到了将“proxy_ignore_headers”选项放在nginx.conf文件中的不同区域的问题。最后,经过多次游戏,我们通过在“位置”块中明确设置它来使其工作。配置文件的完整片段可以在
下面找到 ## Proxy Server Caching
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:50m inactive=2h max_size=2g;
## Proxy Server Setting
server {
listen *:8181;
location ~ ^/(.*) {
set $dropbox_api 'api-content.dropbox.com';
set $url '$1';
resolver 8.8.8.8;
proxy_set_header Host $dropbox_api;
proxy_hide_header x-dropbox-thumbcachehit;
proxy_hide_header x-dropbox-metadata;
proxy_hide_header x-server-response-time;
proxy_hide_header x-dropbox-request-id;
proxy_hide_header cache-control;
proxy_hide_header expires;
add_header cache-control "private";
add_header x-cache $upstream_cache_status; # HIT / MISS / BYPASS / EXPIRED
proxy_cache STATIC;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
proxy_pass https://$dropbox_api/$url$is_args$args;
}
}
答案 1 :(得分:0)
为了缓存代理响应,Nginx和origin之间的请求应该是无cookie的:
proxy_hide_header Set-Cookie;
proxy_ignore_headers Set-Cookie;
请参阅使用失效方法的完整配置:https://gist.github.com/mikhailov/9639593