2016-09-02 72 views
0

Nginx可以緩存內容,即充當反向代理,但清除時間必須在Nginx配置中修復。使Nginx緩存尊重緩存控制標頭

有沒有一種方法可以根據來自上游應用程序服務器的緩存控制標頭自動清除Nginx?

+0

nginx已經做到了這一點。 http://nginx.org/r/proxy_cache_valid緩存參數可以在標題字段「Expires」或「Cache-Control」中設置。 –

+0

可能。我讀它是不可能的(無法找到源atm)。你試過了嗎?我想知道它是如何解決在nginx配置中定義的緩存限制和頭部中的緩存限制之間的。例如它會忽略nginx配置長度還是應用兩個值中的最小值。 – mahemoff

+2

「緩存的參數也可以**直接在響應頭**中設置。這比使用指令設置緩存時間有更高的優先級**。「 –

回答

0

在研究了這個問題之後,我發現它沒有很好的文檔記錄,因爲大多數人似乎都很關心那些容易說「緩存一天的文章」的CMS,但對於動態應用服務器來說可能會因爲每個請求而不同。

有幾個選項:

  • Nginx Plus
  • Ngx Cache Purge module,雖然還沒有看到在2年內的任何更新
  • 定義有不同的到期時間的多個高速緩存和路徑不同的應用它們,如果這是可能。
  • 忘掉Nginx上的緩存,並在其前放置一個像Varnish一樣的服務器。

更新:進一步看,我現在認爲proxy_cache_valid甚至不需要存在。如果沒有來自上游的緩存控制/失效,它只會設置一個默認期滿。如果沒有proxy_cache_valid,Nginx仍會將內容視爲陳舊,但不會立即清除。它在緩存中保留陳舊內容(由「非活動」參數和可選proxy_cache_valid確定)的原因是它可以使用proxy_cache_use_stale(在上游出現錯誤時很有用)提供陳舊內容。