當前位置:首頁 » 硬碟大全 » nginx緩存確認開啟
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

nginx緩存確認開啟

發布時間: 2022-06-22 02:42:02

A. 如何利用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";
}

B. 請問Nginx緩存不起作用的原因,感謝大家。

200:伺服器已成功處理了請求,這表示伺服器提供了請求的內容。=== 如果不想讓代理或瀏覽器緩存,加no-cache參數 add_header Cache-Control no-cache;這樣瀏覽器F5...

C. 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小時,代碼如下

D. 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;
}

E. php怎麼讀取設置nginx緩存

nginx緩存
nginx有兩種緩存機制:fastcgi_cache和proxy_cache
下面我們來說說這兩種緩存機制的區別吧
proxy_cache作用是緩存後端伺服器的內容,可能是任何內容,包括靜態的和動態的
fastcgi_cache作用是緩存fastcgi生成的內容,很多情況是php生成的動態內容
proxy_cache緩存減少了nginx與後端通信的次數,節省了傳輸時間和後端帶寬
fastcgi_cache緩存減少了nginx與php的通信次數,更減輕了php和資料庫的壓力。

proxy_cache緩存設置
#註:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區
proxy_temp_path/data0/proxy_temp_dir;
#設置Web緩存區名稱為cache_one,內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬碟緩存空間大小為30GB。
proxy_cache_path/data0/proxy_cache_dirlevels=1:2keys_zone=cache_one:200minactive=1dmax_size=30g;

server
{
listen80;
server_namewww.yourdomain.com192.168.8.42;
indexindex.htmlindex.htm;
root/data0/htdocs/www;

location/
{
#如果後端的伺服器返回502、504、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另一台伺服器,實現故障轉移。
proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;
proxy_cachecache_one;
#對不同的HTTP狀態碼設置不同的緩存時間
proxy_cache_valid20030412h;
#以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
proxy_cache_key$host$uri$is_args$args;
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_passhttp://backend_server;
expires1d;
}

#用於清除緩存,假設一個URL為http://192.168.8.42/test.txt,通過訪問http://192.168.8.42/purge/test.txt就可以清除該URL的緩存。
location~/purge(/.*)
{
#設置只允許指定的IP或IP段才可以清除URL緩存。
allow127.0.0.1;
allow192.168.0.0/16;
denyall;
proxy_cache_purgecache_one$host$1$is_args$args;
}

#擴展名以.php、.jsp、.cgi結尾的動態應用程序不緩存。
location~.*.(php|jsp|cgi)?$
{
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_passhttp://backend_server;
}

access_logoff;
}
}

fastcgi_cache緩存設置
#定義緩存存放的文件夾
fastcgi_cache_path/tt/cachelevels=1:2keys_zone=NAME:2880minactive=2dmax_size=10G;
#定義緩存不同的url請求
fastcgi_cache_key"$scheme$request_method$host$uri$arg_filename$arg_x$arg_y";

server{
listen8080;
server_namewww.example.com;
location/{
root/www;
indexindex.htmlindex.htmindex.php;
}

location~(|.php)${
root/www;
fastcgi_pass127.0.0.1:9000;

fastcgi_cacheNAME;
fastcgi_cache_valid20048h;
fastcgi_cache_min_uses1;
fastcgi_cache_use_staleerrortimeoutinvalid_headerhttp_500;

fastcgi_indexindex.php;
fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;
includefastcgi.conf;
#設置緩存的過程中發現無法獲取cookie,經查需要定義這句話
fastcgi_pass_headerSet-Cookie;
}

log_formataccess'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent"$http_x_forwarded_for';
access_log/httplogs/access.logaccess;
}
總的來說nginx的proxy_cache和fastcgi_cache的緩存配置差不多。
memcache緩存
在討論memcache緩存之前,我們先了解下mysql的內存緩存吧
mysql的內存緩存可以在my.cnf中指定大小:內存表和臨時表不同,臨時表也是存放內存中,臨時表最大的內存需要通過tmp_table_size=128M設定。當數據查過臨時表的最大值設定時,自動轉為磁碟表,此時因需要進行IO操作,性能會大大下降,而內存表不會,內存滿了後,會提示數據滿錯誤。
例:
createtabletest
(
idintunsignednotnullauto_incrementprimarykey
statechar(10),
typechar(20),
datechar(30)
)engine=memorydefaultcharset=utf8
內存表的特性:
1.內存表的表定義存放在磁碟上,擴展名為.frm,所以重啟不會丟失
2.內存表的數據是存放在內存中,重啟會丟失數據
3.內存表使用一個固定的長度格式
4.內存表不支持blob或text列,比如varchar與text欄位就不會被支持
5.內存表支持auto_increment列和對可包含null值的列的索引
6.內存表不支持事物
7.內存表是表鎖,當修改頻繁時,性能可能會下降
轉自:

http://www.nowamagic.net/librarys/veda/detail/1405

下面我們來看看memcache,相對而言mysql的內存表限制較多。
memcache的用途
1.提高系統的並發能力
2.減輕資料庫的負擔
註:memcachelinux系統32位只支持4G內存,同時memcache最長保存時間為30天。

F. 如何讓客戶端先訪問nginx緩存

首先確定配置文件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"

G. 如何查看 nginx是否有緩存

Nginx對應的埠號是否在監聽, 看看Nginx配置文件中有沒有寫log文件的存儲位置,找到Nginx的Log文件,查看分析一下。

H. Nginx做視頻緩存,怎樣邊回源邊響應給用戶

proxy_buffering off

nginx默認開啟proxy_buffering ,它會盡量讀取responses數據並暫存下來,等接收完之後再發送給客戶。
關閉proxy_buffering 後,nginx會將獲取的mp4數據立即發送給客戶,客戶收集到足夠播放的元數據後即可開始播放,一般會很快(如果文件本身不適合流媒體播放那又是另一回事了,但這種情況已經很少見了)

I. 怎樣查看是否配置nginx使用緩存

你好。 Nginx對應的埠號是否在監聽, 看看Nginx配置文件中有沒有寫log文件的存儲位置,找到Nginx的Log文件,查看分析一下。

J. nginx 怎麼開啟緩存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 7d;
}
當訪問的文件是gif 或jpg等格式時 本地緩存30天
當訪問的是js或css時 本地緩存7天