摘要:負載均衡與緩存服務也是屬于的實用場景之一,因為模塊相對重要,所以沒有一同放入入門到實戰場景實現篇文章中,將其多帶帶提取出來一負載均衡負載均衡的實現方法就是我們上章介紹的反向代理。
負載均衡與緩存服務也是屬于 nginx 的實用場景之一,因為模塊相對重要,所以沒有一同放入 Nginx入門到實戰(2)場景實現篇 文章中,將其多帶帶提取出來一、負載均衡
負載均衡的實現方法就是我們上章介紹的反向代理 。將客戶的請求通過 nginx 分發(反向代理)到一組多臺不同的服務器上
這一組服務器我們稱為 服務池(upstream server),池內的每一個服務器稱為一個 單元,服務池內將對每一個單元進行請求輪訓,實現負載均衡
#配置 語法:upstream name ... 默認:—— 位置:http
upstream #自定義組名 { server x1.baidu.com; #可以是域名 server x2.baidu.com; #server x3.baidu.com #down 不參與負載均衡 #weight=5; 權重,越高分配越多 #backup; 預留的備份服務器 #max_fails 允許失敗的次數 #fail_timeout 超過失敗次數后,服務暫停時間 #max_coons 限制最大的接受的連接數 #根據服務器性能不同,配置適合的參數 #server 106.xx.xx.xxx; 可以是ip #server 106.xx.xx.xxx:8080; 可以帶端口號 #server unix:/tmp/xxx; 支出socket方式 }
假設我們有三臺服務器,并且假設它們的IP地址,前端負載均衡服務器A(127.0.0.1),后臺服務器B(127.0.0.2),后臺服務器C(127.0.0.3)
新建文件 proxy.conf,內容如下,上一章介紹的反向代理配置
proxy_redirect default; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k;
#服務器A的配置 http { ... upstream xxx { server 127.0.0.2; server 127.0.0.3; } server { liseten 80; server_name localhost; location / { proxy_pass http://xxx #upstream 對應自定義名稱 include proxy.conf; } } }
#服務器B、服務器C的配置 server { liseten 80; server_name localhost; location / { index index.html } }
調度算法
輪訓:按時間順序逐一分配到不同的后端服務器
加權輪訓:weight值越大,分配到的幾率越高
ip_hash:每個請求按訪問IP的hash結果分配,這樣來自同一個IP固定訪問一個后端服務器
least_conn:最少鏈接數,哪個機器連接數少就分發給誰
url_hash:按照訪問的URL的hash結果來分配請求,每一個URL定向到同一個后端服務器
hash關鍵數值:hash自定義key
ip_hash 配置
upstream xxx { ip_hash; server 127.0.0.2; server 127.0.0.3; }
ip_hash存在缺陷,當前端服務器再多一層時,將獲取不到用戶的正確IP,獲取的將是前一個前端服務器的IP,因此 nginx1.7.2版本推出了 url_hash
url_hash 配置
upstream xxx { hash $request_uri; server 127.0.0.2; server 127.0.0.3; }二、緩存服務
1. 緩存類型
服務端緩存:緩存存儲在后端服務器,如redis,memcache
代理緩存:緩存存儲在代理服務器或者中間件上,它的內容是從后端服務器獲取的,但是保存在自己本地
客戶端緩存:緩存在瀏覽器內的
2. nginx 代理緩存
客戶端請求nginx,nginx查看本地是否有緩存數據,若有直接返回給客戶端,若沒有再去后端服務器請求
http { proxy_cache_path /var/www/cache #緩存地址 levels=1:2 #目錄分級 keys_zone=test_cache:10m #開啟的keys空間名字:空間大小(1m可以存放8000個key) max_size=10g #目錄最大大小(超過時,不常用的將被刪除) inactive=60m #60分鐘內沒有被訪問的緩存將清理 use_temp_path=pff; #是否開啟存放臨時文件目錄,關閉默認存儲在緩存地址 server { ... location / { proxy_cache test_cache; #開啟緩存對應的名稱,在keys_zone命名好 proxy_cache_valid 200 304 12h; #狀態碼為200 304的緩存12小時 proxy_cache_valid any 10m; #其他狀態緩存10小時 proxy_cache_key $host$uri$is_args$args; #設置key值 add_header Nginx-Cache "$upstream_cache_status"; } } }
當有個特定請求我們不需要緩存的時候,在上面配置的內容中加入以下配置
server { ... if ($request_uri ~ ^/(login|register) ) { #當請求地址有login或register時 set $nocache = 1; #設置一個自定義變量為true } location / { proxy_no_cache $nocache $arg_nocache $arg_comment; proxy_no_cache $http_pragma $http_authoriztion; } }
3. 分片請求
早期版本 nginx 對大文件的分片請求不支持緩存,1.9版本后slice模塊實現了這個功能
前端發起請求,nginx去獲取這個請求文件的大小,若超過我們的定義slice的大小,會進行切片,分割成多個小的請求去請求后端,到前端就成為一個一個獨立的緩存文件
優勢:每個子請求收到的數據都會形成獨立文件,一個請求中斷了,其他請求不受影響,原本情況請求中斷,再次請求文件將從頭開始,而開啟分片請求,就接下去獲取未請求的小文件
劣勢:當文件很大或者slice很小時,可能會導致文件描述符耗盡等情況
語法: slice size; #當大文件請求時,設置size為每個小文件的大小 默認: slice 0; 位置: http/server/location
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39934.html
摘要:負載均衡與緩存服務也是屬于的實用場景之一,因為模塊相對重要,所以沒有一同放入入門到實戰場景實現篇文章中,將其單獨提取出來一負載均衡負載均衡的實現方法就是我們上章介紹的反向代理。 負載均衡與緩存服務也是屬于 nginx 的實用場景之一,因為模塊相對重要,所以沒有一同放入 Nginx入門到實戰(2)場景實現篇 文章中,將其單獨提取出來 一、負載均衡 負載均衡的實現方法就是我們上章介紹的反向...
摘要:說明對后端服務來講,服務器由其高性能得到廣泛應用。原書為英文版,由于自己英語水平所限,在進行系統學習之前,大致瀏覽并使用翻譯工具將免費版服務器配置部分進行了漢化整理,并取名烹調書。手冊發布當前漢化版發布在烹調書,會于近期將源碼發布到。 說明 對后端服務來講,Nginx 服務器由其高性能得到廣泛應用。使用 PHP 語言從事后端服務開發工作 6 年,但是如何入門 Nginx 及如何配置優化...
摘要:缺點客戶端可能會再用一層代理三緩存服務理解緩存類型配置語法協議等域名請求參數清理指定緩存讓部分頁面不緩存大文件分片請求四動靜分離參考視頻資料入門到實踐不管是運維還是開發都是你的必備技能下一篇基于的中間件架構三規則和讀取地域信息模塊服務 上一篇:基于Nginx的中間件架構(一):配置語法、Nginx模塊、請求限制和訪問控制、靜態WEB服務 一、代理服務(理解) 代理 - 代為辦理(如代...
閱讀 3323·2021-11-25 09:43
閱讀 3008·2021-10-15 09:43
閱讀 1965·2021-09-08 09:36
閱讀 2918·2019-08-30 15:56
閱讀 742·2019-08-30 15:54
閱讀 2684·2019-08-30 15:54
閱讀 2973·2019-08-30 11:26
閱讀 1237·2019-08-29 17:27