一箱熬、nginx緩存的優(yōu)點(diǎn)
如圖所示,nginx緩存狈邑,可以在一定程度上城须,減少源服務(wù)器的處理請(qǐng)求壓力。
因?yàn)殪o態(tài)文件(比如css米苹,js糕伐, 圖片)中,很多都是不經(jīng)常更新的蘸嘶。nginx使用proxy_cache將用戶的請(qǐng)求緩存到本地一個(gè)目錄赤炒。下一個(gè)相同請(qǐng)求可以直接調(diào)取緩存文件氯析,就不用去請(qǐng)求服務(wù)器了。
畢竟莺褒,IO密集型服務(wù)的處理是nginx的強(qiáng)項(xiàng)掩缓。
二、如何進(jìn)行設(shè)置
先上個(gè)栗子:
http{
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
server {
listen 80 default_server;
server_name localhost;
root /mnt/blog/;
location / {
}
#要緩存文件的后綴遵岩,可以在以下設(shè)置你辣。
location ~ .*\.(gif|jpg|png|css|js)(.*) {
proxy_pass http://ip地址:90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
add_header wall "hey!guys!give me a star.";
}
}
# 無nginx緩存的blog端口
server {
listen 90;
server_name localhost;
root /mnt/blog/;
location / {
}
}
}
因?yàn)槲沂窃谝慌_(tái)服務(wù)器上做試驗(yàn),所以用了兩個(gè)端口80
和90
進(jìn)行模擬兩臺(tái)服務(wù)器之間的交互尘执。
80
端口對(duì)接的是普通的域名(http://wangxiaokai.vip
)訪問舍哄。
90
端口負(fù)責(zé)處理80
端口代理過來的資源訪問。
相當(dāng)于90
端口是源服務(wù)器誊锭,80
端口是nginx反向緩存代理服務(wù)器表悬。
接下來講一下配置項(xiàng):
2.1 http層設(shè)置
proxy_connect_timeout 10;
proxy_read_timeout 180;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 96k;
proxy_temp_file_write_size 96k;
proxy_temp_path /tmp/temp_dir;
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;
- proxy_connect_timeout
服務(wù)器連接的超時(shí)時(shí)間
- proxy_read_timeout
連接成功后,等候后端服務(wù)器響應(yīng)時(shí)間
- proxy_send_timeout
后端服務(wù)器數(shù)據(jù)回傳時(shí)間
- proxy_buffer_size
緩沖區(qū)的大小
- proxy_buffers
每個(gè)連接設(shè)置緩沖區(qū)的數(shù)量為number,每塊緩沖區(qū)的大小為size
- proxy_busy_buffers_size
開啟緩沖響應(yīng)的功能以后丧靡,在沒有讀到全部響應(yīng)的情況下蟆沫,寫緩沖到達(dá)一定大小時(shí),nginx一定會(huì)向客戶端發(fā)送響應(yīng)温治,直到緩沖小于此值饭庞。
- proxy_temp_file_write_size
設(shè)置nginx每次寫數(shù)據(jù)到臨時(shí)文件的size(大小)限制
- proxy_temp_path
從后端服務(wù)器接收的臨時(shí)文件的存放路徑
- proxy_cache_path
設(shè)置緩存的路徑和其他參數(shù)。被緩存的數(shù)據(jù)如果在inactive參數(shù)(當(dāng)前為1天)指定的時(shí)間內(nèi)未被訪問熬荆,就會(huì)被從緩存中移除
2.2 server層設(shè)置
2.2.1 反向緩存代理服務(wù)器
server {
listen 80 default_server;
server_name localhost;
root /mnt/blog/;
location / {
}
#要緩存文件的后綴舟山,可以在以下設(shè)置。
location ~ .*\.(gif|jpg|png|css|js)(.*) {
proxy_pass http://ip地址:90;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;
expires 90d;
add_header wall "hey!guys!give me a star.";
}
}
- proxy_pass
nginx緩存里拿不到資源卤恳,向該地址轉(zhuǎn)發(fā)請(qǐng)求累盗,拿到新的資源,并進(jìn)行緩存
- proxy_redirect
設(shè)置后端服務(wù)器“Location”響應(yīng)頭和“Refresh”響應(yīng)頭的替換文本
- proxy_set_header
允許重新定義或者添加發(fā)往后端服務(wù)器的請(qǐng)求頭
- proxy_cache
指定用于頁面緩存的共享內(nèi)存突琳,對(duì)應(yīng)http層設(shè)置的keys_zone
- proxy_cache_valid
為不同的響應(yīng)狀態(tài)碼設(shè)置不同的緩存時(shí)間
- expires
緩存時(shí)間
這里我設(shè)置了圖片
幅骄、css
、js
靜態(tài)資源進(jìn)行緩存本今。
當(dāng)用戶輸入http://wangxiaokai.vip
域名時(shí)拆座,解析得到ip:port
的訪問地址。port
默認(rèn)為80冠息。所以頁面請(qǐng)求會(huì)被當(dāng)前server截取到挪凑,進(jìn)行請(qǐng)求處理。
當(dāng)解析到上述文件名結(jié)尾的靜態(tài)資源逛艰,會(huì)到緩存區(qū)獲取靜態(tài)資源堂鲜。
如果獲取到對(duì)應(yīng)資源址否,則直接返回?cái)?shù)據(jù)雄嚣。
如果獲取不到,則將請(qǐng)求轉(zhuǎn)發(fā)給proxy_pass
指向的地址進(jìn)行處理肄渗。
2.2.2 源服務(wù)器
server {
listen 90;
server_name localhost;
root /mnt/blog/;
location / {
}
}
這里直接處理90
端口接受到的請(qǐng)求,到服務(wù)器本地目錄/mnt/blog
下抓取資源進(jìn)行響應(yīng)咬最。
三翎嫡、如何驗(yàn)證緩存是否有效
細(xì)心的讀者應(yīng)該發(fā)現(xiàn),我在第二段栗子里永乌,留了個(gè)彩蛋 add_header wall "hey!guys!give me a star."
惑申。
add_header
是用于在報(bào)頭設(shè)置自定義的信息。
所以翅雏,如果緩存有效的話圈驼,那么靜態(tài)資源返回的報(bào)頭,一定會(huì)帶上這個(gè)信息望几。
訪問http://wangxiaokai.vip
結(jié)果如下:
四绩脆、參考
[1] nginx文檔
[2] nginx反向緩存代理詳解
[3] Nginx緩存服務(wù)器靜態(tài)文件
五、后記
我的GitHub倉(cāng)庫(kù)
Give me a star,if it's work out for you.Thank you.