咨詢熱線:023-63853373

24小時熱線:13372636650

新聞中心

首頁

產品方案

服務項目

開發案例
新聞資訊
聯系我們

Ngnix隨記

2020/02/10  來源:樂潮信息

不單可以作為強大的web服務器,也可以作為一個反向代理服務器,而且nginx還可以按照調度規則實現動態、靜態頁面的分離,可以按照輪詢、ip哈希、URL哈希、權重等多種方式對后端服務器做負載均衡,同時還支持后端服務器的健康檢查。

在負載反向代理的算法上,共有六種:輪詢、ip_hash、weight、fair(第三方)、url_hash(第三方)、cookie。
 
輪詢是默認的,每一個請求按順序逐一分配到不同的后端服務器,如果后端服務器down掉了,則能自動剔除。Nginx默認采用round_robin加權算法。如果要選擇其他的負載均衡算法,必須在upstream的配置上下文中通過配置指令ip_hash明確指定(該配置項最好放在其他server指令等的前面,以便檢查server的配置選項是否合理)。

weight是設置權重,用于后端服務器性能不均的情況,訪問比率約等于權重之比。
upstream freeoa {
server 172.18.0.5:81 weight=1;
servse 172.18.0.3:80 weight=5;
}

ip_hash 解決了session問題:每個請求按訪問IP的hash結果分配,這樣每個訪客可以固定一個后端服務器。
upstream freeoa {
ip_hash;
server 172.18.0.5:81;
servse 172.18.0.3:80;
}

fair(第三方)按后端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream freeoa {
server 172.18.0.5:81;
servse 172.18.0.3:80;
fair;
}

url_hash (第三方)按訪問URL的hash結果來分配請求,使每個URL定向到同一個后端服務器,后端服務器為緩存時比較適用。另外,在upstream中加入hash語句后,server語句不能寫入weight等其他參數。
upstream freeoa {
server squid_ip1:3128;
servse squid_ip2:3128;
hash  $request_uri;
hash_method  crc32;
}
 
upstream freeoa {
ip_hash;
server 172.18.0.5:81;down
servse 172.18.0.4:80 weight=2 max_fails=2 fail_timeout=30s;
servse 172.18.0.3:80 backup;
}

其它相關指令介紹
down 暫時不參與負載
weight 權重
max_fail 允許請求失敗的次數,默認為1
fail_timeout max_fail次失敗后,暫停的時間
backup 所有其他非backup機器down或者忙的時候,才請求backup,所以這臺機器壓力最輕。


nginx負載均衡模塊ngx_http_upstream_module允許定義一組服務器,這組服務器可以被proxy_pass,fastcgi_pass和memcached_pass這些指令引用。

設置一個nginx負載均衡服務器的地址和其他參數。一個地址可以被指定為域名或IP地址,和一個可選的端口,或者被定為UNIX-domain套接字文件的路徑,使用"unix:"作為前綴。如果端口沒指定,則使用80端口。一個被解析到多個IP地址的域名本質上指定了多個服務器。

upstream name {...}
default:-
所屬指令:http
 
定義一組用于實現nginx負載均衡的服務器,它們可以偵聽在不同的端口。另外,可以混合使用偵聽TCP與UNIX-domain套接字文件。默認情況下,請求被分散在使用加權輪詢的nginx負載均衡服務器上。

語法:server 地址 [參數];
default:-
所屬指令:upstream
 
可以定義下面的參數:
 
weight=number
設置服務器的權限,默認是1

max_fails=number
設置在fail_timeout參數設置的時間內最大失敗次數,如果在這個時間內,所有針對該服務器的請求都失敗了,那么認為該服務器會被認為是停機了,停機時間是fail_timeout設置的時間。默認情況下,不成功連接數被設置為1。被設置為零則表示不進行鏈接數統計。那些連接被認為是不成功的可以通過proxy_next_upstream, fastcgi_next_upstream,和memcached_next_upstream指令配置。http_404狀態不會被認為是不成功的嘗試。

fail_time=time
設置多長時間內失敗次數達到最大失敗次數會被認為服務器停機了服務器會被認為停機的時間長度,默認情況下,超時時間被設置為10S。

max_fails 的默認值為 1,fail_timeout 的默認值是 10s。傳輸失敗的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。而且可以使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 響應時間。
 
backup
標記該服務器為備用服務器。當主服務器停止時,請求會被發送到它這里。當所有的非備機(non-backup)都宕機(down)或者繁忙(busy)的時候,就只使用由 backup 標注的備機。必須要注意的是,backup 不能和 ip_hash 關鍵字一起使用。
 
down
標記服務器永久停機了;與指令ip_hash一起使用。
    
語法:ip_hash;
default:-
所屬指令:upstream

指定nginx負載均衡器組使用基于客戶端ip的負載均衡算法。IPV4的前3個八進制位和所有的IPV6地址被用作一個hash key。這個方法確保了相同客戶端的請求一直發送到相同的服務器上除非這個服務器被認為是停機。這種情況下,請求會被發送到其他主機上,然后可能會一直發送到這個主機上。如果nginx負載均衡器組里面的一個服務器要臨時移除,它應該用參數down標記,來防止之前的客戶端IP還往這個服務器上發請求。

注意:在版本1.3.2中開始支持IPV6地址,在nginx版本1.3.1之前,不能在ip_hash中使用權重(weight)。

語法:keepalive 連接數;
default:-
所屬模塊:upstream
這個指令在版本1.1.4中出現

nginx負載均衡器的活動鏈接數緩存。

連接數(keepalive的值)指定了每個工作進程中保留的持續連接到nginx負載均衡器緩存的最大值。如果超過這個設置值的閑置進程想鏈接到nginx負載均衡器組,最先連接的將被關閉。


nginx負載均衡器內置變量(Embedded Variables)

nginx負載均衡模塊ngx_http_upstream_module支持下列內置變量:

$upstream_addr
保存一個服務器的IP地址和端口號或者UNIX-domain套接字文件的路徑。如果在處理請求過程中使用了多個服務器,那么它們的地址將以逗號分割,例如 :“192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock”。如果一個內置的從一個服務器組到另一個服務器組的重定向使用X-Accel-Redirect” or error_page ,那么那些服務器組以冒號隔開,例如“192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80”。

$upstream_response_time
保存nginx負載均衡服務器響應時間,以毫秒計。多個響應也以逗號和冒號隔開。

$upstream_status
保存nginx負載均衡服務器響應代碼。多個響應代碼也以逗號或冒號隔開。

$upstream_http_
保存nginx負載均衡服務器響應頭字段。例如,the “Server” response header field is made available through the $upstream_http_server variable.注意,只有最后一個服務器響應頭字段被保存。

后面介紹一種基于cookie的負載均衡模塊-sticky
像一個局域網的客戶同時訪問服務器,導致出現服務器分配不均衡,以及不能保證每次訪問都粘滯在同一臺服務器。如果基于cookie的, 每臺電腦都會有不同的cookie,在保持長連接的同時還保證了服務器的壓力均衡,nginx sticky值得推薦。

如果瀏覽器不支持cookie,那么sticky不生效,畢竟整個模塊是給予cookie實現的。

配置nginx sticky
nginx 的upstream使用sticky,如下

upstream freeoa{
sticky;
server 192.168.100.209:80;
server 192.168.100.225:80;
}

sticky其它語法
sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback];
name: 可以為任何的string字符,默認是route
domain:哪些域名下可以使用這個cookie
path:哪些路徑對啟用sticky,例如path/test,那么只有test這個目錄才會使用sticky做負載均衡
expires:cookie過期時間,默認瀏覽器關閉就過期,也就是會話方式。
no_fallbackup:如果設置了這個,cookie對應的服務器宕機了,那么將會返回502(bad gateway 或者 proxy error),建議不啟用

sticky expires用法

upstream freeoa {
sticky expires=1h;
server 172.18.0.209:80;
server 172.18.0.225:80;
}

注意:sticky模塊不能與ip_hash同時使用。

樂潮信息www.adihindu.com

*以上圖片均來源于網絡,如有侵權,請聯系刪除*

手機app定制開發要根據用戶市場來

重慶app開發公司樂潮科技認為,隨著移動互聯網技術的不斷發展,手機app開發現在已經

開發三級分銷系統APP的好處

重慶APP開發樂潮科技認為:三級分銷系統是各路商家的最愛,這句話說的絕對沒毛病。

重慶APP開發多少錢

根據app應用軟件開發的難易程度可以將重慶app開發價格大致分為一下幾類

點擊我更換圖片

公司地址:

重慶市渝北區冉家壩時光城寫字樓

聯系方式:

023-63853373

13372636650(24h熱線)

重慶市渝北區冉家壩時光城寫字樓

? 2020 樂潮信息

渝ICP備15006414號-2??????渝公網安備 50011202502110號???