nginx支持下面幾種負載均衡機制:
round-robin:輪詢。以輪詢方式將請求分配到不一樣服務器上
least-connected:最少鏈接數。將下一個請求分配到鏈接數最少的那臺服務器上
ip-hash :基於客戶端的IP地址。散列函數被用於肯定下一個請求分配到哪臺服務器上nginx
負載均衡默認配置
nginx負載均衡最簡單的配置以下:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}算法
server {
listen 80;服務器
location / { proxy_pass http://myapp1; }
}
}
在上面的例子中,srv1,srv2,srv3運行着相同的應用程序。若是沒有特別指定負載均衡方法默認是以輪詢方式。全部的請求被代理到服務組myapp1,而後nginx負載均衡的分發請求。
nginx反向代理實現包括下面這些負載均衡HTTP、HTTPS、FastCGI、uwsgi,SCGI和memcached。
要配置HTTPS的負載均衡,只需使用「https」開頭的協議。
當要設置FastCGI,uwsgi,SCGI,或者memcached的負載平衡,分別使用fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令。session
以輪詢或最少鏈接的負載均衡算法,每一個後續的客戶端的請求,能夠潛在地分配給不一樣的服務器上,並不能保證相同的客戶端請求將老是指向同一服務器上。
這對於有會話信息的應用場景下,會有問題的。通常的作法是須要將session信息共享,如使用memcache來存放session。
若是將客戶端的會話「粘性」或老是試圖選擇一個特定的服務器,也是能夠的。負載均衡的ip-hash機制就能夠實現。
配置以下:
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}app
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
這種狀況下,每5個新的請求將被分佈以下:3請求將被引導到SRV1,一個請求將去SRV2,另外一個請求去srv3。負載均衡