操作系統(tǒng):CentOS-7.8
nginx版本:1.18.0
Tomcat版本:9.0.36
在上一篇文章中我們對Nginx進行了簡單介紹薪贫,也學(xué)習(xí)了nginx的基本配置和操作恍箭,今天這次我們將學(xué)習(xí)Nginx在生產(chǎn)中常被使用的功能負載均衡和緩存加速。上一篇文章《需要學(xué)會的Nginx知識》
一瞧省、概念
1.OSI七層網(wǎng)絡(luò)模型
OSI七層網(wǎng)絡(luò)模型是國際標準化組織(ISO)制定的一個用于計算機或通信系統(tǒng)間互聯(lián)的標準體系
應(yīng)用層扯夭。網(wǎng)絡(luò)服務(wù)與最終用戶的一個接口鳍贾,與用戶交互
應(yīng)用層是與用戶最近的一層,應(yīng)用層為用戶提供了交互接口交洗,以此來為用戶提供交互服務(wù)骑科。在這一層常用的協(xié)議有HTTP,HTTPS构拳,F(xiàn)TP咆爽,POP3等。
表示層置森。數(shù)據(jù)的表示伍掀、安全、壓縮
表示層提供數(shù)據(jù)格式編碼以及加解密功能暇藏,確保從請求端發(fā)出的數(shù)據(jù)到響應(yīng)端能被識別蜜笤。
會話層。創(chuàng)建盐碱、管理和銷毀會話
會話存在于從請求發(fā)出到接受響應(yīng)這個過程之間把兔,會話層充當這一過程的管理者,包括會話創(chuàng)建瓮顽、維持到銷毀
傳輸層县好。定義傳輸數(shù)據(jù)的協(xié)議端口號,以及流控和差錯校驗等功能
傳輸層創(chuàng)建以及管理端到端的連接暖混,提供數(shù)據(jù)傳輸服務(wù)缕贡。在傳輸層常見的協(xié)議是TCP、UDP協(xié)議
網(wǎng)絡(luò)層拣播。進行邏輯地址尋址晾咪,實現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇
網(wǎng)絡(luò)層也被稱為IP層,在網(wǎng)絡(luò)層中通過IP尋址來建立兩個節(jié)點之間的連接贮配,選擇合適的路由和交換節(jié)點谍倦,正確無誤地按照地址將數(shù)據(jù)傳送給目的端的運輸層。
數(shù)據(jù)鏈路層泪勒。建立邏輯連接昼蛀、進行硬件地址尋址、差錯校驗圆存,提供介質(zhì)訪問和鏈路管理
數(shù)據(jù)鏈路層會提供計算機MAC地址叼旋,通信的時候會攜帶,為了確保數(shù)據(jù)的正確投遞沦辙,會對MAC地址進行校驗夫植,以保證請求響應(yīng)的可靠性
物理層。傳輸介質(zhì)怕轿,物理媒介
物理層是端到端通信過程的物理介質(zhì)偷崩,實際最終信號的傳輸都是通過物理層實現(xiàn)的辟拷。常用設(shè)備有(各種物理設(shè)備)集線器阐斜、中繼器隅俘、調(diào)制解調(diào)器杀狡、網(wǎng)線膳凝、雙絞線休玩、同軸電纜等永部,這些都是物理層的傳輸介質(zhì)凫佛。
2.負載均衡
負載均衡是指將負載(工作任務(wù))進行平衡衫画、分攤到多個操作單元上進行運行,在網(wǎng)絡(luò)應(yīng)用中就是根據(jù)請求的信息不同,來決定怎么樣轉(zhuǎn)發(fā)流量糙麦。
負載均衡建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上魄缚,它提供了一種廉價有效透明的方法擴展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量焚廊、加強網(wǎng)絡(luò)數(shù)據(jù)處理能力鲜滩、提高網(wǎng)絡(luò)的靈活性和可用性。
在OSI七層網(wǎng)絡(luò)模型的基礎(chǔ)上节值,負載均衡也有不同的分類徙硅,主要有以下幾種
二層負載:基于MAC地址,通過一個虛擬MAC地址接受請求搞疗,然后再分配到真實的MAC地址嗓蘑。
三層負載:基于IP地址,通過一個虛擬IP地址匿乃,然后再分配到真實的IP桩皿。
四層負載:基于IP和端口,通過虛機的IP+端口接收請求幢炸,然后再分配到真實的服務(wù)器泄隔,LVS是典型的四層負載均衡應(yīng)用
七層負載:基于應(yīng)用信息,通過虛機主機名或者URL接收請求宛徊,再根據(jù)一些規(guī)則分配到真實的服務(wù)器佛嬉,nginx就是典型的七層負載均衡應(yīng)用
二、配置
1闸天、負載均衡策略
輪詢
輪詢策略下暖呕,所有上游服務(wù)器被訪問到的概率是一致的,且是按照一定的順序依次被請求到苞氮。如下示例配置湾揽,hdh100:9001、hdh100:9002和hdh100:9003三臺tomcat服務(wù)器依次被請求,每刷新一次就切換一次库物。
#上游tomcat集群
upstream www.learn.com{
server hdh100:9001;
server hdh100:9002;
server hdh100:9003;
}
#反向代理服務(wù)器
server {
listen 80;
server_name www.learn.com;
location / {
proxy_pass http://www.learn.com;
}
}
加權(quán)輪詢
加權(quán)輪詢策略下霸旗,是按照每個上游服務(wù)器分配的權(quán)重不同處理的連接數(shù)也不同,權(quán)重越大戚揭,被訪問到的次數(shù)就越多定硝。如下示例配置,hdh100:9001毫目、hdh100:9002和hdh100:9003的權(quán)重分別是1蔬啡,3,5镀虐,權(quán)重越大箱蟆,被分配的流量就越多。
#上游tomcat集群刮便,后面weight就是配置權(quán)重空猜,在設(shè)置weight時,默認權(quán)重是1
upstream www.learn.com{
server hdh100:9001 weight=1;
server hdh100:9002 weight=3;
server hdh100:9003 weight=5;
}
#反向代理服務(wù)器
server {
listen 80;
server_name www.learn.com;
location / {
proxy_pass http://www.learn.com;
}
}
ip_hash
ip_hash是根據(jù)用戶的ip進行hash散列將其請求分配到指定上游服務(wù)器恨旱。在用戶ip沒有發(fā)生變化的情況下辈毯,且上游服務(wù)器無變更時狈网,用戶的多次請求都會被轉(zhuǎn)發(fā)到同一臺上游服務(wù)器站玄。
且在使用ip_hash負責(zé)均衡策略時,如果需要臨時刪除其中一臺服務(wù)器介袜,則應(yīng)使用down參數(shù)對其進行標記仪芒,以便保留客戶端IP地址的當前哈希值唁影。
upstream www.learn.com{
ip_hash;
server hdh100:9001 weight=1;
server hdh100:9002 weight=3;
server hdh100:9003 weight=5;
}
url_hash
url_hash策略是根據(jù)url進行hash散列將其請求分配到指定的上游服務(wù)器。同一個url在上游服務(wù)器沒有發(fā)生變更的情況下是請求到同一臺服務(wù)器掂名。
upstream www.learn.com{
hash $request_uri;
server hdh100:9001 weight=1;
server hdh100:9002 weight=3;
server hdh100:9003 weight=5;
}
last_conn
last_conn將流量分發(fā)到當前連接數(shù)最少的服務(wù)器上的一個策略
upstream www.learn.com{
least_conn;
server hdh100:9001 weight=1;
server hdh100:9002 weight=3;
server hdh100:9003 weight=5;
}
2据沈、優(yōu)化配置
max_conns
限制上游服務(wù)器的最大連接數(shù),用于保護避免過載饺蔑,可以起到限流的作用锌介,在nginx1.11.5之前,該配置只能作用于商業(yè)版本的nginx猾警,默認值是0表示沒有限制孔祸,配置如下:
#上游服務(wù)器配置,每個服務(wù)器都可以設(shè)置max_conns
upstream www.learn.com{
server hdh100:9001 max_conns=200;
server hdh100:9002 max_conns=200;
server hdh100:9003 max_conns=200;
}
slow_start
緩慢開始肿嘲,當我們給上游服務(wù)器設(shè)置權(quán)重時融击,在配置了slow_start的情況下,該服務(wù)的權(quán)重是從0在配置的時間內(nèi)慢慢增長到所配置的權(quán)重雳窟,該配置目前是在商業(yè)版本的nginx中生效
slow_start不適用hash和random load balancing
上游服務(wù)器只有一臺的情況下,該參數(shù)也無效
如下配置則表示hdh100:9003這個服務(wù),在啟動后的60s內(nèi)權(quán)重是從0慢慢提升到5封救。
#上游服務(wù)器配置拇涤,給hdh100:9003配置了權(quán)重5和slow_start 60s,則在集群啟動后該服務(wù)器的權(quán)重是在60s的時間內(nèi)慢慢從0變?yōu)?
upstream www.learn.com{
server hdh100:9001 weight=1;
server hdh100:9002 weight=3;
server hdh100:9003 weight=5 slow_start=60s;
}
down和backup
down是將標記的服務(wù)器移除當前的服務(wù)器集群誉结,被標記的服務(wù)器不會被訪問到鹅士。
backup表示的是備用的意思,即在其他服務(wù)器可以提供服務(wù)的時候被backup標記的服務(wù)器不會被訪問到惩坑,當其他服務(wù)器都掛掉后掉盅,backup標記的服務(wù)開始提供服務(wù)。
#down配置示例以舒,如下配置趾痘,則hdh100:9001這臺服務(wù)器是不能提供服務(wù)的,不會被分配流量
upstream www.learn.com{
server hdh100:9001 down;
server hdh100:9002;
server hdh100:9003;
}
#backup配置示例蔓钟,如下配置永票,在hdh100:9002和hdh100:9003正常服務(wù)的時候,hdh100:9001不會提供服務(wù)滥沫,僅當另外兩臺服務(wù)都掛掉后侣集,hdh100:9001開始提供服務(wù)
upstream www.learn.com{
server hdh100:9001 backup;
server hdh100:9002;
server hdh100:9003;
}
max_fails和fail_timeout
max_fails是一個驗證服務(wù)器是否能提供正常服務(wù)的校驗,需結(jié)合fail_timeout使用兰绣,表示在一定時間段內(nèi)請求當前服務(wù)失敗的次數(shù)超過該值時世分,則認為該服務(wù)宕機失敗掉,就將該服務(wù)剔除上游服務(wù)器集群缀辩,不再給其分配訪問流量罚攀。
fail_timeout表示失敗服務(wù)的重試時間,即當該服務(wù)器被認為宕機失敗時雌澄,間隔指定時間后再來重新嘗試請求斋泄,如果仍請求失敗則繼續(xù)間隔指定時間再嘗試請求,一直重復(fù)這種行為
#如下是示例配置镐牺,表示在30s的時間內(nèi)請求hdh100:9001的失敗次數(shù)超過10次時炫掐,則認為hdh100:9001服務(wù)宕機,則隨后的30s內(nèi)該服務(wù)器不再被分配請求睬涧,30s后會重新嘗試請求該服務(wù)器募胃,若仍然請求失敗,則重復(fù)上述行為
upstream www.learn.com{
server hdh100:9001 max_fails=10 fail_timeout=30s;
server hdh100:9002;
server hdh100:9003;
}
keepalive
設(shè)置nginx和上游服務(wù)器直接保持的長連接數(shù)量畦浓,目的是為了減少創(chuàng)建連接和關(guān)閉連接的損耗
#如下示例痹束,設(shè)置保持的長連接數(shù)量為32
upstream www.learn.com{
server hdh100:9001 max_fails=10 fail_timeout=30s;
server hdh100:9002;
server hdh100:9003;
keepalive 32
}
#設(shè)置http版本為1.1,默認是http1.0版本是短連接
#設(shè)置Connection header為空
server {
listen 80;
server_name www.learn.com;
location / {
proxy_pass http://www.learn.com;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
3讶请、緩存配置
nginx緩存
瀏覽器中的緩存加快單個用戶瀏覽器的訪問的速度祷嘶,緩存是存在瀏覽器本地。
location / {
root html;
index index.html;
#設(shè)置緩存過期時間為10s
# expires 10s;
#設(shè)置具體到期時間,如下示例代表緩存過期時間為晚上10點30分時
# expires @22h30m;
#設(shè)置過期時間為現(xiàn)在的前一個小時论巍,則代表不使用緩存
# expires -1h;
#設(shè)置不使用緩存
# expires epoch;
# nginx關(guān)閉expires烛谊,則緩存機制是根據(jù)瀏覽器而定的
# expires off;
#設(shè)置緩存過期時間最大
# expires max;
}
nginx反向代理緩存
反向代理緩存是將,要代理的上游服務(wù)器的數(shù)據(jù)緩存在nginx端嘉汰,目的是為了提升訪問nginx端的用戶的訪問速度
#proxy_cache_path 設(shè)置存儲存儲目錄
#keys_zone 設(shè)置名稱以及共享內(nèi)存大小
#max_size 設(shè)置緩存大小
#inactive設(shè)置緩存過期時間丹禀,超過該時間則被清理
#use_temp_path設(shè)置是否使用臨時目錄,默認是使用鞋怀,在這里設(shè)置關(guān)閉
proxy_cache_path /home/local/cache keys_zone=learncache:5m max_size=2g inactive=60s use_temp_path=off;
server {
listen 80;
server_name www.learn.com;
#開啟緩存
proxy_cache learncache;
#對200和304狀態(tài)的請求設(shè)置緩存過期時間
proxy_cache_valid 200 304 1h;
location / {
proxy_pass http://www.learn.com;
}
}
個人公眾號【愛做夢的錘子】双泪,全網(wǎng)同id,個站 http://te-amo.site密似,歡迎關(guān)注焙矛,里面會分享更多有用知識,還有我的私密照片
覺得不錯就點個贊叭QAQ