2015-06-24 138 views
0

我做了以下捲曲-X GET -I -H 「緩存控制:無緩存」 不繞過

$ curl -X GET -I -H "Cache-Control: no-cache" https:/myserver/myimage.jpg 
HTTP/1.1 200 OK 
Server: nginx/1.4.6 (Ubuntu) 
Date: Wed, 24 Jun 2015 22:55:31 GMT 
Content-Type: image/jpeg 
Content-Length: 37502 
Connection: keep-alive 
Etag: "wzsdm-1434973626-37502-1204291434" 
Cache-Control: max-age=604800, public 
Expires: Wed, 01 Jul 2015 22:43:01 GMT 
X-Proxy-Cache: HIT 

在哪裏我希望得到以下代替

X-Proxy-Cache: BYPASS 

我在Nginx上的配置如下:

location ~* \.(?:jpg|jpeg|gif|png|pdf|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { 
     proxy_cache my_zone; 
     add_header X-Proxy-Cache $upstream_cache_status; 

     include proxy_params; 
     proxy_pass http://my-backend; 
    } 

有沒有我可以錯過的配置?

+0

我猜你需要http://nginx.org/r/proxy_cache_bypass。 'Cache-Control'標頭用於瀏覽器,不用於服務器。 –

+0

是的我知道「緩存控制:無緩存」是用於瀏覽器。在Chrome中,它會發送'Cache-Control:max-age = 0'。 我已經包含了proxy_cache_bypass,並且它沒有BYPASS緩存。 –

+0

你包括什麼? –

回答

1

默認情況下,Nginx的緩存不符合Cache-Control:no-cache請求標頭,也不符合Pragma:no-cache請求標頭。當用戶代理髮送這些請求頭時,您必須顯式配置Nginx繞過緩存並將請求傳遞到原始服務器。

添加以下行到您的配置文件:

proxy_cache_bypass $http_pragma; 
proxy_cache_bypass $http_cache_control; 

如何處理NGINX的附註中?

Pragma:客戶端添加no-cache頭以繞過所有的 中間緩存,並直接進入 請求的內容的原始服務器。 NGINX不兌現默認情況下, 附註頭,但你可以用下面的 proxy_cache_bypass指令配置的功能: