Nginx****實(shí)現(xiàn)高可用
一菊碟、 課程目標(biāo)
Nginx介紹
Ningx應(yīng)用場景
Windows環(huán)境下安裝Nginx
Windows環(huán)境下實(shí)現(xiàn)反向代理
Windows環(huán)境下實(shí)現(xiàn)負(fù)載均衡
Nginx實(shí)現(xiàn)網(wǎng)關(guān)接口跨域解決方案
Nginx實(shí)現(xiàn)防盜鏈
Nginx防止DDOS
Linux環(huán)境下安裝Nginx
Linux環(huán)境下實(shí)現(xiàn)反向代理
Linux環(huán)境下nginx+keepalived實(shí)現(xiàn)高可用
Linux環(huán)境下Session共享解決方案
高并發(fā)解決方案
一、nginx入門
1.1什么是nginx宠蚂?
nginx是一款高性能的http 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器矮锈。由俄羅斯的程序設(shè)計師Igor Sysoev所開發(fā)誓酒,官方測試nginx能夠支支撐5萬并發(fā)鏈接鹏浅,并且cpu诗轻、內(nèi)存等資源消耗卻非常低钳宪,運(yùn)行非常穩(wěn)定,所以現(xiàn)在很多知名的公司都在使用nginx扳炬。
1.2 nginx應(yīng)用場景
1吏颖、http服務(wù)器。Nginx是一個http服務(wù)可以獨(dú)立提供http服務(wù)恨樟“胱恚可以做網(wǎng)頁靜態(tài)服務(wù)器。
2劝术、虛擬主機(jī)缩多〈艮龋可以實(shí)現(xiàn)在一臺服務(wù)器虛擬出多個網(wǎng)站。例如個人網(wǎng)站使用的虛擬主機(jī)衬吆。
3梁钾、反向代理,負(fù)載均衡咆槽。當(dāng)網(wǎng)站的訪問量達(dá)到一定程度后陈轿,單臺服務(wù)器不能滿足用戶的請求時,需要用多臺服務(wù)器集群可以使用nginx做反向代理秦忿。并且多臺服務(wù)器可以平均分擔(dān)負(fù)載麦射,不會因?yàn)槟撑_服務(wù)器負(fù)載高宕機(jī)而某臺服務(wù)器閑置的情況。
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="圖片_x0020_123" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:415pt;height:517pt" o:ole=""><v:imagedata src="file:///C:/Users/86159/AppData/Local/Temp/msohtmlclip1/01/clip_image001.emz" o:title=""></v:imagedata></v:shape>
1.3 Windows環(huán)境下安裝Nginx
解壓:nginx-windows
雙擊: nginx.exe
<v:shape id="圖片_x0020_1" o:spid="_x0000_i1027" type="#_x0000_t75" style="width:413.5pt;height:165pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:/Users/86159/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png" o:title=""></v:imagedata></v:shape>
能看到nginx歡迎界面說明,nginx安裝成功
演示下 nginx做靜態(tài)服務(wù)器
1.3.1 windows常用命令
nginx.exe -s stop –停止
1.4 nginx優(yōu)缺點(diǎn)
占內(nèi)存小灯谣,可以實(shí)現(xiàn)高并發(fā)連接潜秋、處理響應(yīng)快。
可以實(shí)現(xiàn)http服務(wù)器胎许、虛擬主機(jī)峻呛、反向代理、負(fù)載均衡辜窑。
nginx配置簡單
可以不暴露真實(shí)服務(wù)器IP地址
1.4 nginx.conf 介紹
1.4.1 nginx.conf文件的結(jié)構(gòu)
nginx的配置由特定的標(biāo)識符(指令符)分為多個不同的模塊钩述。 指令符分為簡單指令和塊指令。
- 簡單指令格式:[name parameters;]
- 塊指令格式:和簡單指令格式有一樣的結(jié)構(gòu)穆碎,但其結(jié)束標(biāo)識符不是分號牙勘,而是大括號{},塊指令內(nèi)部可以包含simple directives 和block directives, 可以稱塊指令為上下文(e.g. events, http, server, location)
conf文件中,所有不屬于塊指令的簡單指令都屬于main上下文的所禀,http塊指令屬于main上下文方面,server塊指令http上下文。
1.4.2 配置靜態(tài)訪問
Web server很重要一部分工作就是提供靜態(tài)頁面的訪問色徘,例如images, html page恭金。nginx可以通過不同的配置,根據(jù)request請求褂策,從本地的目錄提供不同的文件返回給客戶端横腿。 打開安裝目錄下的nginx.conf文件,默認(rèn)配置文件已經(jīng)在http指令塊中創(chuàng)建了一個空的server塊斤寂,在nginx-1.8.0中的http塊中已經(jīng)創(chuàng)建了一個默認(rèn)的server塊耿焊。內(nèi)容如下:
|
server {
listen 80****;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500****502****503****504 /****50****x.html;
location = /****50****x.html {
root html;
}
**} **
|
1.4 nginx實(shí)現(xiàn)反向代理
1.4.1什么是反向代理?
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器扬蕊,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端搀别,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。
啟動一個Tomcat 127.0.0.1:8080
使用nginx反向代理 8080.itmayiedu.com 直接跳轉(zhuǎn)到127.0.0.1:8080
1.4.1Host文件新增
|
127.0.0.1 8080.itmayiedu.com
127.0.0.1 b8081.itmayiedu.com
|
1.4.2 nginx.conf 配置
配置信息:
|
server {
listen 80;
server_name 8080.itmayiedu.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
server {
listen 80;
server_name b8081.itmayiedu.com;
location / {
proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
}
|
1.5 nginx實(shí)現(xiàn)負(fù)載均衡
1.5.1什么是負(fù)載均衡
負(fù)載均衡 建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上尾抑,它提供了一種廉價有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬歇父、增加吞吐量蒂培、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性榜苫。
負(fù)載均衡护戳,英文名稱為Load Balance,其意思就是分?jǐn)偟蕉鄠€操作單元上進(jìn)行執(zhí)行垂睬,例如Web服務(wù)器媳荒、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等驹饺,從而共同完成工作任務(wù)钳枕。
<v:shape id="圖片_x0020_32" o:spid="_x0000_i1026" type="#_x0000_t75" style="width:415pt;height:223.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:/Users/86159/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png" o:title=""></v:imagedata></v:shape>
1.5.3負(fù)載均衡策略
|
1****、輪詢(默認(rèn)) 每個請求按時間順序逐一分配到不同的后端服務(wù)器赏壹,如果后端服務(wù)器down掉鱼炒,能自動剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2****蝌借、指定權(quán)重 指定輪詢幾率昔瞧,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況菩佑。 upstream backserver { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 3****自晰、IP綁定 ip_hash 每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器稍坯,可以解決session的問題酬荞。 upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
|
1.5.4配置代碼
|
upstream backserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name www.itmayiedu.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
}
}
|
1.5.4宕機(jī)輪訓(xùn)配置規(guī)則
|
server {
listen 80;
server_name www.itmayiedu.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
proxy_connect_timeout 1;
proxy_send_timeout 1;
proxy_read_timeout 1;
}
}
|
1.6 nginx解決網(wǎng)站跨域問題
配置:
|
server {
listen 80;
server_name www.itmayiedu.com;
location /A {
proxy_pass http://a.a.com:81/A;
index index.html index.htm;
}
location /B {
proxy_pass http://b.b.com:81/B;
index index.html index.htm;
}
}
|
1.7 nginx配置防盜鏈
|
location ~ .*.(jpg|jpeg|JPG|png|gif|icon)$ {
valid_referers blocked http://www.itmayiedu.com www.itmayiedu.com;
if ($invalid_referer) {
return 403;
}
}
|
1.7 nginx配置DDOS
1.7.1限制請求速度
設(shè)置Nginx、Nginx Plus的連接請求在一個真實(shí)用戶請求的合理范圍內(nèi)劣光。比如袜蚕,如果你覺得一個正常用戶每兩秒可以請求一次登錄頁面糟把,你就可以設(shè)置Nginx每兩秒鐘接收一個客戶端IP的請求(大約等同于每分鐘30個請求)绢涡。
|
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {
...
location /login.html {
limit_req zone=one;
...
}
}
|
limit_req_zone
命令設(shè)置了一個叫one的共享內(nèi)存區(qū)來存儲請求狀態(tài)的特定鍵值山害,在上面的例子中是客戶端IP($binary_remote_addr)蠢莺。location塊中的limit_req
通過引用one共享內(nèi)存區(qū)來實(shí)現(xiàn)限制訪問/login.html的目的。
1.7.1限制請求速度
設(shè)置Nginx蕴侣、Nginx Plus的連接數(shù)在一個真實(shí)用戶請求的合理范圍內(nèi)缠犀。比如数苫,你可以設(shè)置每個客戶端IP連接/store不可以超過10個。