我配置了Nginx緩存,主要工作在Nginx's own documentation關閉。當我撥打應使用curl
進行緩存的URL時,它的工作原理與預期完全相同:第一次請求時爲MISS
,後續請求時爲HIT
。但是,當我在任何主要瀏覽器中調用相同的URL時,每次都會得到MISS
- 即使該相同的URL剛被curl
調用並被緩存。Nginx代理緩存工作的捲曲,但不是瀏覽器
這裏是我的Nginx的配置:
proxy_cache_path /tmp/nginx levels=1:2 keys_zone=lb_cache:10m inactive=60m use_temp_path=off;
proxy_cache_key "$request_method$host$request_uri";
proxy_cache_lock on;
proxy_cache_use_stale updating;
server {
location/{
proxy_cache lb_cache;
proxy_ignore_headers Expires;
proxy_hide_header Expires;
proxy_cache_valid 200 60m;
proxy_cache_revalidate on;
proxy_no_cache $no_cache;
proxy_cache_bypass $http_cache_control $http_pragma $cookie_nocache $arg_nocache;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://webservers;
if ($request_uri ~* "/(admin/)") {
set $no_cache true;
}
if ($http_cookie ~* "SESS") {
set $no_cache true;
}
}
}
我怎樣才能確保始終使用我的緩存,並且它是什麼使使我的緩存錯過的請求時,這是從捲曲不同的瀏覽器?
原因很可能是'proxy_cache_bypass'指令。從瀏覽器中檢查請求標題以獲取「Cache-Control」或「Pragma」。如果存在任何這些內容,Nginx將忽略緩存而不考慮頭部值。我的賭注是「緩存控制」。 –
我不認爲這是問題,因爲當我傳遞其中一個標題時,我看到緩存狀態記錄爲「BYPASS」。當我只是通常請求一個頁面時,即使'curl'顯示同一個URL的'HIT'狀態,我也會得到'MISS'。 – Christiaan