Nginx****實現高可用
一、 課程目標
Nginx介紹
Ningx應用場景
Windows環境下安裝Nginx
Windows環境下實現反向代理
Windows環境下實現負載均衡
Nginx實現網關接口跨域解決方案
Nginx實現防盜鏈
Nginx防止DDOS
Linux環境下安裝Nginx
Linux環境下實現反向代理
Linux環境下nginx+keepalived實現高可用
Linux環境下Session共享解決方案
高并發解決方案
一、nginx入門
1.1什么是nginx?
nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬并發鏈接,并且cpu、內存等資源消耗卻非常低,運行非常穩定,所以現在很多知名的公司都在使用nginx。
1.2 nginx應用場景
1、http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。
2、虛擬主機。可以實現在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集群可以使用nginx做反向代理。并且多臺服務器可以平均分擔負載,不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。
<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環境下安裝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做靜態服務器
1.3.1 windows常用命令
nginx.exe -s stop –停止
1.4 nginx優缺點
占內存小,可以實現高并發連接、處理響應快。
可以實現http服務器、虛擬主機、反向代理、負載均衡。
nginx配置簡單
可以不暴露真實服務器IP地址
1.4 nginx.conf 介紹
1.4.1 nginx.conf文件的結構
nginx的配置由特定的標識符(指令符)分為多個不同的模塊。 指令符分為簡單指令和塊指令。
- 簡單指令格式:[name parameters;]
- 塊指令格式:和簡單指令格式有一樣的結構,但其結束標識符不是分號,而是大括號{},塊指令內部可以包含simple directives 和block directives, 可以稱塊指令為上下文(e.g. events, http, server, location)
conf文件中,所有不屬于塊指令的簡單指令都屬于main上下文的,http塊指令屬于main上下文,server塊指令http上下文。
1.4.2 配置靜態訪問
Web server很重要一部分工作就是提供靜態頁面的訪問,例如images, html page。nginx可以通過不同的配置,根據request請求,從本地的目錄提供不同的文件返回給客戶端。 打開安裝目錄下的nginx.conf文件,默認配置文件已經在http指令塊中創建了一個空的server塊,在nginx-1.8.0中的http塊中已經創建了一個默認的server塊。內容如下:
|
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實現反向代理
1.4.1什么是反向代理?
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。
啟動一個Tomcat 127.0.0.1:8080
使用nginx反向代理 8080.itmayiedu.com 直接跳轉到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實現負載均衡
1.5.1什么是負載均衡
負載均衡 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。
<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負載均衡策略
|
1****、輪詢(默認) 每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; } 2****、指定權重 指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況。 upstream backserver { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 3****、IP綁定 ip_hash 每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決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宕機輪訓配置規則
|
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解決網站跨域問題
配置:
|
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限制請求速度
設置Nginx、Nginx Plus的連接請求在一個真實用戶請求的合理范圍內。比如,如果你覺得一個正常用戶每兩秒可以請求一次登錄頁面,你就可以設置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
命令設置了一個叫one的共享內存區來存儲請求狀態的特定鍵值,在上面的例子中是客戶端IP($binary_remote_addr)。location塊中的limit_req
通過引用one共享內存區來實現限制訪問/login.html的目的。
1.7.1限制請求速度
設置Nginx、Nginx Plus的連接數在一個真實用戶請求的合理范圍內。比如,你可以設置每個客戶端IP連接/store不可以超過10個。