當前位置:首頁 » 文件管理 » nginx禁用緩存

nginx禁用緩存

發布時間: 2022-09-10 08:42:05

⑴ nginx 緩存機制

Nginx緩存的基本思路
基本思想是利用客戶訪問的時間局部性原理,對客戶已經訪問過的內容在Nginx伺服器本地建立副本,這樣在一段時間內再次訪問該數據,就不需要通過Nginx伺服器再次向後端伺服器發出請求,所以能夠減少Nginx伺服器與後端伺服器之間的網路流量,減輕網路擁塞,同時還能減小數據傳輸延遲,提高用戶訪問速度。同時,當後端伺服器宕機時,Nginx伺服器上的副本資源還能夠回應相關的用戶請求,這樣能夠提高後端伺服器的魯棒性。

對於緩存,我們大概會有以下問題:
(1)緩存文件放在哪兒?
(2)緩存的空間大小是否可以限定?
(3)如何指定哪些請求被緩存?
(4)緩存的有效期是多久?
(5)對於某些請求,是否可以不走緩存?

解決這些問題後,nginx的緩存也就基本配置完成了,下面看詳細配置過程
開啟緩存

要使用緩存,首先要使用 proxy_cache_path 這個指令(必須放在 http 上下文的頂層位置),然後在目標上下文中使用 proxy_cache 指令

配置示例

proxy_cache_path 有兩個必填參數,第一個參數為 緩存目錄,第二個參數keys_zone指定緩存名稱和佔用內存空間的大小(註:示例中的10m是對內存中緩存內容元數據信息大小的限制,如果想限制緩存總量大小,需要用 max_size 參數)

proxy_cache 的參數為之前指定的緩存名稱

緩存管理的相關進程
在緩存工作中有兩個附加進程:
(1)緩存管理器
定期檢查緩存狀態,看緩存總量是否超出限制,如果超出,就移除其中最少使用的部分
(2)緩存載入器
載入器只在nginx啟動後運行一次,把緩存內容的元數據信息載入到內存空間,如果一次性載入全部緩存信息,會大量消耗資源,使nginx在啟動後的幾分鍾里變慢,為避免此問題,有3種載入策略:
loader_threshold – 指定每次載入執行的時間
loader_files – 每次最多載入的數量
loader_sleeps – 每次載入的延時
例如:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
指定緩存哪些請求
nginx默認會緩存所有 get 和 head 方法的請求結果,緩存的key默認使用請求字元串
(1)自定義key
例如 proxy_cache_key " request_uri cookie_nocache arg_comment;
如果任何一個參數值不為空,或者不等於0,nginx就不會查找緩存,直接進行代理轉發
綜合示例

nginx 緩存機制
三分鍾看懂Nginx伺服器的緩存原理和機制

⑵ nginx如何設置不使用緩存

在開發調試web的時候,經常會碰到因瀏覽器緩存(cache)而經常要去清空緩存或者強制刷新來測試的煩惱,提供下apache不緩存配置和nginx不緩存配置的設置。

apache:
首先確定配置文件httpd.conf中確已經載入mod_headers模塊。

LoadMole headers_mole moles/mod_headers.so

我們可以根據文件類型來讓瀏覽器每次都從伺服器讀取,這里測試用css、js、swf、php、html、htm這幾種文件。
<FilesMatch 「\.(css|js|swf|php|htm|html)$」>
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>

nginx:

location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;
}

對於站點中不經常修改的靜態內容(如圖片,JS,CSS),可以在伺服器中設置expires過期時間,控制瀏覽器緩存,達到有效減小帶寬流量,降低伺服器壓力的目的。

以Nginx伺服器為例:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
#過期時間為30天,
#圖片文件不怎麼更新,過期可以設大一點,
#如果頻繁更新,則可以設置得小一點。
expires 30d;
}

location ~ .*\.(js|css)$ {
expires 10d;
}

⑶ nginx緩存清理

你找nginx配置中的expire參數,這個是設定緩存時間的,如果你不需要緩存,可以去掉該參數,或者是設置成-1,如下圖所示:

⑷ Nginx如何定向禁止緩存

今天在使用nginx限制外網訪問內部系統,遇到一個很郁悶的事情,怎麼配置都不對,折騰大... 3. deny all;結尾 表示除了上

⑸ 怎麼關閉Nginx 的緩存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
#禁止緩存,每次都從伺服器請求
add_header Cache-Control no-store;
}

⑹ nginx 伺服器緩存怎麼清理

你找nginx配置中的expire參數,這個是設定緩存時間的,如果你不需要緩存,可以去掉該參數,或者是設置成-1,如下圖所示:

⑺ nginx 反代里緩存怎麼清理

最簡單的反代+全緩存腳本

#新建2個目錄,放置緩存文件:

mkdir -p /home/cache/path

mkdir /home/cache/temp

修改/usr/local/nginx/conf/nginx.conf的http層,添加以下代碼:

client_body_buffer_size 512k;

proxy_connect_timeout 5;

proxy_read_timeout 60;

proxy_send_timeout 5;

proxy_buffer_size 16k;

proxy_buffers 4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

proxy_temp_path /home/cache/temp;

proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:10m inactive=7d max_size=30g;

#500m是內存佔用,7d是7天無訪問刪除,30g是緩存占具硬碟空間

#limit_zone crawler $binary_remote_addr 10m; #這段是用於限制單ip連接數的,如果頻繁出現後端負載過大可以嘗試去掉#。

(7)nginx禁用緩存擴展閱讀:

nginx僅僅處理靜態頁面,動態的頁面(php請求)統統都交付給後台的兩台apache來處理。也就是說,可以把網站的靜態頁面或者文件放置到nginx的目錄下;動態的頁面和資料庫訪問都保留到後台的apache伺服器上。

假設前端nginx(為127.0.0.1:8080)僅僅包含一個靜態頁面index.html;後 台的兩個apache伺服器(分別為localhost:80和158.37.70.143:80),一台根目錄放置phpMyAdmin文件夾和 test.php(裡面測試代碼為print "server1";),另一台根目錄僅僅放置一個test.php(裡面測試代碼為print "server2";)。

⑻ Nginx怎樣設置瀏覽器緩存

瀏覽器緩存(BrowserCaching)

為了加速瀏覽器,瀏覽器在用戶磁碟上,對最近請求過的文檔進行存儲

當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁碟顯示文檔,這樣,就可以加速頁面的閱覽,緩存的方式節約了網路的資源,提高了網路的效率。


瀏覽器緩存可以通過expires指令輸出Header頭來實現,expires指令的語法如下

語法:expires[time| epoch | max |off]

默認值:expiresoff

作用域:http、server、location

用途:使用本指令可以控制http應答中的expires和Cache-Control的Header頭信息,起到控制頁面緩存的作用。


參數說明

Time,可以使用正數或負數,Expires頭標的值,將通過當前系統時間加上設定的time值來獲得。

epoch,指定expires的值為1January,1970,00:00:01 GMT。

Max,指定expires的值為31December 2037 23:59:59 GMT,Cache-Control的值為10年。

Off,表示不修改Expires和Cache-Control的值。

一個HTML頁面,會引用一些JavaScript文件、圖片文件、而這些格式的文件很少會被修改,則可以通過expires設置瀏覽器緩存。

比如,對常見格式的圖片、Flash文件在瀏覽器本地緩存30天,對JS、CSS文件在瀏覽器本地緩存1小時,代碼如下

⑼ HTTP緩存與header模塊

HTTP緩存分為緩存控制和緩存校驗,緩存控制有Cache-Control和Pragma

Pragma是舊產物,已經逐步拋棄,有些網站為了向下兼容還保留了這兩個欄位。如果一個報文中同時出現Pragma和Cache-Control時,以Pragma為准。同時出現Cache-Control和Expires時,以Cache-Control為准。即優先順序從高到低是 Pragma -> Cache-Control -> Expires

