1. 程式人生 > >【nginx】負載配置

【nginx】負載配置

contos搭建nginx服務:http://www.cnblogs.com/wangzhongqiu/p/6527346.html

轉自:http://ajita.iteye.com/blog/1715269

 Nginx ("engine x") 是一個高效能的 HTTP 和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 
    Nginx 是一個很牛的高效能Web和反向代理伺服器,它具有很多非常優越的特性:     在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品:Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平臺之一。能夠支援高達 50,000 個併發連線數的響應,感謝Nginx為我們選擇了 epoll and kqueue作為開發模型。 
    Nginx作為負載均衡伺服器:Nginx 既可以在內部直接支援 Rails 和 PHP 程式對外進行服務,也可以支援作為 HTTP代理伺服器對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。 
----------------------------------------------------- 
以上都是簡介,也算是廢話吧 
----------------------------------------------------- 

    nginx直接去官網下載就可以,配置檔案放在下面的conf目錄。 

1.下面先做最簡單的配置,意思就是把請求到本機8080埠的所有http請求分別轉發到本機18080和28080埠: 

Conf程式碼  收藏程式碼
  1. #user  nobody;  
  2. worker_processes  2;  
  3. #error_log  logs/error.log;  
  4. #error_log  logs/error.log  notice;  
  5. #error_log  logs/error.log  info;  
  6. #pid        logs/nginx.pid;  
  7. events {  
  8.     #使用網路IO模型linux建議epoll,FreeBSD建議採用kqueue,window下不指定。     
  9.     #use epoll;   
  10.     worker_connections  1024;  
  11. }  
  12. http {  
  13.     include       mime.types;  
  14.     default_type  application/octet-stream;  
  15.     sendfile        on;  
  16.     keepalive_timeout  65;  
  17.     #gzip  on;  
  18.     upstream mysvr {     
  19.       #根據ip計算將請求分配各那個後端tomcat,許多人誤認為可以解決session問題,其實並不能。     
  20.       #同一機器在多網情況下,路由切換,ip可能不同     
  21.       #ip_hash;  
  22.       server localhost:18080;     
  23.       server localhost:28080;     
  24.      }     
  25.     server {  
  26.         listen       8080;  
  27.         server_name  localhost;  
  28.         #charset koi8-r;  
  29.         #access_log  logs/host.access.log  main;  
  30.         location / {     
  31.                     proxy_connect_timeout   3;     
  32.                     proxy_send_timeout      30;     
  33.                     proxy_read_timeout      30;     
  34.                     proxy_pass http://mysvr;     
  35.             }  
  36.     }  
  37. }  



2.Nginx upstream的5種權重分配方式 
1)、輪詢(預設) 
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。 

2)、weight 
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。 
例如: 
upstream mysvr { 
server 192.168.0.14:8080 weight=10; 
server 192.168.0.15:8080 weight=10; 

3)、ip_hash 
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題(在上面提到的,如果一臺機器有多個ip,且都能達到我們的伺服器,這點就無效了)。 
(適用於要求ip地址一致性的場景) 
例如: 
upstream mysvr { 
ip_hash; 
server 192.168.0.14:8080; 
server 192.168.0.15:8080; 


4)、fair(第三方) 
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。 
(fair策略是擴充套件策略,預設不被編譯進nginx核心。其原理是根據後端伺服器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流。這種策略具有很強的自適應性,但是實際的網路環境往往不是那麼簡單,因此要慎用。) 

upstream mysvr { 
server 192.168.0.14:8080; 
server 192.168.0.15:8080; 
fair; 

5)、url_hash(第三方) 
按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。(適用於請求一致性,如快取伺服器) 
例:在upstream中加入hash語句,server語句中不能寫入weight等其他的引數,hash_method是使用的hash演算法 
upstream mysvr { 
server 192.168.0.14:8080; 
server 192.168.0.15:8080; 
hash $request_uri; 
hash_method crc32; 


3.定義負載均衡裝置的Ip及裝置狀態 

upstream mysvr { 
ip_hash; 
server 127.0.0.1:9090 down; 
server 127.0.0.1:8080 weight=2; 
server 127.0.0.1:6060; 
server 127.0.0.1:7070 backup; 

在需要使用負載均衡的server中增加 
proxy_pass http://bakend/; 

每個裝置的狀態設定為: 
1.down 表示單前的server暫時不參與負載 
2.weight 預設為1.weight越大,負載的權重就越大。 
3.max_fails:允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤 
4.fail_timeout:max_fails次失敗後,暫停的時間。 
5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。