當前位置:首頁 » 文件管理 » nginx伺服器緩存

nginx伺服器緩存

發布時間: 2022-04-21 05:38:29

『壹』 伺服器段怎麼設置緩存 nginx

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

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

LoadMole headers_mole moles/mod_headers.so

我們可以根據文件類型來讓瀏覽器每次都從伺服器讀取,這里測試用css、js、swf、php、html、htm這幾種文件。

Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"

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怎樣設置瀏覽器緩存

瀏覽器緩存(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小時,代碼如下

『叄』 怎麼關閉Nginx 的緩存

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

『肆』 nginx緩存性能怎麼樣

Nginx緩存對於不少人來說都不是很明朗的一個知識。那麼好我們就借介紹有關優點和缺點的機會把大家帶進Nginx緩存的世界。希望大家在文中能找到自己相關的使用方法。
兩種Nginx緩存都有著基本一樣的優點和缺點:
缺點1:不支持帶參數的動態鏈接,比如read.php?id=1,因為Nginx緩存只保存文件名,所以這個鏈接只在文件系統下保存為read.php,這樣用戶訪問read.php?id=2時會返回不正確的結果。同時不支持http://www.sudone.com/這種形式的首頁和二級目錄http://www.sudone.com/download/,因為Nginx緩存非常老實,會將這樣的請求照鏈接寫入文件系統,而這個鏈接顯然是一個目錄,所以保存失敗。這些情況都需要寫rewrite才能正確保存。
缺點2:Nginx緩存內部沒有緩存過期和清理的任何機制,這些緩存的文件會永久性地保存在機器上,如果要緩存的東西非常多,那就會撐暴整個硬碟空間。為此可以使用一個shell腳本定期清理,同時可以撰寫php等動態程序來做實時更新。
缺點3:只能緩存200狀態碼,因此後端返回301/302/404等狀態碼都不會緩存,假如恰好有一個訪問量很大的偽靜態鏈接被刪除,那就會不停穿透導致後端承載不小壓力。
缺點4:Nginx不會自動選擇內存或硬碟作為存儲介質,一切由配置決定,當然在當前的操作系統里都會有操作系統級的文件緩存機制,所以存在硬碟上也不需要過分擔心大並發讀取造成的io性能問題。
Nginx傳統緩存的缺點也是它和squid等緩存軟體的不同之特色,所以也可看作其優點。在生產應用中它常常用作和squid的搭檔,squid對於帶?的鏈接往往無法阻擋,而Nginx能將其訪問攔住,例如:http://sudone.com/?和http://sudone.com/在squid上會被當做兩個鏈接,所以會造成兩次穿透;而Nginx只會保存一次,無論鏈接變成http://sudone.com/?1還是http://sudone.com/?123,均不能透過Nginx緩存,從而有效地保護了後端主機。
Nginx緩存會非常老實地將鏈接形式保存到文件系統中,這樣對於一個鏈接,可以很方便地查閱它在緩存機器上的緩存狀態和內容,也可以很方便地和別的文件管理器如rsync等配合使用,它完完全全就是一個文件系統結構。
這兩種傳統緩存都可以在linux下將文件保存到/dev/shm里,一般我也是這么做的,這樣可以利用系統內存來做緩存,利用內存的話,清理過期內容速度就會快得多。使用/dev/shm/時除了要把tmp目錄也指向到/dev/shm這個分區外,如果有大量小文件和目錄,還要修改一下這個內存分區的inode數量和最大容量:
mount -o size=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm
上面的命令在一台有3G內存的機器上使用,因為/dev/shm默認最大內存是系統內存的一半就是1500M,這條命令將其調大成2500M,同時shm系統inode數量默認情況下可能是不夠用的,但有趣的是它可以隨意調節,這里調節為480000保守了點,但也基本夠用了。

『伍』 如何利用Nginx的緩沖,緩存優化提升性能

使用緩沖釋放後端伺服器
反向代理的一個問題是代理大量用戶時會增加伺服器進程的性能沖擊影響。在大多數情況下,可以很大程度上能通過利用Nginx的緩沖和緩存功能減輕。
當代理到另一台伺服器,兩個不同的連接速度會影響客戶的體驗:
從客戶機到Nginx代理的連接。
從Nginx代理到後端伺服器的連接。
Nginx具有優化這些連接調整其行為的能力。
如果沒有緩沖,數據從代理的伺服器發送並立即開始被發送到客戶。如果假定客戶端很快,緩沖可以關閉而盡快使數據到客戶端,有了緩沖,Nginx 代理將暫時存儲後端的響應,然後按需供給數據給客戶端。如果客戶端是緩慢的,允許Nginx伺服器關閉到後端的連接。然後,它可以處理數據分配到客戶端, 以任何可能的速度。
Nginx默認有緩沖設計,因為客戶端往往有很大的不同的連接速度。我們可以用以下指令調節緩沖行為。可以在HTTP,server或 location位置來設置。重要的是要記住,大小size指令是針對每個請求配置的,所以增加超出你需求會影響你的性能,如果這時有許多客戶端請求:
proxy_buffering:該指令控制緩沖是否啟用。默認情況下,它的值是「on」。
proxy_buffers:該指令控制代理響應緩沖區的數量(第一個參數)和大小(第二個參數)。默認配置是8個緩沖區大小等於一個內存頁(4K或者8K)。增加緩沖區的數目可以讓你緩沖更多信息。
proxy_buffer_size:從後端伺服器的響應頭緩沖區大小,它包含headers,和其他部分響應是分開的。該指令設置響應部分的緩沖區大小。默認情況下,它和proxy_buffers是相同的尺寸,但因為這是用於頭信息,這通常可以設置為一個較低的值。
proxy_busy_buffers_size:此指令設置標注「client-ready」緩沖區的最大尺寸。而客戶端可以一次讀取來自一個緩沖區的數據,緩沖被放置在隊列中,批量發送到客戶端。此指令控制允許是在這種狀態下的緩沖空間的大小。
proxy_max_temp_file_size:這是每個請求能用磁碟上臨時文件最大大小。這些當上游響應太大不能裝配到緩沖區時被創建。
proxy_temp_file_write_size:這是當被代理伺服器的響應過大時Nginx一次性寫入臨時文件的數據量。
proxy_temp_path:當上游伺服器的響應過大不能存儲到配置的緩沖區域時,Nginx存儲臨時文件硬碟路徑。
正如你所看到的,Nginx提供了相當多的不同的指令來調整緩沖行為。大多數時候,你不必擔心太多,但它對於調整一些值可能是有用的。可能最有用的調整是proxy_buffers和proxy_buffer_size指令。
一個例子:、
proxy_busy_buffers_size 8k;
proxy_max_temp_file_size 2048m;
proxy_temp_file_write_size 32k;
proxy_pass http://example.com;
配置代理服務緩存來減少響應時間
盡管緩沖可以幫助釋放後端伺服器以處理更多的請求,Nginx還提供了一種方法來緩存從後端伺服器的內容,對於許多請求無需連接到上游。
配置代理緩存
要設置緩存用於代理內容,我們可以使用proxy_cache_path指令。這將創建區域保存來自被代理伺服器返回的數據。該proxy_cache_path指令必須在HTTP上下文部分進行設置。
在下面的例子中,我們將配置一些相關的指令來建立我們的緩存系統。
# http context
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=backcache:8m max_size=50m;
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
用proxy_cache_path指令,我們首先應該已經定義在文件系統中希望存儲緩存的目錄。在這個例子中,我們選擇在/var/lib/nginx/cache目錄。如果該目錄不存在,你可以用正確的許可權和所有權創建它:
sudo mkdir -p /var/lib/nginx/cache
sudo chown www-data /var/lib/nginx/cache
sudo chmod 700 /var/lib/nginx/cache
levels=參數指定緩存將如何組織。 Nginx將通過散列鍵(下方配置)的值來創建一個緩存鍵。我們選擇了上述的levels決定了單個字元目錄(這是散列值的最後一個字元)配有兩個字元的 子目錄(下兩個字元取自散列值的末尾)將被創建。你通常不必對這個細節關注,但它可以幫助Nginx快速找到相關的值。
keys_zone=參數定義緩存區域的名字,我們稱之為backcache。這也是我們定義多少元數據存儲的地方。在這個例子里,我們是存儲8 MB的key。對於每兆位元組,Nginx可存儲8000左右的條目。MAX_SIZE參數設置實際緩存數據的最大尺寸。
我們使用上面的另一個指令是proxy_cache_key。這個設置將設置用於存儲緩存值的鍵。此鍵用於檢查是否一個請求可以從高速緩存提供服務。我們將它設置成方案(http或https),HTTP請求方法,以及被請求的主機和URI的組合。
proxy_cache_valid指令可以被指定多次。它依賴於狀態代碼值使我們能夠配置多長時間存儲。在我們的例子中,我們對於後端返回200和302存儲10分鍾,404響應的一分鍾過期。
現在,我們已經配置了緩存區,但我們仍然需要告訴Nginx什麼時候使用緩存。
在我們代理到後端的location位置,我們可以配置使用這個緩存:
# server context
location /proxy-me {
proxy_cache backcache;
proxy_cache_bypass $http_cache_control;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_pass http://backend;
}
使用proxy_cache指令,就可以指定該backcache緩存區被用於這個位置。 Nginx會在這里檢查傳遞給後端有效的條目。
上述proxy_cache_bypass指令被設置為$ http_cache_control變數。這將包含一個指示器,用以指示該客戶端是否被明確地請求一個最新的,非緩存版本。設置此指令允許Nginx正確處理這些類型的客戶端請求。無需進行進一步的配置。
我們還增加了被稱為X-Proxy-Cache的額外頭。我們設置這個頭部為$ upstream_cache_status變數的值。這個設置頭,使我們能夠看到,如果請求導致高速緩存命中,高速緩存未命中,或者高速緩存被明確旁 路。這是對於調試特別有價值,也對客戶端是有用的信息。
關於緩存結果的注意事項
高速緩存能夠極大地提高代理伺服器的性能。不過,也需要明確的考慮配置緩存時候,要記住。
首先,任何用戶相關的數據不應被高速緩存。這可能導致一個用戶的數據被呈現給其他用戶。如果你的網站是完全靜態的,這可能不是一個問題。
如果你的網站有一些動態元素,你將不得不考慮到這一點。你如何處理要看是什麼應用程序或伺服器處理的後端處理。對於私人的內容,你應該設置Cache-Control頭為「no-cache」,「no-sotre」,或者「private」依賴於數據的性質:
no-cache:
請求: 告知緩存者,必須原原本本的轉發原始請求,並告知任何緩存者,需要去轉發請求,並驗證緩存(如果有的話).對應名詞:端對端重載.
響應: 允許緩存者緩存副本.那麼其實際價值是,總是強制緩存者,校驗緩存的新鮮度.一旦確認新鮮,則可以使用緩存副本作為響應. no-cache,還可以指定某個包含欄位,比如一個典型應用,no-cache=Set-Cookie. 這樣做的結果,就是告知緩存者,對於Set-Cookie欄位,你不要使用緩存內容.而是使用新滴.其他內容則可以使用緩存
no-store:表示在任何時候收到的數據不被緩存。這對於私人數據是最安全,因為它意味著,該數據必須從伺服器每次進行檢索。
private:這表明共享的緩存空間不能緩存此數據。這可以用於指示用戶的瀏覽器高速緩存數據,但代理伺服器不應當考慮隨後的請求數據有效。
public:這表明該響應是可在連接的任何點被高速緩存的公共數據。
一個相關的可以控制此行為報頭是max-age頭,其指示,任何資源應該緩存的秒數。
根據內容的敏感性,正確設置這些頭,會幫助你利用緩存優勢,同時保持你的私人數據安全,並使您的動態數據最新。
如果你的後端也使用Nginx,你可以設置使用過期指令,設置max-age來實現Cache-Control:
location / {
expires 60m;
}
location /check-me {
expires -1;
}
在上面的例子中,第一個塊允許緩存一個小時的內容。第二塊設置Cache-Control頭為「無緩存」。要設置其他值,可以使用add_header指令,就像這樣:
location /private {
expires -1;
add_header Cache-Control "no-store";
}

『陸』 nginx 伺服器緩存怎麼清理

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

『柒』 linux nginx緩存文件在哪個文件夾

假設你是用包管理工具安裝的nginx:
如果你是redhat系列的,安裝包是.rpm包,或者你用yum安裝的話,這樣查找:
rpm
-ql
nginx
如果是ubuntu,也是類似的方法,具體參數你可以查查
如果你是源碼安裝的nginx
那麼需要問問安裝的人了,或者到/etc/nginx目錄下翻一翻配置文件?

『捌』 nginx如何緩存動態JSP頁面

主要是在需要緩存的路徑加proxy_cache,而後端動態頁面也需要做相應的處理,否則無法被nginx緩存。(或者nginx配置處加上proxy_ignore_headers)

檢測到是代理伺服器訪問的時候,給動態頁面加上和靜態頁面一致的頭部信息,例如:

  • ETag:"1febdd4429cfcd1:0"

  • Last-Modified:Fri,30Nov201218:34:01GMT

  • 讓代理伺服器感覺不到是動態的內容。
    這種方式最好緩存的是沒有訪問許可權控制的動態頁面。

『玖』 如何清理Nginx緩存

一般來說緩存這種東西的清理有兩種,一種是自動定時清理,一種是手動清理

前者就是設定過期時間

後者就是請求一個地址,把對應的緩存的文件清除掉,然後取源更新

熱點內容
如何讓給文件夾設置密碼查看 發布:2025-01-31 22:49:07 瀏覽:2
配置動態路由協議配錯了怎麼改 發布:2025-01-31 22:49:07 瀏覽:77
掃行程碼為什麼需要支付密碼 發布:2025-01-31 22:47:08 瀏覽:738
什麼樣的配置能玩地平線4 發布:2025-01-31 22:44:05 瀏覽:241
python正則表達式符號 發布:2025-01-31 22:43:50 瀏覽:391
androidmime 發布:2025-01-31 22:34:44 瀏覽:782
ftp和http的中文含義是 發布:2025-01-31 22:33:48 瀏覽:402
sqlite3存儲圖片 發布:2025-01-31 22:27:14 瀏覽:162
sqlserverphp 發布:2025-01-31 22:22:55 瀏覽:877
曲馬多存儲 發布:2025-01-31 22:22:52 瀏覽:538