Nginx?反向代理緩存(proxy_cache)的實現(xiàn)
本文主要介紹了Nginx 反向代理緩存(proxy_cache)的實現(xiàn),具體如下:
如圖所示,nginx緩存,可以在一定程度上,減少源服務器的處理請求壓力。因為靜態(tài)文件(比如css,js, 圖片)中,很多都是不經(jīng)常更新的。nginx使用proxy_cache將用戶的請求緩存到本地一個目錄。下一個相同請求可以直接調(diào)取緩存文件,就不用去請求服務器了。畢竟,IO密集型服務的處理是nginx的強項。
Nginx的緩存加速功能是由proxy_cache(用于反向代理和靜態(tài)緩存)和fastcgi_cache(PHP動態(tài)緩存)兩個功能模塊完成。
Nginx緩存特點:
- 緩存穩(wěn)定,運行速度與Squid相差無幾(因為都使用硬盤緩存);
- 對多核CPU的利用率比其他的開源軟件好;
- 支持高并發(fā)請求數(shù),能同時承受更多的訪問請求;
1、配置
先上個例子:
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 / { } #要緩存文件的后綴,可以在以下設置。 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 / { } } }
因為我是在一臺服務器上做試驗,所以用了兩個端口80
和90
進行模擬兩臺服務器之間的交互。
80
端口對接的是普通的域名(http://wangxiaokai.vip
)訪問。90
端口負責處理80
端口代理過來的資源訪問。- 相當于
90
端口是源服務器,80
端口是nginx反向緩存代理服務器。
接下來講一下配置項:
1.1 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;
- proxy_connect_timeout
服務器連接的超時時間
- proxy_read_timeout
連接成功后,等候后端服務器響應時間
- proxy_send_timeout
后端服務器數(shù)據(jù)回傳時間
- proxy_buffer_size
緩沖區(qū)的大小
- proxy_buffers
每個連接設置緩沖區(qū)的數(shù)量為number,每塊緩沖區(qū)的大小為size
- proxy_busy_buffers_size
開啟緩沖響應的功能以后,在沒有讀到全部響應的情況下,寫緩沖到達一定大小時,nginx一定會向客戶端發(fā)送響應,直到緩沖小于此值。
- proxy_temp_file_write_size
設置nginx每次寫數(shù)據(jù)到臨時文件的size(大小)限制
- proxy_temp_path
從后端服務器接收的臨時文件的存放路徑
- proxy_cache_path
設置緩存的路徑和其他參數(shù)。被緩存的數(shù)據(jù)如果在inactive參數(shù)(當前為1天)指定的時間內(nèi)未被訪問,就會被從緩存中移除
1.2 server層設置
server { listen 80 default_server; server_name localhost; root /mnt/blog/; location / { } #要緩存文件的后綴,可以在以下設置。 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ā)請求,拿到新的資源,并進行緩存
- proxy_redirect
設置后端服務器“Location”響應頭和“Refresh”響應頭的替換文本
- proxy_set_header
允許重新定義或者添加發(fā)往后端服務器的請求頭
- proxy_cache
指定用于頁面緩存的共享內(nèi)存,對應http層設置的keys_zone
- proxy_cache_valid
為不同的響應狀態(tài)碼設置不同的緩存時間
- expires
緩存時間
這里我設置了圖片
、css
、js
靜態(tài)資源進行緩存。 當用戶輸入http://wangxiaokai.vip
域名時,解析得到ip:port
的訪問地址。port
默認為80。所以頁面請求會被當前server截取到,進行請求處理。 當解析到上述文件名結(jié)尾的靜態(tài)資源,會到緩存區(qū)獲取靜態(tài)資源。 如果獲取到對應資源,則直接返回數(shù)據(jù)。 如果獲取不到,則將請求轉(zhuǎn)發(fā)給proxy_pass
指向的地址進行處理。
2、主要參數(shù)
1. proxy_cache
語法:proxy_cache zone|off
默認為off,即關閉proxy_cache功能,zone為用于存放緩存的內(nèi)存區(qū)域名稱。
例:proxy_cache my_zone;
從nginx 0.7.66版本開始,proxy_cache機制開啟后會檢測被代理端的HTTP響應頭中的"Cache-Control"、"Expire"頭域。
如,Cache-Control為no-cache時,是不會緩存數(shù)據(jù)的。
2. proxy_cache_bypass
語法:proxy_cache_bypass string;
該參數(shù)設定,什么情況下的請求不讀取cache而是直接從后端的服務器上獲取資源。
這里的string通常為nginx的一些變量。
例:proxy_cahce_bypass $cookie_nocache $arg_nocache$arg_comment;
意思是,如果$cookie_nocache $arg_nocache$arg_comment這些變量的值只要任何一個不為0或者不為空時,
則響應數(shù)據(jù)不從cache中獲取,而是直接從后端的服務器上獲取。
3. proxy_no_cache
語法:proxy_no_cache string;
該參數(shù)和proxy_cache_bypass類似,用來設定什么情況下不緩存。
例:proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
表示,如果$cookie_nocache $arg_nocache $arg_comment的值只要有一項不為0或者不為空時,不緩存數(shù)據(jù)。
4. proxy_cache_key
語法:proxy_cache_key string;
定義cache key,如: proxy_cache_key $scheme$proxy_host$uri$is_args$args; (該值為默認值,一般不用設置)
5. proxy_cache_path
語法:proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size]
path設置緩存數(shù)據(jù)存放的路徑;
levels設置目錄層級,如levels=1:2,表示有兩級子目錄,第一個目錄名取md5值的倒數(shù)第一個值,第二個目錄名取md5值的第2和3個值。keys_zone設置內(nèi)存zone的名字和大小,如keys_zone=my_zone:10m;inactive設置緩存多長時間就失效,當硬盤上的緩存數(shù)據(jù)在該時間段內(nèi)沒有被訪問過,就會失效了,該數(shù)據(jù)就會被刪除,默認為10s。max_size設置硬盤中最多可以緩存多少數(shù)據(jù),當?shù)竭_該數(shù)值時,nginx會刪除最少訪問的數(shù)據(jù)。
到此這篇關于Nginx 反向代理緩存(proxy_cache)的實現(xiàn)的文章就介紹到這了,更多相關Nginx 反向代理緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Nginx服務器的反向代理proxy_pass配置方法講解
- Nginx代理proxy pass配置去除前綴的實現(xiàn)
- nginx 反向代理之 proxy_pass的實現(xiàn)
- nginx配置中proxy_pass反向代理502的bug記錄
- nginx配置proxy_pass代理轉(zhuǎn)發(fā)時報404問題
- nginx反向代理proxy_pass遇到的死循環(huán)問題
- nginx代理參數(shù)proxy_pass的實現(xiàn)
- nginx反向代理proxy_set_header
- Nginx Proxy Manager輕松搭建反向代理的實現(xiàn)
- Nginx Proxy 代理測試的實現(xiàn)
相關文章
服務器報錯nginx?502?Bad?Gateway的原因及如何解決詳解
項目啟動時莫名其妙網(wǎng)站訪問不了,502 Bad Gateway,下面這篇文章主要給大家介紹了關于服務器報錯nginx?502?Bad?Gateway的原因及如何解決的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06記一次nginx配置不當引發(fā)的499與failover 機制失效問題
近期在非高峰期也存在499超過告警閾值的偶發(fā)情況,多的時候一天幾次,少的時候則幾天一次,持續(xù)一般也就數(shù)分鐘,經(jīng)過和小伙伴的共同探究,最后發(fā)現(xiàn)之前對于499是客戶端主動斷開因而和服務端關系不大的想當然認知是錯誤的,這里記錄一下2023-05-05使用Nginx進行URL轉(zhuǎn)發(fā)的配置案例
Nginx是一個高性能的Web服務器和反向代理服務器,它還可以用于URL轉(zhuǎn)發(fā),在本教學文章中,我們將從安裝Nginx開始,逐步介紹配置步驟,并展示一個URL轉(zhuǎn)發(fā)的案例,感興趣的朋友可以參考下2023-09-09HTTP 499 狀態(tài)碼 nginx下 499錯誤的解決辦法
HTTP狀態(tài)碼出現(xiàn)499錯誤有多種情況,499錯誤是什么?Nginx 499錯誤的原因及解決方法,下面跟著腳本之家小編一起學習吧2016-06-06