如果在請求header有如下參數

則Pragma的優先順序更高

Cache-Control一般值為

緩存校驗有Last-Modified和ETag

如果請求Cache-Control值為max-age=0,表示客戶端要去服務端做資源校驗,校驗通過會發生304,使用本地緩存的資源,校驗不通過的話,服務端將數據返回給客戶端

服務端在響應時候會有響應頭Last-Modified,這是一個格林威治時間,表示資源最後的修改時間

客戶端在刷新頁面時候,會發一個請求頭If-Modified-Since,表示收到的上一次服務端給的Last-Modified

當服務端會對比自己的Last-Modifed和客戶端的If-Modified-Since,如果

If-Modified-Since >= Last-Modifed

那麼服務端會直接響應304,響應body體長度為0,以下為一個304響應的nginx-access日誌

但是Last-Modifed無法解決資源在一秒內連續修改的問題,一秒內連續修改後,客戶端只會更新一次

更好的解決方法是ETag,伺服器會響應一個根據資源算出來的字元,如

第二次客戶端請求時候會攜帶If-None-Match請求頭

如果

If-None-Match == ETag

表示資源沒有修改,服務端響應304

如果同時有ETag和Last-Modify,則ETag的優先順序會更高

但是ETag也有問題,如果服務端是多節點集群,那麼有可能A節點算出來的ETag和B節點的ETag可能不同,造成無法正常304響應,在nginx中可以關閉ETag

200狀態碼會發生於瀏覽器第一次載入頁面、強制刷新、304校驗失敗、資源緩存過期、瀏覽器禁用緩存情況

如果是瀏覽器第一次載入,那麼請求頭不會有 Cache-Control 、 If-None-Match 、 If-Modified-Since

服務端正常響應200,正常將數據傳給客戶端

如果是強制刷新,那麼瀏覽器會強制加請求頭

表示需要服務端響應真實數據,不用做校驗

如果瀏覽器禁用了緩存Disable Cache,那麼也會強制加請求頭no-cache

304狀態碼會發生於刷新頁面情況

刷新情況瀏覽器會強制加請求頭

表示需要瀏覽器校驗,校驗成功就是304,校驗失敗就是200

發生過程

由於訪問靜態資源,服務端通常都會響應Cache-Control:max-age,表示需要客戶端緩存這個靜態資源多長時間,如

同一個瀏覽器新窗口再次訪問會發生from disk cache

from disk cache情況服務端不會收到請求

響應碼為 200 , 201 , 206 , 301 , 302 , 303 , 307 , 308 情況下會發這個響應頭
參數可以是正數或者負數,如果為負,則發送的頭為

可以配置max,這樣響應的就是,可以認為是永久緩存

off參數可以禁用添加或者修改expire和Cache-Control響應

響應碼為200、201、204、206、301、302、303、304、307、308則添加指定的響應頭
如果當前級別沒有add_header,則從上一個級別繼承,僅僅當前級別沒有的話
如果定義了always,則不管響應碼為多少都添加header

熱點內容
java的基本結構 發布:2024-10-11 15:12:24 瀏覽:730
大眾suv哪個內部配置好 發布:2024-10-11 14:30:39 瀏覽:93
緩存到資料庫失敗 發布:2024-10-11 14:27:44 瀏覽:678
我的世界手機國際怎麼創建伺服器 發布:2024-10-11 13:45:46 瀏覽:420
svnlinux命令 發布:2024-10-11 13:35:54 瀏覽:234
ig加密語音 發布:2024-10-11 12:19:25 瀏覽:487
釘圖上傳 發布:2024-10-11 12:11:27 瀏覽:479
腳本個 發布:2024-10-11 12:10:43 瀏覽:151
剛性攻絲的編程 發布:2024-10-11 12:10:39 瀏覽:469
怎麼登錄安卓版全民tv 發布:2024-10-11 12:10:33 瀏覽:624