首頁 >運維 >Nginx >如何使用Nginx進行HTTP請求的快取控制

如何使用Nginx進行HTTP請求的快取控制

王林
王林原創
2023-08-02 14:01:121922瀏覽

如何使用Nginx進行HTTP請求的快取控制

HTTP請求的快取控制是最佳化網站效能的重要手段,它可以減少伺服器處理請求的次數,提高網站的回應速度。 Nginx作為一款高效能的Web伺服器和反向代理伺服器,提供了靈活的快取控制功能,本文將介紹如何使用Nginx進行HTTP請求的快取控制。

一、使用代理快取

Nginx提供了代理快取的功能,能夠快取來自上游伺服器的回應結果,減少對上游伺服器的請求次數。若要使用代理程式快取,可以在Nginx的設定檔中新增以下設定:

http {
  proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

  server {
    ...
    location / {
      proxy_cache my_cache;
      proxy_cache_key $host$uri$is_args$args;
      proxy_cache_valid 200 302 10m;
      proxy_cache_valid 404 1m;
      proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
      proxy_ignore_headers Cache-Control;
      proxy_ignore_headers Set-Cookie;
      proxy_hide_header Set-Cookie;
      proxy_pass http://upstream_server;
    }
    ...
  }
}

上述設定中,proxy_cache_path用於設定快取的路徑和相關參數。 levels=1:2表示在快取路徑中建立1級目錄和2級目錄,以提高效率。 keys_zone用於設定快取區的名稱和記憶體大小,可以根據實際需求進行調整。 max_size表示快取區的最大容量,inactive表示快取的過期時間,即60分鐘內沒有被存取的快取將被刪除。 use_temp_path=off表示停用臨時路徑,可以提高效能。

在特定的伺服器設定中,透過location指令指定需要快取的URL。 proxy_cache指令表示啟用緩存,proxy_cache_key指令指定快取的鍵值,可以使用多個變數拼接成快取鍵值。 proxy_cache_valid指定了不同HTTP狀態碼的快取有效期,如200和302狀態碼的回應結果在10分鐘內有效,404狀態碼的回應結果在1分鐘內有效。 proxy_cache_use_stale用於指定當上游伺服器發生錯誤、逾時或更新時,是否使用過期的快取。 proxy_ignore_headersproxy_hide_header指令可用來忽略或隱藏回應頭中的某些屬性。

在設定完成後,重新啟動Nginx服務使設定生效。此時,Nginx將會對匹配的URL進行緩存,相同的URL再次被請求時,將會直接從快取中獲取回應結果,而不需要再次請求上游伺服器。

二、使用瀏覽器快取

除了代理程式緩存,還可以使用瀏覽器快取來減少網路請求。 Nginx可以透過設定回應頭中的Cache-ControlExpires來控制瀏覽器快取的行為。

範例如下:

http {
  ...
  server {
    ...
    location /static/ {
      expires max;
      add_header Cache-Control public;
    }
    ...
  }
}

上述設定中,expires指令設定了max,表示將回應結果的過期時間設為最大值,即永不過期。 add_header指令為回應結果新增了Cache-Control頭,並設定為public,表示允許公共快取。

在具體的URL符合規則中,可以根據不同的需求設定不同的快取策略。例如,靜態資源通常不會經常改變,可以設定expires為較長的時間,讓瀏覽器快取資源;而動態產生的頁面可以設定為不快取或快取時間較短。

三、使用條件快取

條件快取是一種在客戶端和伺服器之間進行通訊的機制,可以根據請求的條件決定是否使用快取。 Nginx透過設定回應頭中的Last-ModifiedETag,以及請求頭中的If-Modified-SinceIf-None-Match 來實作條件快取。

範例如下:

http {
  ...
  server {
    ...
    location / {
      if_modified_since before;
      add_header ETag "123456";
      if_none_match $http_if_none_match;
      if_modified_since off;
      ...
    }
    ...
  }
}

上述設定中,if_modified_since指令用於判斷請求頭中的If-Modified-Since是否早於伺服器設定的Last-Modified;add_header指令加入了ETag頭,用於識別資源的唯一性;if_none_match指令用於判斷請求頭中的If-None-Match是否與伺服器設定的ETag相符;if_modified_sinceif_none_match指令分別對應了If-Modified-SinceIf-None-Match請求頭的值。

透過設定條件快取,可以在客戶端發送請求時,根據伺服器傳回的Last-ModifiedETag判斷是否使用快取。如果資源沒有變化,伺服器可以傳回304 Not Modified,用戶端從快取中取得資源;如果資源已經發生變化,伺服器傳回新的資源。

四、快取策略

為了更好地控制快取的行為,可以根據不同的URL設定不同的快取策略。通常,靜態資源的URL具有穩定的特點,可以設定較長時間的快取失效期;而動態頁面的URL可能會頻繁變動,可以設定較短的快取失效期。

範例如下:

http {
  ...
  server {
    ...
    location /static/ {
      expires 7d;
      add_header Cache-Control public;
    }

    location /dynamic/ {
      expires 1h;
      add_header Cache-Control no-cache;
    }
    ...
  }
}

上述配置中,以/static/開頭的URL匹配靜態資源,設定了過期時間為7天,允許公共快取;以/dynamic/開頭的URL匹配動態資源,設定了過期時間為1小時,並禁止快取。

透過合理的快取策略,可以在提高網站效能的同時,確保使用者取得到最新的資源。

總結

使用Nginx進行HTTP請求的快取控制是一種最佳化網站效能的有效手段。透過代理快取、瀏覽器快取和條件緩存,可以減少對伺服器的請求次數,提高網站的回應速度。在具體的快取策略中,需要根據不同的URL設定不同的快取失效期,以提供更好的使用者體驗。

參考資料:https://nginx.org/

以上是如何使用Nginx進行HTTP請求的快取控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn