nginx 的負載平衡

簡單的負載平衡範例

#user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream backend1 {
        server www1.example.com;         #正常用這個
        server www2.example.com;         #正常用這個
        server www3.example.com;         #正常用這個
    }

    upstream backend2 {
        server www1.example.com;         #正常用這個
        server nowork.example.com down;    #暫時不用的....
        server backup.example.com backup;  #備援
    }

    upstream backend3 {                  
        server www.example.com max_fails=1 fail_timeout=10s;    #健康檢查,錯誤一次會進入休眠狀態10秒
        server bad.example.com max_fails=1 fail_timeout=10s;
        server bak.example.com max_fails=1 fail_timeout=10s;
    }

    upstream backend4 {
        server www.example.com weight=3;   #預設是1 所以這個會收到三倍的量
        server bad.example.com;
        server bak.example.com;
    }

    server {
        listen       80;
        server_name  localhost;                             #可以改成真正的domain
        add_header 'Access-Control-Allow-Origin' '*';       #允許所有來源訪問

        location / {
            add_header Access-Control-Allow-Origin *;
            try_files $uri @backend;
        }

        location @backend {
            proxy_pass http://backend;                         #指定 backend 這個服務當作後端
            #proxy_next_upstream error timeout http_500;        #如果回應500 error/ timeout 會嘗試下一台 

            proxy_set_header X-Real-IP $remote_addr;            #把IP送給反向代理的 server
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    #把Protocol送給反向代理的 server
            proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;     #把Protocol送給反向代理的 server
        }
    }
}

這裡提供了 upstream 的幾種設定方法(可以混用)

  1. proxy_pass http://backend; 這邊可以指定要用哪套 upstream
  2. 正常來說會使用 backend1 就可以部署多台後端伺服器
  3. backend2 提供了 down /backup 的描述,down不會被用到,但是backup 在正常機器失效時會被拿來使用
  4. backend3 是健康檢查機制,可以在嘗試一次(max_fail 設定值) 失敗後,讓這個server 先暫時不被使用10秒鐘,當下會先嘗試使用其他的server
  5. backend4 提供 權重的資訊,正常不寫的話都是1 ,但可以加上weight 來調整各個server 的權重比例,畢竟不是全部機器效能都一樣

發佈留言